Skip to content

Commit e39f9ad

Browse files
committed
improve tests
1 parent 3bd0e8a commit e39f9ad

1 file changed

Lines changed: 73 additions & 56 deletions

File tree

pkg/transform/engine/engine_javascript_test.go

Lines changed: 73 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ package engine
1313

1414
import (
1515
"fmt"
16+
"maps"
1617
"reflect"
1718
"strings"
1819
"testing"
@@ -1334,7 +1335,7 @@ func TestJSEngineMakeFunction_SpModeV2True(t *testing.T) {
13341335
ExpInterState: &engineProtocol{
13351336
FilterOut: false,
13361337
PartitionKey: "",
1337-
Data: testJSMapForJSONInput,
1338+
Data: mergeMaps(testJSMap, testJSONTimestampsMap),
13381339
},
13391340
IsJSON: true,
13401341
Error: nil,
@@ -1361,7 +1362,7 @@ func TestJSEngineMakeFunction_SpModeV2True(t *testing.T) {
13611362
ExpInterState: &engineProtocol{
13621363
FilterOut: false,
13631364
PartitionKey: "",
1364-
Data: testJSMap,
1365+
Data: mergeMaps(testJSMap, testTSVTimestampsMap),
13651366
},
13661367
IsJSON: true,
13671368
Error: nil,
@@ -1374,9 +1375,7 @@ func TestJSEngineMakeFunction_SpModeV2True(t *testing.T) {
13741375
delete Object.assign(x.Data, {['app_id_CHANGED']: x.Data['app_id'] })['app_id'];
13751376
}
13761377
1377-
return {
1378-
Data: JSON.stringify(x.Data)
1379-
};
1378+
return x;
13801379
}
13811380
`,
13821381
Input: &models.Message{
@@ -1394,7 +1393,7 @@ func TestJSEngineMakeFunction_SpModeV2True(t *testing.T) {
13941393
ExpInterState: &engineProtocol{
13951394
FilterOut: false,
13961395
PartitionKey: "",
1397-
Data: testJsJSONChanged1,
1396+
Data: mergeMaps(testJsJSONChanged1Map, testJSONTimestampsMap),
13981397
},
13991398
IsJSON: true,
14001399
Error: nil,
@@ -1407,9 +1406,7 @@ func TestJSEngineMakeFunction_SpModeV2True(t *testing.T) {
14071406
delete Object.assign(x.Data, {['app_id_CHANGED']: x.Data['app_id'] })['app_id'];
14081407
}
14091408
1410-
return {
1411-
Data: JSON.stringify(x.Data)
1412-
};
1409+
return x;
14131410
}
14141411
`,
14151412
Input: &models.Message{
@@ -1427,7 +1424,7 @@ func TestJSEngineMakeFunction_SpModeV2True(t *testing.T) {
14271424
ExpInterState: &engineProtocol{
14281425
FilterOut: false,
14291426
PartitionKey: "",
1430-
Data: testJsJSONChanged1,
1427+
Data: mergeMaps(testJsJSONChanged1Map, testTSVTimestampsMap),
14311428
},
14321429
IsJSON: true,
14331430
Error: nil,
@@ -1691,6 +1688,10 @@ func TestJSEngineMakeFunction_SpModeV2True(t *testing.T) {
16911688
t.Fatalf("expecting actual interstate as engineProtocol, but got unexpected value%s", spew.Sdump(actualState))
16921689
}
16931690

1691+
// while we allow interstate data to be of type any, in test we really want to see
1692+
// data type to match between expect & actual
1693+
assert.Equal(reflect.TypeOf(expInterState.Data), reflect.TypeOf(actualState.Data))
1694+
16941695
var actualData map[string]any
16951696
switch x := actualState.Data.(type) {
16961697
case string:
@@ -1706,7 +1707,7 @@ func TestJSEngineMakeFunction_SpModeV2True(t *testing.T) {
17061707
if diff := cmp.Diff(expInterState, actualState, cmpopts.IgnoreFields(engineProtocol{}, "Data")); diff != "" {
17071708
t.Fatalf("unexpected interstate (-want +got):\n%s", diff)
17081709
}
1709-
if diff := cmp.Diff(expInterData, actualData); diff != "" {
1710+
if diff := cmp.Diff(actualData, expInterData); diff != "" {
17101711
t.Fatalf("unexpected interstate (-want +got):\n%s", diff)
17111712
}
17121713
}
@@ -2862,26 +2863,22 @@ var testJsEtlTstamp, _ = time.Parse("2006-01-02 15:04:05.999", "2019-05-10 14:40
28622863
var testJsDerivedTstamp, _ = time.Parse("2006-01-02 15:04:05.999", "2019-05-10 14:40:35.972")
28632864
var testJsCollectorTstamp, _ = time.Parse("2006-01-02 15:04:05.999", "2019-05-10 14:40:35.972")
28642865
var testJsDvceSentTstamp, _ = time.Parse("2006-01-02 15:04:05.999", "2019-05-10 14:40:35")
2866+
28652867
var testJSMap = map[string]any{
2866-
"event_version": "1-0-0",
2867-
"app_id": "test-data<>",
2868-
"dvce_created_tstamp": testJsDvceCreatedTstamp,
2869-
"event": "unstruct",
2870-
"v_collector": "ssc-0.15.0-googlepubsub",
2871-
"network_userid": "d26822f5-52cc-4292-8f77-14ef6b7a27e2",
2872-
"event_name": "add_to_cart",
2873-
"event_vendor": "com.snowplowanalytics.snowplow",
2874-
"event_format": "jsonschema",
2875-
"platform": "pc",
2876-
"etl_tstamp": testJsEtlTstamp,
2877-
"collector_tstamp": testJsCollectorTstamp,
2878-
"user_id": "user<built-in function input>",
2879-
"dvce_sent_tstamp": testJsDvceSentTstamp,
2880-
"derived_tstamp": testJsDerivedTstamp,
2881-
"event_id": "e9234345-f042-46ad-b1aa-424464066a33",
2882-
"v_tracker": "py-0.8.2",
2883-
"v_etl": "beam-enrich-0.2.0-common-0.36.0",
2884-
"user_ipaddress": "1.2.3.4",
2868+
"event_version": "1-0-0",
2869+
"app_id": "test-data<>",
2870+
"event": "unstruct",
2871+
"v_collector": "ssc-0.15.0-googlepubsub",
2872+
"network_userid": "d26822f5-52cc-4292-8f77-14ef6b7a27e2",
2873+
"event_name": "add_to_cart",
2874+
"event_vendor": "com.snowplowanalytics.snowplow",
2875+
"event_format": "jsonschema",
2876+
"platform": "pc",
2877+
"user_id": "user<built-in function input>",
2878+
"event_id": "e9234345-f042-46ad-b1aa-424464066a33",
2879+
"v_tracker": "py-0.8.2",
2880+
"v_etl": "beam-enrich-0.2.0-common-0.36.0",
2881+
"user_ipaddress": "1.2.3.4",
28852882
"unstruct_event_com_snowplowanalytics_snowplow_add_to_cart_1": map[string]any{
28862883
"quantity": float64(2),
28872884
"unitPrice": 32.4,
@@ -2911,26 +2908,32 @@ var testJSMap = map[string]any{
29112908
"useragent": "python-requests/2.21.0",
29122909
}
29132910

2914-
var testJSMapForJSONInput = map[string]any{
2915-
"event_version": "1-0-0",
2916-
"app_id": "test-data<>",
2917-
"dvce_created_tstamp": "2019-05-10T14:40:35.551Z",
2918-
"event": "unstruct",
2919-
"v_collector": "ssc-0.15.0-googlepubsub",
2920-
"network_userid": "d26822f5-52cc-4292-8f77-14ef6b7a27e2",
2921-
"event_name": "add_to_cart",
2922-
"event_vendor": "com.snowplowanalytics.snowplow",
2923-
"event_format": "jsonschema",
2924-
"platform": "pc",
2925-
"etl_tstamp": "2019-05-10T14:40:37.436Z",
2926-
"collector_tstamp": "2019-05-10T14:40:35.972Z",
2927-
"user_id": "user<built-in function input>",
2928-
"dvce_sent_tstamp": "2019-05-10T14:40:35Z",
2929-
"derived_tstamp": "2019-05-10T14:40:35.972Z",
2930-
"event_id": "e9234345-f042-46ad-b1aa-424464066a33",
2931-
"v_tracker": "py-0.8.2",
2932-
"v_etl": "beam-enrich-0.2.0-common-0.36.0",
2933-
"user_ipaddress": "1.2.3.4",
2911+
var testJsTsv = []byte(`test-data<> pc 2019-05-10 14:40:37.436 2019-05-10 14:40:35.972 2019-05-10 14:40:35.551 unstruct e9234345-f042-46ad-b1aa-424464066a33 py-0.8.2 ssc-0.15.0-googlepubsub beam-enrich-0.2.0-common-0.36.0 user<built-in function input> 1.2.3.4 d26822f5-52cc-4292-8f77-14ef6b7a27e2 {"schema":"iglu:com.snowplowanalytics.snowplow/unstruct_event/jsonschema/1-0-0","data":{"schema":"iglu:com.snowplowanalytics.snowplow/add_to_cart/jsonschema/1-0-0","data":{"sku":"item41","quantity":2,"unitPrice":32.4,"currency":"GBP"}}} python-requests/2.21.0 2019-05-10 14:40:35.000 {"schema":"iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-1","data":[{"schema":"iglu:nl.basjes/yauaa_context/jsonschema/1-0-0","data":{"deviceBrand":"Unknown","deviceName":"Unknown","operatingSystemName":"Unknown","agentVersionMajor":"2","layoutEngineVersionMajor":"??","deviceClass":"Unknown","agentNameVersionMajor":"python-requests 2","operatingSystemClass":"Unknown","layoutEngineName":"Unknown","agentName":"python-requests","agentVersion":"2.21.0","layoutEngineClass":"Unknown","agentNameVersion":"python-requests 2.21.0","operatingSystemVersion":"??","agentClass":"Special","layoutEngineVersion":"??"}}]} 2019-05-10 14:40:35.972 com.snowplowanalytics.snowplow add_to_cart jsonschema 1-0-0 `)
2912+
2913+
// corresponding JSON to previous TSV
2914+
var testJsJSON = []byte(`{"app_id":"test-data<>","collector_tstamp":"2019-05-10T14:40:35.972Z","contexts_nl_basjes_yauaa_context_1":[{"agentClass":"Special","agentName":"python-requests","agentNameVersion":"python-requests 2.21.0","agentNameVersionMajor":"python-requests 2","agentVersion":"2.21.0","agentVersionMajor":"2","deviceBrand":"Unknown","deviceClass":"Unknown","deviceName":"Unknown","layoutEngineClass":"Unknown","layoutEngineName":"Unknown","layoutEngineVersion":"??","layoutEngineVersionMajor":"??","operatingSystemClass":"Unknown","operatingSystemName":"Unknown","operatingSystemVersion":"??"}],"derived_tstamp":"2019-05-10T14:40:35.972Z","dvce_created_tstamp":"2019-05-10T14:40:35.551Z","dvce_sent_tstamp":"2019-05-10T14:40:35Z","etl_tstamp":"2019-05-10T14:40:37.436Z","event":"unstruct","event_format":"jsonschema","event_id":"e9234345-f042-46ad-b1aa-424464066a33","event_name":"add_to_cart","event_vendor":"com.snowplowanalytics.snowplow","event_version":"1-0-0","network_userid":"d26822f5-52cc-4292-8f77-14ef6b7a27e2","platform":"pc","unstruct_event_com_snowplowanalytics_snowplow_add_to_cart_1":{"currency":"GBP","quantity":2,"sku":"item41","unitPrice":32.4},"user_id":"user<built-in function input>","user_ipaddress":"1.2.3.4","useragent":"python-requests/2.21.0","v_collector":"ssc-0.15.0-googlepubsub","v_etl":"beam-enrich-0.2.0-common-0.36.0","v_tracker":"py-0.8.2"}`)
2915+
2916+
// json's changed and stringified inside JS
2917+
var testJsJSONChanged1 = []byte(`{"app_id_CHANGED":"test-data<>","collector_tstamp":"2019-05-10T14:40:35.972Z","contexts_nl_basjes_yauaa_context_1":[{"agentClass":"Special","agentName":"python-requests","agentNameVersion":"python-requests 2.21.0","agentNameVersionMajor":"python-requests 2","agentVersion":"2.21.0","agentVersionMajor":"2","deviceBrand":"Unknown","deviceClass":"Unknown","deviceName":"Unknown","layoutEngineClass":"Unknown","layoutEngineName":"Unknown","layoutEngineVersion":"??","layoutEngineVersionMajor":"??","operatingSystemClass":"Unknown","operatingSystemName":"Unknown","operatingSystemVersion":"??"}],"derived_tstamp":"2019-05-10T14:40:35.972Z","dvce_created_tstamp":"2019-05-10T14:40:35.551Z","dvce_sent_tstamp":"2019-05-10T14:40:35Z","etl_tstamp":"2019-05-10T14:40:37.436Z","event":"unstruct","event_format":"jsonschema","event_id":"e9234345-f042-46ad-b1aa-424464066a33","event_name":"add_to_cart","event_vendor":"com.snowplowanalytics.snowplow","event_version":"1-0-0","network_userid":"d26822f5-52cc-4292-8f77-14ef6b7a27e2","platform":"pc","unstruct_event_com_snowplowanalytics_snowplow_add_to_cart_1":{"currency":"GBP","quantity":2,"sku":"item41","unitPrice":32.4},"user_id":"user<built-in function input>","user_ipaddress":"1.2.3.4","useragent":"python-requests/2.21.0","v_collector":"ssc-0.15.0-googlepubsub","v_etl":"beam-enrich-0.2.0-common-0.36.0","v_tracker":"py-0.8.2"}`)
2918+
2919+
var testJsJSONChanged2 = []byte(`{"collector_tstamp":"2019-05-10T14:40:35.972Z","contexts_nl_basjes_yauaa_context_1":[{"agentClass":"Special","agentName":"python-requests","agentNameVersion":"python-requests 2.21.0","agentNameVersionMajor":"python-requests 2","agentVersion":"2.21.0","agentVersionMajor":"2","deviceBrand":"Unknown","deviceClass":"Unknown","deviceName":"Unknown","layoutEngineClass":"Unknown","layoutEngineName":"Unknown","layoutEngineVersion":"??","layoutEngineVersionMajor":"??","operatingSystemClass":"Unknown","operatingSystemName":"Unknown","operatingSystemVersion":"??"}],"derived_tstamp":"2019-05-10T14:40:35.972Z","dvce_created_tstamp":"2019-05-10T14:40:35.551Z","dvce_sent_tstamp":"2019-05-10T14:40:35Z","etl_tstamp":"2019-05-10T14:40:37.436Z","event":"unstruct","event_format":"jsonschema","event_id":"e9234345-f042-46ad-b1aa-424464066a33","event_name":"add_to_cart","event_vendor":"com.snowplowanalytics.snowplow","event_version":"1-0-0","network_userid":"d26822f5-52cc-4292-8f77-14ef6b7a27e2","platform":"pc","unstruct_event_com_snowplowanalytics_snowplow_add_to_cart_1":{"currency":"GBP","quantity":2,"sku":"item41","unitPrice":32.4},"user_id":"user<built-in function input>","user_ipaddress":"1.2.3.4","useragent":"python-requests/2.21.0","v_collector":"ssc-0.15.0-googlepubsub","v_etl":"beam-enrich-0.2.0-common-0.36.0","v_tracker":"py-0.8.2","app_id_CHANGED":"test-data<>"}`)
2920+
2921+
// identical to testJsJSONChanged1 but of map[string]any type
2922+
var testJsJSONChanged1Map = map[string]any{
2923+
"event_version": "1-0-0",
2924+
"app_id_CHANGED": "test-data<>",
2925+
"event": "unstruct",
2926+
"v_collector": "ssc-0.15.0-googlepubsub",
2927+
"network_userid": "d26822f5-52cc-4292-8f77-14ef6b7a27e2",
2928+
"event_name": "add_to_cart",
2929+
"event_vendor": "com.snowplowanalytics.snowplow",
2930+
"event_format": "jsonschema",
2931+
"platform": "pc",
2932+
"user_id": "user<built-in function input>",
2933+
"event_id": "e9234345-f042-46ad-b1aa-424464066a33",
2934+
"v_tracker": "py-0.8.2",
2935+
"v_etl": "beam-enrich-0.2.0-common-0.36.0",
2936+
"user_ipaddress": "1.2.3.4",
29342937
"unstruct_event_com_snowplowanalytics_snowplow_add_to_cart_1": map[string]any{
29352938
"quantity": float64(2),
29362939
"unitPrice": 32.4,
@@ -2960,12 +2963,26 @@ var testJSMapForJSONInput = map[string]any{
29602963
"useragent": "python-requests/2.21.0",
29612964
}
29622965

2963-
var testJsTsv = []byte(`test-data<> pc 2019-05-10 14:40:37.436 2019-05-10 14:40:35.972 2019-05-10 14:40:35.551 unstruct e9234345-f042-46ad-b1aa-424464066a33 py-0.8.2 ssc-0.15.0-googlepubsub beam-enrich-0.2.0-common-0.36.0 user<built-in function input> 1.2.3.4 d26822f5-52cc-4292-8f77-14ef6b7a27e2 {"schema":"iglu:com.snowplowanalytics.snowplow/unstruct_event/jsonschema/1-0-0","data":{"schema":"iglu:com.snowplowanalytics.snowplow/add_to_cart/jsonschema/1-0-0","data":{"sku":"item41","quantity":2,"unitPrice":32.4,"currency":"GBP"}}} python-requests/2.21.0 2019-05-10 14:40:35.000 {"schema":"iglu:com.snowplowanalytics.snowplow/contexts/jsonschema/1-0-1","data":[{"schema":"iglu:nl.basjes/yauaa_context/jsonschema/1-0-0","data":{"deviceBrand":"Unknown","deviceName":"Unknown","operatingSystemName":"Unknown","agentVersionMajor":"2","layoutEngineVersionMajor":"??","deviceClass":"Unknown","agentNameVersionMajor":"python-requests 2","operatingSystemClass":"Unknown","layoutEngineName":"Unknown","agentName":"python-requests","agentVersion":"2.21.0","layoutEngineClass":"Unknown","agentNameVersion":"python-requests 2.21.0","operatingSystemVersion":"??","agentClass":"Special","layoutEngineVersion":"??"}}]} 2019-05-10 14:40:35.972 com.snowplowanalytics.snowplow add_to_cart jsonschema 1-0-0 `)
2966+
var testTSVTimestampsMap = map[string]any{
2967+
"collector_tstamp": testJsCollectorTstamp,
2968+
"derived_tstamp": testJsDerivedTstamp,
2969+
"dvce_created_tstamp": testJsDvceCreatedTstamp,
2970+
"dvce_sent_tstamp": testJsDvceSentTstamp,
2971+
"etl_tstamp": testJsEtlTstamp,
2972+
}
29642973

2965-
// corresponding JSON to previous TSV
2966-
var testJsJSON = []byte(`{"app_id":"test-data<>","collector_tstamp":"2019-05-10T14:40:35.972Z","contexts_nl_basjes_yauaa_context_1":[{"agentClass":"Special","agentName":"python-requests","agentNameVersion":"python-requests 2.21.0","agentNameVersionMajor":"python-requests 2","agentVersion":"2.21.0","agentVersionMajor":"2","deviceBrand":"Unknown","deviceClass":"Unknown","deviceName":"Unknown","layoutEngineClass":"Unknown","layoutEngineName":"Unknown","layoutEngineVersion":"??","layoutEngineVersionMajor":"??","operatingSystemClass":"Unknown","operatingSystemName":"Unknown","operatingSystemVersion":"??"}],"derived_tstamp":"2019-05-10T14:40:35.972Z","dvce_created_tstamp":"2019-05-10T14:40:35.551Z","dvce_sent_tstamp":"2019-05-10T14:40:35Z","etl_tstamp":"2019-05-10T14:40:37.436Z","event":"unstruct","event_format":"jsonschema","event_id":"e9234345-f042-46ad-b1aa-424464066a33","event_name":"add_to_cart","event_vendor":"com.snowplowanalytics.snowplow","event_version":"1-0-0","network_userid":"d26822f5-52cc-4292-8f77-14ef6b7a27e2","platform":"pc","unstruct_event_com_snowplowanalytics_snowplow_add_to_cart_1":{"currency":"GBP","quantity":2,"sku":"item41","unitPrice":32.4},"user_id":"user<built-in function input>","user_ipaddress":"1.2.3.4","useragent":"python-requests/2.21.0","v_collector":"ssc-0.15.0-googlepubsub","v_etl":"beam-enrich-0.2.0-common-0.36.0","v_tracker":"py-0.8.2"}`)
2974+
var testJSONTimestampsMap = map[string]any{
2975+
"collector_tstamp": "2019-05-10T14:40:35.972Z",
2976+
"derived_tstamp": "2019-05-10T14:40:35.972Z",
2977+
"dvce_created_tstamp": "2019-05-10T14:40:35.551Z",
2978+
"dvce_sent_tstamp": "2019-05-10T14:40:35Z",
2979+
"etl_tstamp": "2019-05-10T14:40:37.436Z",
2980+
}
29672981

2968-
// json's changed and stringified inside JS
2969-
var testJsJSONChanged1 = []byte(`{"app_id_CHANGED":"test-data<>","collector_tstamp":"2019-05-10T14:40:35.972Z","contexts_nl_basjes_yauaa_context_1":[{"agentClass":"Special","agentName":"python-requests","agentNameVersion":"python-requests 2.21.0","agentNameVersionMajor":"python-requests 2","agentVersion":"2.21.0","agentVersionMajor":"2","deviceBrand":"Unknown","deviceClass":"Unknown","deviceName":"Unknown","layoutEngineClass":"Unknown","layoutEngineName":"Unknown","layoutEngineVersion":"??","layoutEngineVersionMajor":"??","operatingSystemClass":"Unknown","operatingSystemName":"Unknown","operatingSystemVersion":"??"}],"derived_tstamp":"2019-05-10T14:40:35.972Z","dvce_created_tstamp":"2019-05-10T14:40:35.551Z","dvce_sent_tstamp":"2019-05-10T14:40:35Z","etl_tstamp":"2019-05-10T14:40:37.436Z","event":"unstruct","event_format":"jsonschema","event_id":"e9234345-f042-46ad-b1aa-424464066a33","event_name":"add_to_cart","event_vendor":"com.snowplowanalytics.snowplow","event_version":"1-0-0","network_userid":"d26822f5-52cc-4292-8f77-14ef6b7a27e2","platform":"pc","unstruct_event_com_snowplowanalytics_snowplow_add_to_cart_1":{"currency":"GBP","quantity":2,"sku":"item41","unitPrice":32.4},"user_id":"user<built-in function input>","user_ipaddress":"1.2.3.4","useragent":"python-requests/2.21.0","v_collector":"ssc-0.15.0-googlepubsub","v_etl":"beam-enrich-0.2.0-common-0.36.0","v_tracker":"py-0.8.2"}`)
2982+
func mergeMaps(a, b map[string]any) map[string]any {
2983+
c := make(map[string]any)
2984+
maps.Copy(c, a)
2985+
maps.Copy(c, b)
29702986

2971-
var testJsJSONChanged2 = []byte(`{"collector_tstamp":"2019-05-10T14:40:35.972Z","contexts_nl_basjes_yauaa_context_1":[{"agentClass":"Special","agentName":"python-requests","agentNameVersion":"python-requests 2.21.0","agentNameVersionMajor":"python-requests 2","agentVersion":"2.21.0","agentVersionMajor":"2","deviceBrand":"Unknown","deviceClass":"Unknown","deviceName":"Unknown","layoutEngineClass":"Unknown","layoutEngineName":"Unknown","layoutEngineVersion":"??","layoutEngineVersionMajor":"??","operatingSystemClass":"Unknown","operatingSystemName":"Unknown","operatingSystemVersion":"??"}],"derived_tstamp":"2019-05-10T14:40:35.972Z","dvce_created_tstamp":"2019-05-10T14:40:35.551Z","dvce_sent_tstamp":"2019-05-10T14:40:35Z","etl_tstamp":"2019-05-10T14:40:37.436Z","event":"unstruct","event_format":"jsonschema","event_id":"e9234345-f042-46ad-b1aa-424464066a33","event_name":"add_to_cart","event_vendor":"com.snowplowanalytics.snowplow","event_version":"1-0-0","network_userid":"d26822f5-52cc-4292-8f77-14ef6b7a27e2","platform":"pc","unstruct_event_com_snowplowanalytics_snowplow_add_to_cart_1":{"currency":"GBP","quantity":2,"sku":"item41","unitPrice":32.4},"user_id":"user<built-in function input>","user_ipaddress":"1.2.3.4","useragent":"python-requests/2.21.0","v_collector":"ssc-0.15.0-googlepubsub","v_etl":"beam-enrich-0.2.0-common-0.36.0","v_tracker":"py-0.8.2","app_id_CHANGED":"test-data<>"}`)
2987+
return c
2988+
}

0 commit comments

Comments
 (0)