github.com/rudderlabs/rudder-go-kit@v0.30.0/testhelper/docker/resource/transformer/transformer_test.go (about) 1 package transformer_test 2 3 import ( 4 "bytes" 5 "io" 6 "net/http" 7 "net/url" 8 "testing" 9 10 "github.com/tidwall/gjson" 11 12 "github.com/rudderlabs/rudder-go-kit/httputil" 13 14 "github.com/ory/dockertest/v3" 15 "github.com/stretchr/testify/require" 16 17 "github.com/rudderlabs/rudder-go-kit/testhelper/docker/resource/transformer" 18 ) 19 20 func TestSetup(t *testing.T) { 21 pool, err := dockertest.NewPool("") 22 require.NoError(t, err) 23 24 t.Run("test get endpoints", func(t *testing.T) { 25 tests := []struct { 26 name string 27 tag string 28 urlPath string 29 }{ 30 { 31 name: "transformer - health", 32 tag: "latest", 33 urlPath: "health", 34 }, 35 { 36 name: "user transformer - health", 37 tag: "ut-latest", 38 urlPath: "health", 39 }, 40 { 41 name: "transformer - features", 42 tag: "latest", 43 urlPath: "features", 44 }, 45 { 46 name: "user transformer - features", 47 tag: "ut-latest", 48 urlPath: "features", 49 }, 50 } 51 for _, tt := range tests { 52 t.Run(tt.name, func(t *testing.T) { 53 transformerContainer, err := transformer.Setup(pool, t, 54 transformer.WithConfigBackendURL("random-url"), 55 transformer.WithDockerImageTag(tt.tag)) 56 require.NoError(t, err) 57 endpoint, err := url.JoinPath(transformerContainer.TransformerURL, tt.urlPath) 58 require.NoError(t, err) 59 resp, err := http.Get(endpoint) 60 require.NoError(t, err) 61 defer func() { _ = resp.Body.Close() }() 62 require.Equal(t, resp.StatusCode, http.StatusOK) 63 }) 64 } 65 }) 66 67 t.Run("test custom transformation", func(t *testing.T) { 68 transformations := map[string]string{ 69 "2Nazu8t4ujUC0Dzc4pBFbjmOijx": `export function transformEvent(event, metadata) { 70 event.transformed=true 71 return event; 72 }`, 73 } 74 transformerContainer, err := transformer.Setup(pool, t, transformer.WithUserTransformations(transformations, t)) 75 require.NoError(t, err) 76 77 transformerURL, err := url.JoinPath(transformerContainer.TransformerURL, "customTransform") 78 require.NoError(t, err) 79 80 rawReq := []byte(`[{"message":{ 81 "userId": "identified_user_id", 82 "anonymousId":"anonymousId_1", 83 "messageId":"messageId_1", 84 "type": "track", 85 "event": "Product Reviewed", 86 "properties": { 87 "review_id": "12345", 88 "product_id" : "123", 89 "rating" : 3.5, 90 "review_body" : "Average product, expected much more." 91 } 92 },"metadata":{"sourceId":"xxxyyyzzEaEurW247ad9WYZLUyk","workspaceId":"fyJvxaglFrCFxsBcLiSPBCmgpWK", 93 "messageId":"messageId_1"},"destination":{"Transformations":[{"VersionID":"2Nazu8t4ujUC0Dzc4pBFbjmOijx","ID":""}]}}]`) 94 req, reqErr := http.NewRequest(http.MethodPost, transformerURL, bytes.NewBuffer(rawReq)) 95 require.NoError(t, reqErr) 96 req.Header.Set("Content-Type", "application/json; charset=utf-8") 97 req.Header.Set("X-Feature-Gzip-Support", "?1") 98 // Header to let transformer know that the client understands event filter code 99 req.Header.Set("X-Feature-Filter-Code", "?1") 100 101 resp, err := http.DefaultClient.Do(req) 102 defer func() { httputil.CloseResponse(resp) }() 103 require.NoError(t, err) 104 require.Equal(t, http.StatusOK, resp.StatusCode) 105 respData, err := io.ReadAll(resp.Body) 106 require.NoError(t, err) 107 require.True(t, gjson.Get(string(respData), "0.output.transformed").Bool()) 108 }) 109 }