diff --git a/worker/internal/benthos/transformers/int_phone.go b/worker/internal/benthos/transformers/int_phone.go index a586b08d11..f3b6c01e10 100644 --- a/worker/internal/benthos/transformers/int_phone.go +++ b/worker/internal/benthos/transformers/int_phone.go @@ -12,20 +12,34 @@ import ( func init() { spec := bloblang.NewPluginSpec(). - Param(bloblang.NewBoolParam("preserve_length")) + Param(bloblang.NewInt64Param("number").Optional()). + Param(bloblang.NewBoolParam("preserve_length").Optional()) // register the plugin - err := bloblang.RegisterMethodV2("intphonetransformer", spec, func(args *bloblang.ParsedParams) (bloblang.Method, error) { + err := bloblang.RegisterFunctionV2("intphonetransformer", spec, func(args *bloblang.ParsedParams) (bloblang.Function, error) { - preserveLength, err := args.GetBool("preserve_length") + numberPtr, err := args.GetOptionalInt64("number") if err != nil { return nil, err } + var number int64 + if numberPtr != nil { + number = *numberPtr + } + + preserveLengthPtr, err := args.GetOptionalBool("preserve_length") + if err != nil { + return nil, err + } + var preserveLength bool + if preserveLengthPtr != nil { + preserveLength = *preserveLengthPtr + } - return bloblang.Int64Method(func(s int64) (any, error) { - res, err := GenerateIntPhoneNumber(s, preserveLength) + return func() (any, error) { + res, err := GenerateIntPhoneNumber(number, preserveLength) return res, err - }), nil + }, nil }) if err != nil { @@ -37,14 +51,25 @@ func init() { // generates a random phone number and returns it as an int64 func GenerateIntPhoneNumber(number int64, preserveLength bool) (int64, error) { - if preserveLength { + if number != 0 { + if preserveLength { - res, err := GenerateIntPhoneNumberPreserveLength(number) - if err != nil { - return 0, fmt.Errorf("unable to convert phone number string to int64") - } - return res, err + res, err := GenerateIntPhoneNumberPreserveLength(number) + if err != nil { + return 0, fmt.Errorf("unable to convert phone number string to int64") + } + return res, err + + } else { + res, err := GenerateRandomTenDigitIntPhoneNumber() + if err != nil { + return 0, fmt.Errorf("unable to convert phone number string to int64") + } + + return res, err + + } } else { res, err := GenerateRandomTenDigitIntPhoneNumber() diff --git a/worker/internal/benthos/transformers/int_phone_test.go b/worker/internal/benthos/transformers/int_phone_test.go index eacd728fce..e69895e6cc 100644 --- a/worker/internal/benthos/transformers/int_phone_test.go +++ b/worker/internal/benthos/transformers/int_phone_test.go @@ -1,6 +1,7 @@ package neosync_transformers import ( + "fmt" "strconv" "strings" "testing" @@ -9,7 +10,7 @@ import ( "github.com/stretchr/testify/assert" ) -func TestGenerateIntPhoneNumberPreserveLengthTrue(t *testing.T) { +func Test_GenerateIntPhoneNumberPreserveLengthTrue(t *testing.T) { pn := int64(618384928322) expectedLength := 12 @@ -33,14 +34,13 @@ func TestGenerateIntPhoneNumberPreserveLengthFalse(t *testing.T) { } -func TestIntPhoneNumberTransformer(t *testing.T) { - mapping := `root = this.intphonetransformer(true)` +func Test_IntPhoneNumberTransformerWithValue(t *testing.T) { + testVal := int64(6183849282) + mapping := fmt.Sprintf(`root = intphonetransformer(%d,true)`, testVal) ex, err := bloblang.Parse(mapping) assert.NoError(t, err, "failed to parse the int64 phone transformer") - testVal := int64(6183849282) - - res, err := ex.Query(testVal) + res, err := ex.Query(nil) assert.NoError(t, err) numStr := strconv.FormatInt(testVal, 10) @@ -49,3 +49,33 @@ func TestIntPhoneNumberTransformer(t *testing.T) { assert.Equal(t, len(resStr), len(numStr), "Generated phone number must be the same length as the input phone number") assert.IsType(t, res, testVal) } + +func Test_IntPhoneNumberTransformerWithNoValue(t *testing.T) { + mapping := `root = intphonetransformer()` + + ex, err := bloblang.Parse(mapping) + assert.NoError(t, err, "failed to parse the int64 phone transformer") + + res, err := ex.Query(nil) + assert.NoError(t, err) + + resStr := strconv.FormatInt(res.(int64), 10) + + assert.Equal(t, len(resStr), 10, "Generated phone number must be the same length as the input phone number") + assert.IsType(t, res, int64(2), "Generated phone number must an int64 type") +} + +func Test_IntPhoneNumberTransformerWithZeroValue(t *testing.T) { + mapping := `root = intphonetransformer(0)` + + ex, err := bloblang.Parse(mapping) + assert.NoError(t, err, "failed to parse the int64 phone transformer") + + res, err := ex.Query(nil) + assert.NoError(t, err) + + resStr := strconv.FormatInt(res.(int64), 10) + + assert.Equal(t, len(resStr), 10, "Generated phone number must be the same length as the input phone number") + assert.IsType(t, res, int64(2), "Generated phone number must an int64 type") +}