@segment/action-destinations 3.261.0 → 3.261.1-staging.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/dist/destinations/amazon-ads/generated-types.d.ts +9 -0
  2. package/dist/destinations/amazon-ads/index.d.ts +2 -2
  3. package/dist/destinations/amazon-ads/index.js +180 -3
  4. package/dist/destinations/amazon-ads/index.js.map +1 -1
  5. package/dist/destinations/amazon-ads/syncAudiences/generated-types.d.ts +19 -0
  6. package/dist/destinations/amazon-ads/syncAudiences/index.js +158 -7
  7. package/dist/destinations/amazon-ads/syncAudiences/index.js.map +1 -1
  8. package/dist/destinations/amazon-ads/utils.d.ts +25 -0
  9. package/dist/destinations/amazon-ads/utils.js +8 -0
  10. package/dist/destinations/amazon-ads/utils.js.map +1 -0
  11. package/dist/destinations/chartmogul/index.js +1 -1
  12. package/dist/destinations/chartmogul/index.js.map +1 -1
  13. package/dist/destinations/display-video-360/addToAudience/index.js +2 -1
  14. package/dist/destinations/display-video-360/addToAudience/index.js.map +1 -1
  15. package/dist/destinations/engage/sendgrid/Profile.d.ts +6 -0
  16. package/dist/destinations/{inleads-ai/identify/generated-types.js → engage/sendgrid/Profile.js} +1 -1
  17. package/dist/destinations/engage/sendgrid/Profile.js.map +1 -0
  18. package/dist/destinations/engage/sendgrid/previewApiLookup/api-lookups.d.ts +21 -0
  19. package/dist/destinations/engage/sendgrid/previewApiLookup/api-lookups.js +174 -0
  20. package/dist/destinations/engage/sendgrid/previewApiLookup/api-lookups.js.map +1 -0
  21. package/dist/destinations/engage/utils/EngageActionPerformer.js +17 -2
  22. package/dist/destinations/engage/utils/EngageActionPerformer.js.map +1 -1
  23. package/dist/destinations/engage/utils/operationTracking/OperationFinallyHooks.d.ts +3 -0
  24. package/dist/destinations/engage/utils/operationTracking/OperationFinallyHooks.js +15 -0
  25. package/dist/destinations/engage/utils/operationTracking/OperationFinallyHooks.js.map +1 -1
  26. package/dist/destinations/engage/utils/track.d.ts +3 -0
  27. package/dist/destinations/gameball/index.js +1 -1
  28. package/dist/destinations/gameball/index.js.map +1 -1
  29. package/dist/destinations/google-enhanced-conversions/functions.js.map +1 -1
  30. package/dist/destinations/hubspot/upsertCustomObjectRecord/index.js +4 -4
  31. package/dist/destinations/hubspot/upsertCustomObjectRecord/index.js.map +1 -1
  32. package/dist/destinations/index.js +0 -3
  33. package/dist/destinations/index.js.map +1 -1
  34. package/dist/destinations/kameleoon/index.js +9 -15
  35. package/dist/destinations/kameleoon/index.js.map +1 -1
  36. package/dist/destinations/kameleoon/logEvent/generated-types.d.ts +0 -2
  37. package/dist/destinations/kameleoon/logEvent/index.js +1 -13
  38. package/dist/destinations/kameleoon/logEvent/index.js.map +1 -1
  39. package/dist/destinations/klaviyo/functions.d.ts +7 -4
  40. package/dist/destinations/klaviyo/functions.js +80 -1
  41. package/dist/destinations/klaviyo/functions.js.map +1 -1
  42. package/dist/destinations/klaviyo/removeProfile/index.js +2 -0
  43. package/dist/destinations/klaviyo/removeProfile/index.js.map +1 -1
  44. package/dist/destinations/klaviyo/types.d.ts +97 -0
  45. package/dist/destinations/klaviyo/upsertProfile/index.js +29 -19
  46. package/dist/destinations/klaviyo/upsertProfile/index.js.map +1 -1
  47. package/dist/destinations/liveramp-audiences/audienceEnteredS3/index.js +2 -2
  48. package/dist/destinations/liveramp-audiences/audienceEnteredS3/index.js.map +1 -1
  49. package/dist/destinations/liveramp-audiences/audienceEnteredSftp/index.js +2 -2
  50. package/dist/destinations/liveramp-audiences/audienceEnteredSftp/index.js.map +1 -1
  51. package/dist/destinations/marketo-static-lists/addToList/index.js +4 -2
  52. package/dist/destinations/marketo-static-lists/addToList/index.js.map +1 -1
  53. package/dist/destinations/mixpanel/utils.d.ts +13 -0
  54. package/dist/destinations/mixpanel/utils.js +117 -0
  55. package/dist/destinations/mixpanel/utils.js.map +1 -0
  56. package/dist/destinations/moloco-rmp/index.js +2 -2
  57. package/dist/destinations/responsys/asyncMergePetRecords/generated-types.d.ts +14 -0
  58. package/dist/destinations/responsys/asyncMergePetRecords/generated-types.js.map +1 -0
  59. package/dist/destinations/{kameleoon/group → responsys/asyncMergePetRecords}/index.d.ts +1 -1
  60. package/dist/destinations/responsys/asyncMergePetRecords/index.js +113 -0
  61. package/dist/destinations/responsys/asyncMergePetRecords/index.js.map +1 -0
  62. package/dist/destinations/responsys/asyncMergeProfileListMembers/generated-types.d.ts +20 -0
  63. package/dist/destinations/responsys/asyncMergeProfileListMembers/generated-types.js.map +1 -0
  64. package/dist/destinations/{inleads-ai/group → responsys/asyncMergeProfileListMembers}/index.d.ts +1 -1
  65. package/dist/destinations/responsys/asyncMergeProfileListMembers/index.js +174 -0
  66. package/dist/destinations/responsys/asyncMergeProfileListMembers/index.js.map +1 -0
  67. package/dist/destinations/responsys/rsp-operations.d.ts +14 -0
  68. package/dist/destinations/responsys/rsp-operations.js +33 -0
  69. package/dist/destinations/responsys/rsp-operations.js.map +1 -0
  70. package/dist/destinations/responsys/rsp-properties.d.ts +4 -0
  71. package/dist/destinations/responsys/rsp-properties.js +27 -0
  72. package/dist/destinations/responsys/rsp-properties.js.map +1 -0
  73. package/dist/destinations/segment/segment-properties.js +2 -2
  74. package/dist/destinations/segment/segment-properties.js.map +1 -1
  75. package/dist/destinations/snap-conversions-api/_tests_/capiV2tests.d.ts +1 -0
  76. package/dist/destinations/snap-conversions-api/_tests_/capiV2tests.js +381 -0
  77. package/dist/destinations/snap-conversions-api/_tests_/capiV2tests.js.map +1 -0
  78. package/dist/destinations/snap-conversions-api/_tests_/capiV3tests.d.ts +1 -0
  79. package/dist/destinations/snap-conversions-api/_tests_/capiV3tests.js +581 -0
  80. package/dist/destinations/snap-conversions-api/_tests_/capiV3tests.js.map +1 -0
  81. package/dist/destinations/snap-conversions-api/_tests_/index.test.js +488 -420
  82. package/dist/destinations/snap-conversions-api/_tests_/index.test.js.map +1 -1
  83. package/dist/destinations/snap-conversions-api/index.js +42 -42
  84. package/dist/destinations/snap-conversions-api/index.js.map +1 -1
  85. package/dist/destinations/snap-conversions-api/reportConversionEvent/generated-types.d.ts +18 -97
  86. package/dist/destinations/snap-conversions-api/reportConversionEvent/index.js +29 -7
  87. package/dist/destinations/snap-conversions-api/reportConversionEvent/index.js.map +1 -1
  88. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-v2.d.ts +4 -0
  89. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-v2.js +97 -0
  90. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-v2.js.map +1 -0
  91. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-v3.d.ts +4 -0
  92. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-v3.js +119 -593
  93. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-v3.js.map +1 -1
  94. package/dist/destinations/snap-conversions-api/reportConversionEvent/utils.d.ts +4 -3
  95. package/dist/destinations/snap-conversions-api/reportConversionEvent/utils.js +1 -6
  96. package/dist/destinations/snap-conversions-api/reportConversionEvent/utils.js.map +1 -1
  97. package/dist/destinations/snap-conversions-api/snap-capi-properties.d.ts +30 -0
  98. package/dist/destinations/snap-conversions-api/snap-capi-properties.js +316 -0
  99. package/dist/destinations/snap-conversions-api/snap-capi-properties.js.map +1 -0
  100. package/dist/destinations/stackadapt/forwardEvent/generated-types.d.ts +4 -4
  101. package/dist/destinations/stackadapt/forwardEvent/index.js +7 -11
  102. package/dist/destinations/stackadapt/forwardEvent/index.js.map +1 -1
  103. package/dist/destinations/tiktok-conversions/index.js +75 -163
  104. package/dist/destinations/tiktok-conversions/index.js.map +1 -1
  105. package/dist/destinations/tiktok-conversions/reportWebEvent/formatter.d.ts +3 -0
  106. package/dist/destinations/tiktok-conversions/reportWebEvent/formatter.js +34 -0
  107. package/dist/destinations/tiktok-conversions/reportWebEvent/formatter.js.map +1 -0
  108. package/dist/destinations/tiktok-conversions/reportWebEvent/generated-types.d.ts +4 -12
  109. package/dist/destinations/tiktok-conversions/reportWebEvent/index.d.ts +1 -1
  110. package/dist/destinations/tiktok-conversions/reportWebEvent/index.js +233 -5
  111. package/dist/destinations/tiktok-conversions/reportWebEvent/index.js.map +1 -1
  112. package/dist/destinations/{tiktok-conversions → tiktok-offline-conversions/reportOfflineEvent}/formatter.js +11 -11
  113. package/dist/destinations/tiktok-offline-conversions/reportOfflineEvent/formatter.js.map +1 -0
  114. package/package.json +4 -4
  115. package/dist/destinations/inleads-ai/common-fields.d.ts +0 -3
  116. package/dist/destinations/inleads-ai/common-fields.js +0 -238
  117. package/dist/destinations/inleads-ai/common-fields.js.map +0 -1
  118. package/dist/destinations/inleads-ai/contants.d.ts +0 -4
  119. package/dist/destinations/inleads-ai/contants.js +0 -8
  120. package/dist/destinations/inleads-ai/contants.js.map +0 -1
  121. package/dist/destinations/inleads-ai/generated-types.d.ts +0 -3
  122. package/dist/destinations/inleads-ai/generated-types.js.map +0 -1
  123. package/dist/destinations/inleads-ai/group/generated-types.d.ts +0 -44
  124. package/dist/destinations/inleads-ai/group/generated-types.js.map +0 -1
  125. package/dist/destinations/inleads-ai/group/index.js +0 -76
  126. package/dist/destinations/inleads-ai/group/index.js.map +0 -1
  127. package/dist/destinations/inleads-ai/identify/generated-types.d.ts +0 -46
  128. package/dist/destinations/inleads-ai/identify/generated-types.js.map +0 -1
  129. package/dist/destinations/inleads-ai/identify/index.d.ts +0 -5
  130. package/dist/destinations/inleads-ai/identify/index.js +0 -120
  131. package/dist/destinations/inleads-ai/identify/index.js.map +0 -1
  132. package/dist/destinations/inleads-ai/index.d.ts +0 -4
  133. package/dist/destinations/inleads-ai/index.js +0 -66
  134. package/dist/destinations/inleads-ai/index.js.map +0 -1
  135. package/dist/destinations/inleads-ai/track/generated-types.d.ts +0 -45
  136. package/dist/destinations/inleads-ai/track/generated-types.js +0 -3
  137. package/dist/destinations/inleads-ai/track/generated-types.js.map +0 -1
  138. package/dist/destinations/inleads-ai/track/index.d.ts +0 -5
  139. package/dist/destinations/inleads-ai/track/index.js +0 -64
  140. package/dist/destinations/inleads-ai/track/index.js.map +0 -1
  141. package/dist/destinations/kameleoon/group/generated-types.d.ts +0 -12
  142. package/dist/destinations/kameleoon/group/generated-types.js +0 -3
  143. package/dist/destinations/kameleoon/group/generated-types.js.map +0 -1
  144. package/dist/destinations/kameleoon/group/index.js +0 -94
  145. package/dist/destinations/kameleoon/group/index.js.map +0 -1
  146. package/dist/destinations/kameleoon/identify/generated-types.d.ts +0 -11
  147. package/dist/destinations/kameleoon/identify/generated-types.js +0 -3
  148. package/dist/destinations/kameleoon/identify/generated-types.js.map +0 -1
  149. package/dist/destinations/kameleoon/identify/index.d.ts +0 -5
  150. package/dist/destinations/kameleoon/identify/index.js +0 -87
  151. package/dist/destinations/kameleoon/identify/index.js.map +0 -1
  152. package/dist/destinations/kameleoon/page/generated-types.d.ts +0 -15
  153. package/dist/destinations/kameleoon/page/generated-types.js +0 -3
  154. package/dist/destinations/kameleoon/page/generated-types.js.map +0 -1
  155. package/dist/destinations/kameleoon/page/index.d.ts +0 -5
  156. package/dist/destinations/kameleoon/page/index.js +0 -99
  157. package/dist/destinations/kameleoon/page/index.js.map +0 -1
  158. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-input-fields-deprecated.d.ts +0 -31
  159. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-input-fields-deprecated.js +0 -174
  160. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-input-fields-deprecated.js.map +0 -1
  161. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-input-fields-v3.d.ts +0 -16
  162. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-input-fields-v3.js +0 -640
  163. package/dist/destinations/snap-conversions-api/reportConversionEvent/snap-capi-input-fields-v3.js.map +0 -1
  164. package/dist/destinations/spiffy/generated-types.d.ts +0 -5
  165. package/dist/destinations/spiffy/generated-types.js +0 -3
  166. package/dist/destinations/spiffy/generated-types.js.map +0 -1
  167. package/dist/destinations/spiffy/index.d.ts +0 -4
  168. package/dist/destinations/spiffy/index.js +0 -62
  169. package/dist/destinations/spiffy/index.js.map +0 -1
  170. package/dist/destinations/spiffy/send/generated-types.d.ts +0 -8
  171. package/dist/destinations/spiffy/send/generated-types.js +0 -3
  172. package/dist/destinations/spiffy/send/generated-types.js.map +0 -1
  173. package/dist/destinations/spiffy/send/index.d.ts +0 -5
  174. package/dist/destinations/spiffy/send/index.js +0 -42
  175. package/dist/destinations/spiffy/send/index.js.map +0 -1
  176. package/dist/destinations/tiktok-conversions/common_fields.d.ts +0 -2
  177. package/dist/destinations/tiktok-conversions/common_fields.js +0 -244
  178. package/dist/destinations/tiktok-conversions/common_fields.js.map +0 -1
  179. package/dist/destinations/tiktok-conversions/formatter.js.map +0 -1
  180. package/dist/destinations/tiktok-conversions/utils.d.ts +0 -4
  181. package/dist/destinations/tiktok-conversions/utils.js +0 -65
  182. package/dist/destinations/tiktok-conversions/utils.js.map +0 -1
  183. package/dist/destinations/xtremepush/generated-types.d.ts +0 -4
  184. package/dist/destinations/xtremepush/generated-types.js +0 -3
  185. package/dist/destinations/xtremepush/generated-types.js.map +0 -1
  186. package/dist/destinations/xtremepush/identify/generated-types.d.ts +0 -14
  187. package/dist/destinations/xtremepush/identify/generated-types.js +0 -3
  188. package/dist/destinations/xtremepush/identify/generated-types.js.map +0 -1
  189. package/dist/destinations/xtremepush/identify/index.d.ts +0 -5
  190. package/dist/destinations/xtremepush/identify/index.js +0 -87
  191. package/dist/destinations/xtremepush/identify/index.js.map +0 -1
  192. package/dist/destinations/xtremepush/index.d.ts +0 -4
  193. package/dist/destinations/xtremepush/index.js +0 -66
  194. package/dist/destinations/xtremepush/index.js.map +0 -1
  195. package/dist/destinations/xtremepush/track/generated-types.d.ts +0 -15
  196. package/dist/destinations/xtremepush/track/generated-types.js +0 -3
  197. package/dist/destinations/xtremepush/track/generated-types.js.map +0 -1
  198. package/dist/destinations/xtremepush/track/index.d.ts +0 -5
  199. package/dist/destinations/xtremepush/track/index.js +0 -95
  200. package/dist/destinations/xtremepush/track/index.js.map +0 -1
  201. package/dist/destinations/{inleads-ai → responsys/asyncMergePetRecords}/generated-types.js +0 -0
  202. package/dist/destinations/{inleads-ai/group → responsys/asyncMergeProfileListMembers}/generated-types.js +0 -0
  203. package/dist/destinations/{tiktok-conversions → tiktok-offline-conversions/reportOfflineEvent}/formatter.d.ts +1 -1
@@ -6,10 +6,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const nock_1 = __importDefault(require("nock"));
7
7
  const actions_core_1 = require("@segment/actions-core");
8
8
  const index_1 = __importDefault(require("../index"));
9
- const utils_1 = require("../reportConversionEvent/utils");
9
+ const snap_capi_v3_1 = require("../reportConversionEvent/snap-capi-v3");
10
10
  const testDestination = actions_core_1.createTestIntegration(index_1.default);
11
+ const timestamp = '2022-05-12T15:21:15.449Z';
12
+ const settings = {
13
+ snap_app_id: 'test123',
14
+ pixel_id: 'pixel123',
15
+ app_id: 'app123'
16
+ };
17
+ const accessToken = 'access123';
18
+ const refreshToken = 'refresh123';
11
19
  const testEvent = actions_core_1.createTestEvent({
12
- timestamp: '2022-05-12T15:21:15.449Z',
20
+ timestamp: timestamp,
13
21
  messageId: 'test-message-rv4t40s898k',
14
22
  event: 'PURCHASE',
15
23
  type: 'track',
@@ -21,43 +29,18 @@ const testEvent = actions_core_1.createTestEvent({
21
29
  revenue: '15',
22
30
  currency: 'USD',
23
31
  level: 3
24
- },
25
- integrations: {
26
- ['Snap Conversions Api']: {
27
- click_id: 'cliasdfck_id',
28
- uuid_c1: 'sadfjklsdf;lksjd'
29
- }
30
32
  }
31
33
  });
32
- const reportConversionEvent = async (inputData) => {
33
- const event = actions_core_1.createTestEvent(testEvent);
34
- const accessToken = 'access123';
35
- const refreshToken = 'refresh123';
36
- const responses = await testDestination.testAction('reportConversionEvent', {
37
- event,
38
- settings: {
39
- snap_app_id: 'test123',
40
- pixel_id: 'pixel123',
41
- app_id: '123'
42
- },
43
- useDefaultMappings: true,
44
- auth: {
45
- accessToken,
46
- refreshToken
47
- },
48
- ...inputData
49
- });
50
- return { url: responses[0].url, data: JSON.parse(responses[0].options.body).data[0] };
51
- };
34
+ const features = {};
52
35
  beforeEach(() => {
53
36
  nock_1.default.cleanAll();
54
- nock_1.default(/.*/).post(/.*/).reply(200);
55
37
  });
56
38
  describe('Snap Conversions API ', () => {
57
39
  describe('ReportConversionEvent', () => {
58
- it('should use products array over number_items, product_id and category fields', async () => {
59
- const { data } = await reportConversionEvent({
60
- event: {
40
+ describe('CAPIv3 Implementation', () => {
41
+ it('should use products array over number_items, product_id and category fields', async () => {
42
+ nock_1.default(/.*/).post(/.*/).reply(200);
43
+ const event = actions_core_1.createTestEvent({
61
44
  ...testEvent,
62
45
  properties: {
63
46
  email: 'test123@gmail.com',
@@ -73,251 +56,386 @@ describe('Snap Conversions API ', () => {
73
56
  ]
74
57
  },
75
58
  context: {}
76
- },
77
- mapping: {
78
- event_type: 'PURCHASE',
79
- event_conversion_type: 'WEB'
80
- }
59
+ });
60
+ const responses = await testDestination.testAction('reportConversionEvent', {
61
+ event,
62
+ settings,
63
+ useDefaultMappings: true,
64
+ auth: {
65
+ accessToken,
66
+ refreshToken
67
+ },
68
+ features,
69
+ mapping: {
70
+ event_type: 'PURCHASE',
71
+ event_conversion_type: 'WEB'
72
+ }
73
+ });
74
+ expect(responses).not.toBeNull();
75
+ expect(responses[0].status).toBe(200);
76
+ const body = JSON.parse(responses[0].options.body);
77
+ const { data } = body;
78
+ expect(data.length).toBe(1);
79
+ const { integration, event_name, event_time, user_data, custom_data, action_source, app_data } = data[0];
80
+ const { em, ph } = user_data;
81
+ const { brands, content_category, content_ids, currency, num_items, value } = custom_data;
82
+ expect(integration).toBe('segment');
83
+ expect(event_name).toBe('PURCHASE');
84
+ expect(event_time).toBe(1652368875449);
85
+ expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
86
+ expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
87
+ expect(currency).toBe('USD');
88
+ expect(value).toBe(15);
89
+ expect(action_source).toBe('website');
90
+ expect(app_data).toBeUndefined();
91
+ expect(brands).toEqual(['Hasbro', 'Mattel']);
92
+ expect(content_category).toEqual(['games', 'games']);
93
+ expect(content_ids).toEqual(['123', '456']);
94
+ expect(num_items).toBe(2);
81
95
  });
82
- const { integration, event_name, event_time, user_data, custom_data, action_source, app_data } = data;
83
- const { em, ph } = user_data;
84
- const { brands, content_category, content_ids, currency, num_items, value } = custom_data;
85
- expect(integration).toBe('segment');
86
- expect(event_name).toBe('PURCHASE');
87
- expect(event_time).toBe(1652368875449);
88
- expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
89
- expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
90
- expect(currency).toBe('USD');
91
- expect(value).toBe(15);
92
- expect(action_source).toBe('website');
93
- expect(app_data).toBeUndefined();
94
- expect(brands).toEqual(['Hasbro', 'Mattel']);
95
- expect(content_category).toEqual(['games', 'games']);
96
- expect(content_ids).toEqual(['123', '456']);
97
- expect(num_items).toBe(10);
98
- });
99
- it('should handle a basic event', async () => {
100
- const { data } = await reportConversionEvent({
101
- mapping: {
102
- event_type: 'PURCHASE',
103
- event_conversion_type: 'WEB'
104
- }
96
+ it('should handle a basic event', async () => {
97
+ nock_1.default(/.*/).post(/.*/).reply(200);
98
+ const event = actions_core_1.createTestEvent(testEvent);
99
+ const responses = await testDestination.testAction('reportConversionEvent', {
100
+ event,
101
+ settings,
102
+ useDefaultMappings: true,
103
+ auth: {
104
+ accessToken,
105
+ refreshToken
106
+ },
107
+ features,
108
+ mapping: {
109
+ event_type: 'PURCHASE',
110
+ event_conversion_type: 'WEB'
111
+ }
112
+ });
113
+ expect(responses).not.toBeNull();
114
+ expect(responses[0].status).toBe(200);
115
+ const body = JSON.parse(responses[0].options.body);
116
+ const { data } = body;
117
+ expect(data.length).toBe(1);
118
+ const { integration, event_name, event_source_url, event_time, user_data, custom_data, action_source, app_data } = data[0];
119
+ const { client_ip_address, client_user_agent, em, ph } = user_data;
120
+ const { currency, value } = custom_data;
121
+ expect(integration).toBe('segment');
122
+ expect(event_name).toBe('PURCHASE');
123
+ expect(event_source_url).toBe('https://segment.com/academy/');
124
+ expect(event_time).toBe(1652368875449);
125
+ expect(client_ip_address).toBe('8.8.8.8');
126
+ expect(client_user_agent).toBe('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
127
+ expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
128
+ expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
129
+ expect(currency).toBe('USD');
130
+ expect(value).toBe(15);
131
+ expect(action_source).toBe('website');
132
+ expect(app_data).toBeUndefined();
105
133
  });
106
- const { integration, event_name, event_source_url, event_time, user_data, custom_data, action_source, app_data } = data;
107
- const { client_ip_address, client_user_agent, em, ph } = user_data;
108
- const { currency, value } = custom_data;
109
- expect(integration).toBe('segment');
110
- expect(event_name).toBe('PURCHASE');
111
- expect(event_source_url).toBe('https://segment.com/academy/');
112
- expect(event_time).toBe(1652368875449);
113
- expect(client_ip_address).toBe('8.8.8.8');
114
- expect(client_user_agent).toBe('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
115
- expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
116
- expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
117
- expect(currency).toBe('USD');
118
- expect(value).toBe(15);
119
- expect(action_source).toBe('website');
120
- expect(app_data).toBeUndefined();
121
- });
122
- it('should fail web event without pixel_id', async () => {
123
- await expect(reportConversionEvent({
124
- mapping: {
125
- event_type: 'PURCHASE',
126
- event_conversion_type: 'WEB'
127
- },
128
- settings: {
129
- snap_app_id: 'test123'
130
- }
131
- })).rejects.toThrowError('If event conversion type is "WEB" then Pixel ID must be defined');
132
- });
133
- it('should fail app event without snap_app_id', async () => {
134
- await expect(reportConversionEvent({
135
- settings: {},
136
- mapping: {
137
- event_type: 'PURCHASE',
138
- event_conversion_type: 'MOBILE_APP'
139
- }
140
- })).rejects.toThrowError('If event conversion type is "MOBILE_APP" then Snap App ID must be defined');
141
- });
142
- it('should handle an offline event conversion type', async () => {
143
- const { data } = await reportConversionEvent({
144
- mapping: {
145
- event_type: 'SAVE',
146
- event_conversion_type: 'OFFLINE'
147
- }
134
+ it('should fail web event without pixel_id', async () => {
135
+ nock_1.default(/.*/).post(/.*/).reply(200);
136
+ const event = actions_core_1.createTestEvent(testEvent);
137
+ await expect(testDestination.testAction('reportConversionEvent', {
138
+ event,
139
+ settings: {
140
+ snap_app_id: 'test123'
141
+ },
142
+ useDefaultMappings: true,
143
+ auth: {
144
+ accessToken,
145
+ refreshToken
146
+ },
147
+ features,
148
+ mapping: {
149
+ event_type: 'PURCHASE',
150
+ event_conversion_type: 'WEB'
151
+ }
152
+ })).rejects.toThrowError('If event conversion type is "WEB" then Pixel ID must be defined');
148
153
  });
149
- const { integration, event_name, event_source_url, event_time, user_data, custom_data, action_source, app_data } = data;
150
- const { client_ip_address, client_user_agent, em, ph } = user_data;
151
- const { currency, value } = custom_data;
152
- expect(integration).toBe('segment');
153
- expect(event_name).toBe('SAVE');
154
- expect(event_source_url).toBe('https://segment.com/academy/');
155
- expect(event_time).toBe(1652368875449);
156
- expect(client_ip_address).toBe('8.8.8.8');
157
- expect(client_user_agent).toBe('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
158
- expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
159
- expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
160
- expect(currency).toBe('USD');
161
- expect(value).toBe(15);
162
- expect(action_source).toBe('OFFLINE');
163
- expect(app_data).toBeUndefined();
164
- });
165
- it('should handle a mobile app event conversion type', async () => {
166
- const { data } = await reportConversionEvent({
167
- mapping: {
168
- device_model: 'iPhone12,1',
169
- os_version: '17.2',
170
- event_type: 'SAVE',
171
- event_conversion_type: 'MOBILE_APP'
172
- }
154
+ it('should fail app event without snap_app_id', async () => {
155
+ nock_1.default(/.*/).post(/.*/).reply(200);
156
+ const event = actions_core_1.createTestEvent(testEvent);
157
+ await expect(testDestination.testAction('reportConversionEvent', {
158
+ event,
159
+ settings: {
160
+ pixel_id: 'test123',
161
+ app_id: 'test123'
162
+ },
163
+ useDefaultMappings: true,
164
+ auth: {
165
+ accessToken,
166
+ refreshToken
167
+ },
168
+ features,
169
+ mapping: {
170
+ event_type: 'PURCHASE',
171
+ event_conversion_type: 'MOBILE_APP'
172
+ }
173
+ })).rejects.toThrowError('If event conversion type is "MOBILE_APP" then Snap App ID must be defined');
173
174
  });
174
- const { integration, event_name, event_source_url, event_time, user_data, custom_data, action_source, app_data } = data;
175
- const { client_ip_address, client_user_agent, em, ph } = user_data;
176
- const { currency, value } = custom_data;
177
- const { extinfo, advertiser_tracking_enabled } = app_data;
178
- expect(integration).toBe('segment');
179
- expect(event_name).toBe('SAVE');
180
- expect(event_source_url).toBe('https://segment.com/academy/');
181
- expect(event_time).toBe(1652368875449);
182
- expect(client_ip_address).toBe('8.8.8.8');
183
- expect(client_user_agent).toBe('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
184
- expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
185
- expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
186
- expect(currency).toBe('USD');
187
- expect(value).toBe(15);
188
- expect(action_source).toBe('app');
189
- expect(extinfo).toEqual([
190
- 'i2',
191
- '',
192
- '',
193
- '',
194
- '17.2',
195
- 'iPhone12,1',
196
- 'en-US',
197
- '',
198
- '',
199
- '',
200
- '',
201
- '',
202
- '',
203
- '',
204
- '',
205
- 'Europe/Amsterdam'
206
- ]);
207
- expect(advertiser_tracking_enabled).toBe(0);
208
- });
209
- it('should fail invalid currency', async () => {
210
- await expect(reportConversionEvent({
211
- event: {
175
+ it('should handle an offline event conversion type', async () => {
176
+ nock_1.default(/.*/).post(/.*/).reply(200);
177
+ const event = actions_core_1.createTestEvent(testEvent);
178
+ const responses = await testDestination.testAction('reportConversionEvent', {
179
+ event,
180
+ settings,
181
+ useDefaultMappings: true,
182
+ auth: {
183
+ accessToken,
184
+ refreshToken
185
+ },
186
+ features,
187
+ mapping: {
188
+ event_type: 'SAVE',
189
+ event_conversion_type: 'OFFLINE'
190
+ }
191
+ });
192
+ expect(responses).not.toBeNull();
193
+ expect(responses[0].status).toBe(200);
194
+ const body = JSON.parse(responses[0].options.body);
195
+ const { data } = body;
196
+ expect(data.length).toBe(1);
197
+ const { integration, event_name, event_source_url, event_time, user_data, custom_data, action_source, app_data } = data[0];
198
+ const { client_ip_address, client_user_agent, em, ph } = user_data;
199
+ const { currency, value } = custom_data;
200
+ expect(integration).toBe('segment');
201
+ expect(event_name).toBe('SAVE');
202
+ expect(event_source_url).toBe('https://segment.com/academy/');
203
+ expect(event_time).toBe(1652368875449);
204
+ expect(client_ip_address).toBe('8.8.8.8');
205
+ expect(client_user_agent).toBe('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
206
+ expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
207
+ expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
208
+ expect(currency).toBe('USD');
209
+ expect(value).toBe(15);
210
+ expect(action_source).toBe('OFFLINE');
211
+ expect(app_data).toBeUndefined();
212
+ });
213
+ it('should handle a mobile app event conversion type', async () => {
214
+ nock_1.default(/.*/).post(/.*/).reply(200);
215
+ const event = actions_core_1.createTestEvent(testEvent);
216
+ const responses = await testDestination.testAction('reportConversionEvent', {
217
+ event,
218
+ settings: {
219
+ snap_app_id: '123',
220
+ app_id: '123'
221
+ },
222
+ useDefaultMappings: true,
223
+ auth: {
224
+ accessToken,
225
+ refreshToken
226
+ },
227
+ features,
228
+ mapping: {
229
+ device_model: 'iPhone12,1',
230
+ os_version: '17.2',
231
+ event_type: 'SAVE',
232
+ event_conversion_type: 'MOBILE_APP'
233
+ }
234
+ });
235
+ expect(responses[0].status).toBe(200);
236
+ const body = JSON.parse(responses[0].options.body);
237
+ const { data } = body;
238
+ expect(data.length).toBe(1);
239
+ const { integration, event_name, event_source_url, event_time, user_data, custom_data, action_source, app_data } = data[0];
240
+ const { client_ip_address, client_user_agent, em, ph } = user_data;
241
+ const { currency, value } = custom_data;
242
+ const { extinfo, advertiser_tracking_enabled } = app_data;
243
+ expect(integration).toBe('segment');
244
+ expect(event_name).toBe('SAVE');
245
+ expect(event_source_url).toBe('https://segment.com/academy/');
246
+ expect(event_time).toBe(1652368875449);
247
+ expect(client_ip_address).toBe('8.8.8.8');
248
+ expect(client_user_agent).toBe('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
249
+ expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
250
+ expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
251
+ expect(currency).toBe('USD');
252
+ expect(value).toBe(15);
253
+ expect(action_source).toBe('app');
254
+ expect(extinfo).toEqual(['i2', '', '', '', '17.2', 'iPhone12,1', '', '', '', '', '', '', '', '', '', '']);
255
+ expect(advertiser_tracking_enabled).toBe(0);
256
+ });
257
+ it('should fail invalid currency', async () => {
258
+ nock_1.default(/.*/).post(/.*/).reply(200);
259
+ const event = actions_core_1.createTestEvent({
212
260
  ...testEvent,
213
261
  properties: {
214
262
  currency: 'Galleon'
215
263
  }
216
- },
217
- mapping: {
218
- event_type: 'PURCHASE',
219
- event_conversion_type: 'WEB'
220
- }
221
- })).rejects.toThrowError('GALLEON is not a valid currency code.');
222
- });
223
- it('should fail missing event conversion type', async () => {
224
- await expect(reportConversionEvent({
225
- mapping: {
226
- event_type: 'PURCHASE'
227
- }
228
- })).rejects.toThrowError("The root value is missing the required field 'action_source'.");
229
- });
230
- it('should handle a custom event', async () => {
231
- const { data } = await reportConversionEvent({
232
- event: {
264
+ });
265
+ await expect(testDestination.testAction('reportConversionEvent', {
266
+ event,
267
+ settings,
268
+ useDefaultMappings: true,
269
+ auth: {
270
+ accessToken,
271
+ refreshToken
272
+ },
273
+ features,
274
+ mapping: {
275
+ event_type: 'PURCHASE',
276
+ event_conversion_type: 'WEB'
277
+ }
278
+ })).rejects.toThrowError('Galleon is not a valid currency code.');
279
+ });
280
+ it('should fail missing event conversion type', async () => {
281
+ nock_1.default(/.*/).post(/.*/).reply(200);
282
+ const event = actions_core_1.createTestEvent(testEvent);
283
+ await expect(testDestination.testAction('reportConversionEvent', {
284
+ event,
285
+ settings,
286
+ useDefaultMappings: true,
287
+ auth: {
288
+ accessToken,
289
+ refreshToken
290
+ },
291
+ features,
292
+ mapping: {
293
+ event_type: 'PURCHASE'
294
+ }
295
+ })).rejects.toThrowError("The root value is missing the required field 'event_conversion_type'.");
296
+ });
297
+ it('should handle a custom event', async () => {
298
+ nock_1.default(/.*/).post(/.*/).reply(200);
299
+ const event = actions_core_1.createTestEvent({
233
300
  ...testEvent,
234
301
  event: 'CUSTOM_EVENT_5'
235
- },
236
- mapping: {
237
- event_type: { '@path': '$.event' },
238
- event_conversion_type: 'MOBILE_APP'
239
- }
302
+ });
303
+ const responses = await testDestination.testAction('reportConversionEvent', {
304
+ event,
305
+ settings: {
306
+ snap_app_id: '123',
307
+ app_id: '123'
308
+ },
309
+ useDefaultMappings: true,
310
+ auth: {
311
+ accessToken,
312
+ refreshToken
313
+ },
314
+ features,
315
+ mapping: {
316
+ event_type: { '@path': '$.event' },
317
+ event_conversion_type: 'MOBILE_APP'
318
+ }
319
+ });
320
+ expect(responses).not.toBeNull();
321
+ expect(responses[0].status).toBe(200);
322
+ const body = JSON.parse(responses[0].options.body);
323
+ const { data } = body;
324
+ expect(data.length).toBe(1);
325
+ const { integration, event_name, event_source_url, event_time, user_data, custom_data, action_source, app_data } = data[0];
326
+ const { client_ip_address, client_user_agent, em, ph } = user_data;
327
+ const { currency, value } = custom_data;
328
+ const { app_id, advertiser_tracking_enabled } = app_data;
329
+ expect(integration).toBe('segment');
330
+ expect(event_name).toBe('CUSTOM_EVENT_5');
331
+ expect(event_source_url).toBe('https://segment.com/academy/');
332
+ expect(event_time).toBe(1652368875449);
333
+ expect(client_ip_address).toBe('8.8.8.8');
334
+ expect(client_user_agent).toBe('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
335
+ expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
336
+ expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
337
+ expect(currency).toBe('USD');
338
+ expect(value).toBe(15);
339
+ expect(action_source).toBe('app');
340
+ expect(app_id).toBe('123');
341
+ expect(advertiser_tracking_enabled).toBe(0);
240
342
  });
241
- const { integration, event_name, event_source_url, event_time, user_data, custom_data, action_source, app_data } = data;
242
- const { client_ip_address, client_user_agent, em, ph } = user_data;
243
- const { currency, value } = custom_data;
244
- const { app_id, advertiser_tracking_enabled } = app_data;
245
- expect(integration).toBe('segment');
246
- expect(event_name).toBe('CUSTOM_EVENT_5');
247
- expect(event_source_url).toBe('https://segment.com/academy/');
248
- expect(event_time).toBe(1652368875449);
249
- expect(client_ip_address).toBe('8.8.8.8');
250
- expect(client_user_agent).toBe('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
251
- expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
252
- expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
253
- expect(currency).toBe('USD');
254
- expect(value).toBe(15);
255
- expect(action_source).toBe('app');
256
- expect(app_id).toBe('123');
257
- expect(advertiser_tracking_enabled).toBe(0);
258
- });
259
- it('should fail event missing all Snap identifiers', async () => {
260
- await expect(reportConversionEvent({
261
- event: {
343
+ it('should fail event missing all Snap identifiers', async () => {
344
+ const event = actions_core_1.createTestEvent({
262
345
  ...testEvent,
263
346
  properties: {},
264
347
  context: {}
265
- },
266
- mapping: {
267
- event_type: 'PURCHASE',
268
- event_conversion_type: 'WEB'
269
- }
270
- })).rejects.toThrowError('Payload must contain values for Email or Phone Number or Mobile Ad Identifier or both IP Address and User Agent fields');
271
- });
272
- it('should handle event with email as only Snap identifier', async () => {
273
- const { data } = await reportConversionEvent({
274
- event: {
348
+ });
349
+ await expect(testDestination.testAction('reportConversionEvent', {
350
+ event,
351
+ settings,
352
+ useDefaultMappings: true,
353
+ auth: {
354
+ accessToken,
355
+ refreshToken
356
+ },
357
+ features,
358
+ mapping: {
359
+ event_type: 'PURCHASE',
360
+ event_conversion_type: 'WEB'
361
+ }
362
+ })).rejects.toThrowError('Payload must contain values for Email or Phone Number or Mobile Ad Identifier or both IP Address and User Agent fields');
363
+ });
364
+ it('should handle event with email as only Snap identifier', async () => {
365
+ nock_1.default(/.*/).post(/.*/).reply(200);
366
+ const event = actions_core_1.createTestEvent({
275
367
  ...testEvent,
276
368
  properties: {
277
369
  email: 'test123@gmail.com'
278
370
  },
279
371
  context: {}
280
- },
281
- mapping: {
282
- event_type: 'PURCHASE',
283
- event_conversion_type: 'WEB'
284
- }
372
+ });
373
+ const responses = await testDestination.testAction('reportConversionEvent', {
374
+ event,
375
+ settings,
376
+ useDefaultMappings: true,
377
+ auth: {
378
+ accessToken,
379
+ refreshToken
380
+ },
381
+ features,
382
+ mapping: {
383
+ event_type: 'PURCHASE',
384
+ event_conversion_type: 'WEB'
385
+ }
386
+ });
387
+ expect(responses).not.toBeNull();
388
+ expect(responses[0].status).toBe(200);
389
+ const body = JSON.parse(responses[0].options.body);
390
+ const { data } = body;
391
+ expect(data.length).toBe(1);
392
+ const { integration, event_name, event_time, user_data, action_source } = data[0];
393
+ const { em, ph } = user_data;
394
+ expect(integration).toBe('segment');
395
+ expect(event_name).toBe('PURCHASE');
396
+ expect(event_time).toBe(1652368875449);
397
+ expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
398
+ expect(ph).toBeUndefined();
399
+ expect(action_source).toBe('website');
285
400
  });
286
- const { integration, event_name, event_time, user_data, action_source } = data;
287
- const { em, ph } = user_data;
288
- expect(integration).toBe('segment');
289
- expect(event_name).toBe('PURCHASE');
290
- expect(event_time).toBe(1652368875449);
291
- expect(em[0]).toBe('cc779c04191c2e736d89e45c11339c8382832bcaf70383f7df94e3d08ba7a6d9');
292
- expect(ph).toBeUndefined();
293
- expect(action_source).toBe('website');
294
- });
295
- it('should handle event with phone as only Snap identifier', async () => {
296
- const { data } = await reportConversionEvent({
297
- event: {
401
+ it('should handle event with phone as only Snap identifier', async () => {
402
+ nock_1.default(/.*/).post(/.*/).reply(200);
403
+ const event = actions_core_1.createTestEvent({
298
404
  ...testEvent,
299
405
  properties: {
300
406
  phone: '+44 844 412 4653'
301
407
  },
302
408
  context: {}
303
- },
304
- mapping: {
305
- event_type: 'PURCHASE',
306
- event_conversion_type: 'WEB'
307
- }
409
+ });
410
+ const responses = await testDestination.testAction('reportConversionEvent', {
411
+ event,
412
+ settings,
413
+ useDefaultMappings: true,
414
+ auth: {
415
+ accessToken,
416
+ refreshToken
417
+ },
418
+ features,
419
+ mapping: {
420
+ event_type: 'PURCHASE',
421
+ event_conversion_type: 'WEB'
422
+ }
423
+ });
424
+ const body = JSON.parse(responses[0].options.body);
425
+ const { data } = body;
426
+ expect(data.length).toBe(1);
427
+ const { integration, event_name, event_time, user_data, action_source } = data[0];
428
+ const { ph } = user_data;
429
+ expect(integration).toBe('segment');
430
+ expect(event_name).toBe('PURCHASE');
431
+ expect(event_time).toBe(1652368875449);
432
+ expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
433
+ expect(action_source).toBe('website');
308
434
  });
309
- const { integration, event_name, event_time, user_data, action_source } = data;
310
- const { ph } = user_data;
311
- expect(integration).toBe('segment');
312
- expect(event_name).toBe('PURCHASE');
313
- expect(event_time).toBe(1652368875449);
314
- expect(ph[0]).toBe('dc008fda46e2e64002cf2f82a4906236282d431c4f75e5b60bfe79fc48546383');
315
- expect(action_source).toBe('website');
316
- });
317
- it('should handle event with advertising_id as only Snap identifier', async () => {
318
- const advertisingId = '87a7def4-b6e9-4bf7-91b6-66372842007a';
319
- const { data } = await reportConversionEvent({
320
- event: {
435
+ it('should handle event with advertising_id as only Snap identifier', async () => {
436
+ nock_1.default(/.*/).post(/.*/).reply(200);
437
+ const advertisingId = '87a7def4-b6e9-4bf7-91b6-66372842007a';
438
+ const event = actions_core_1.createTestEvent({
321
439
  ...testEvent,
322
440
  properties: {},
323
441
  context: {
@@ -325,190 +443,140 @@ describe('Snap Conversions API ', () => {
325
443
  advertisingId
326
444
  }
327
445
  }
328
- },
329
- mapping: {
330
- event_type: 'PURCHASE',
331
- event_conversion_type: 'WEB'
332
- }
446
+ });
447
+ const responses = await testDestination.testAction('reportConversionEvent', {
448
+ event,
449
+ settings,
450
+ useDefaultMappings: true,
451
+ auth: {
452
+ accessToken,
453
+ refreshToken
454
+ },
455
+ features,
456
+ mapping: {
457
+ event_type: 'PURCHASE',
458
+ event_conversion_type: 'WEB'
459
+ }
460
+ });
461
+ const body = JSON.parse(responses[0].options.body);
462
+ const { data } = body;
463
+ expect(data.length).toBe(1);
464
+ const { integration, event_name, event_time, user_data, action_source } = data[0];
465
+ const { madid } = user_data;
466
+ expect(integration).toBe('segment');
467
+ expect(event_name).toBe('PURCHASE');
468
+ expect(event_time).toBe(1652368875449);
469
+ expect(madid).toBe(advertisingId);
470
+ expect(action_source).toBe('website');
333
471
  });
334
- const { integration, event_name, event_time, user_data, action_source } = data;
335
- const { madid } = user_data;
336
- expect(integration).toBe('segment');
337
- expect(event_name).toBe('PURCHASE');
338
- expect(event_time).toBe(1652368875449);
339
- expect(madid).toBe(advertisingId);
340
- expect(action_source).toBe('website');
341
- });
342
- it('should handle event with ip and user_agent as only Snap identifiers', async () => {
343
- const { data } = await reportConversionEvent({
344
- event: {
472
+ it('should handle event with ip and user_agent as only Snap identifiers', async () => {
473
+ nock_1.default(/.*/).post(/.*/).reply(200);
474
+ const event = actions_core_1.createTestEvent({
345
475
  ...testEvent,
346
476
  properties: {}
347
- },
348
- mapping: {
349
- event_type: 'PURCHASE',
350
- event_conversion_type: 'WEB'
351
- }
477
+ });
478
+ const responses = await testDestination.testAction('reportConversionEvent', {
479
+ event,
480
+ settings,
481
+ useDefaultMappings: true,
482
+ auth: {
483
+ accessToken,
484
+ refreshToken
485
+ },
486
+ features,
487
+ mapping: {
488
+ event_type: 'PURCHASE',
489
+ event_conversion_type: 'WEB'
490
+ }
491
+ });
492
+ const body = JSON.parse(responses[0].options.body);
493
+ const { data } = body;
494
+ expect(data.length).toBe(1);
495
+ const { integration, event_name, event_time, user_data, action_source } = data[0];
496
+ const { client_ip_address, client_user_agent } = user_data;
497
+ expect(integration).toBe('segment');
498
+ expect(event_name).toBe('PURCHASE');
499
+ expect(event_time).toBe(1652368875449);
500
+ expect(client_ip_address).toBe('8.8.8.8');
501
+ expect(client_user_agent).toBe('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
502
+ expect(action_source).toBe('website');
352
503
  });
353
- const { integration, event_name, event_time, user_data, action_source } = data;
354
- const { client_ip_address, client_user_agent } = user_data;
355
- expect(integration).toBe('segment');
356
- expect(event_name).toBe('PURCHASE');
357
- expect(event_time).toBe(1652368875449);
358
- expect(client_ip_address).toBe('8.8.8.8');
359
- expect(client_user_agent).toBe('Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1');
360
- expect(action_source).toBe('website');
361
- });
362
- it('should always use the pixel id in settings for web events', async () => {
363
- const { url } = await reportConversionEvent({
364
- event: {
504
+ it('should always use the pixel id in settings for web events', async () => {
505
+ nock_1.default(/.*/).post(/.*/).reply(200);
506
+ const event = actions_core_1.createTestEvent({
365
507
  ...testEvent,
366
508
  properties: {}
367
- },
368
- mapping: {
369
- event_type: 'PURCHASE',
370
- event_conversion_type: 'WEB'
371
- }
509
+ });
510
+ const responses = await testDestination.testAction('reportConversionEvent', {
511
+ event,
512
+ settings,
513
+ useDefaultMappings: true,
514
+ auth: {
515
+ accessToken,
516
+ refreshToken
517
+ },
518
+ features,
519
+ mapping: {
520
+ event_type: 'PURCHASE',
521
+ event_conversion_type: 'WEB'
522
+ }
523
+ });
524
+ expect(responses[0].url).toBe(snap_capi_v3_1.buildRequestURL('pixel123', 'access123'));
372
525
  });
373
- expect(url).toBe('https://tr.snapchat.com/v3/pixel123/events?access_token=access123');
374
- });
375
- it('should trim a pixel id with leading or trailing whitespace', async () => {
376
- const { url } = await reportConversionEvent({
377
- event: {
526
+ it('should trim a pixel id with leading or trailing whitespace', async () => {
527
+ nock_1.default(/.*/).post(/.*/).reply(200);
528
+ const event = actions_core_1.createTestEvent({
378
529
  ...testEvent,
379
530
  properties: {}
380
- },
381
- settings: {
382
- pixel_id: ' pixel123 '
383
- },
384
- mapping: {
385
- event_type: 'PURCHASE',
386
- event_conversion_type: 'WEB'
387
- }
531
+ });
532
+ const responses = await testDestination.testAction('reportConversionEvent', {
533
+ event,
534
+ settings: {
535
+ pixel_id: ' pixel123 '
536
+ },
537
+ useDefaultMappings: true,
538
+ auth: {
539
+ accessToken,
540
+ refreshToken
541
+ },
542
+ features,
543
+ mapping: {
544
+ event_type: 'PURCHASE',
545
+ event_conversion_type: 'WEB'
546
+ }
547
+ });
548
+ expect(responses[0].url).toBe(snap_capi_v3_1.buildRequestURL('pixel123', 'access123'));
388
549
  });
389
- expect(url).toBe('https://tr.snapchat.com/v3/pixel123/events?access_token=access123');
390
- });
391
- it('should exclude number_items that is not a valid integer', async () => {
392
- const { url, data } = await reportConversionEvent({
393
- event: {
550
+ it('should exclude number_items that is not a valid integer', async () => {
551
+ nock_1.default(/.*/).post(/.*/).reply(200);
552
+ const event = actions_core_1.createTestEvent({
394
553
  ...testEvent,
395
554
  properties: {}
396
- },
397
- settings: {
398
- pixel_id: ' pixel123 '
399
- },
400
- auth: {
401
- accessToken: ' access123 ',
402
- refreshToken: ''
403
- },
404
- mapping: {
405
- event_type: 'PURCHASE',
406
- event_conversion_type: 'WEB',
407
- number_items: 'six'
408
- }
409
- });
410
- expect(url).toBe('https://tr.snapchat.com/v3/pixel123/events?access_token=access123');
411
- const { custom_data } = data;
412
- expect(custom_data).toBeUndefined();
413
- });
414
- it('supports all the v3 fields', async () => {
415
- const { data: { action_source, app_data, custom_data, data_processing_options, data_processing_options_country, data_processing_options_state, event_id, event_name, event_source_url, event_time, user_data } } = await reportConversionEvent({
416
- event: {
417
- ...testEvent,
418
- properties: {
419
- currency: 'USD',
420
- email: ' Test123@gmail.com ',
421
- phone: '+44 844 412 4653',
422
- birthday: '19970216',
423
- gender: 'Male',
424
- last_name: 'McTest',
425
- first_name: 'Tester',
426
- address: {
427
- city: 'A Fake City',
428
- state: 'Not Even A State',
429
- country: 'Bolivia',
430
- postalCode: '1234'
431
- },
432
- query: 'test-query',
433
- order_id: 'A1234',
434
- revenue: 1000
555
+ });
556
+ const responses = await testDestination.testAction('reportConversionEvent', {
557
+ event,
558
+ settings: {
559
+ pixel_id: ' pixel123 '
435
560
  },
436
- context: {
437
- ...testEvent.context,
438
- app: {
439
- namespace: 'com.segment.app',
440
- version: '1.0.0'
441
- },
442
- device: {
443
- adTrackingEnabled: true
444
- },
445
- screen: {
446
- width: '1920',
447
- height: '1080',
448
- density: '2.0'
449
- },
450
- os: {
451
- version: '19.5'
452
- }
561
+ useDefaultMappings: true,
562
+ auth: {
563
+ accessToken: ' access123 ',
564
+ refreshToken
565
+ },
566
+ features,
567
+ mapping: {
568
+ event_type: 'PURCHASE',
569
+ event_conversion_type: 'WEB',
570
+ number_items: 'six'
453
571
  }
454
- },
455
- mapping: {
456
- event_name: 'PURCHASE',
457
- action_source: 'app',
458
- data_processing_options: true,
459
- data_processing_options_country: 1,
460
- data_processing_options_state: 1000
461
- }
572
+ });
573
+ expect(responses[0].url).toBe(snap_capi_v3_1.buildRequestURL('pixel123', 'access123'));
574
+ const body = JSON.parse(responses[0].options.body);
575
+ const { data } = body;
576
+ expect(data.length).toBe(1);
577
+ const { custom_data } = data[0];
578
+ expect(custom_data).toBeUndefined();
462
579
  });
463
- console.log(custom_data);
464
- expect(action_source).toEqual('app');
465
- expect(event_name).toEqual('PURCHASE');
466
- expect(event_id).toEqual(testEvent.messageId);
467
- expect(event_source_url).toEqual(testEvent.context?.page?.url ?? '');
468
- expect(event_time).toEqual(Date.parse(testEvent.timestamp));
469
- expect(data_processing_options).toEqual(['LDU']);
470
- expect(data_processing_options_country).toEqual(1);
471
- expect(data_processing_options_state).toEqual(1000);
472
- expect(app_data.application_tracking_enabled).toEqual(1);
473
- expect(app_data.extinfo).toEqual([
474
- 'i2',
475
- 'com.segment.app',
476
- '',
477
- '1.0.0',
478
- '19.5',
479
- '',
480
- 'en-US',
481
- '',
482
- '',
483
- '1920',
484
- '1080',
485
- '2.0',
486
- '',
487
- '',
488
- '',
489
- 'Europe/Amsterdam'
490
- ]);
491
- expect(custom_data.currency).toEqual('USD');
492
- expect(custom_data.order_id).toEqual('A1234');
493
- expect(custom_data.search_string).toEqual('test-query');
494
- expect(custom_data.value).toEqual(1000);
495
- expect(user_data.external_id[0]).toEqual(utils_1.hash(testEvent.userId ?? ''));
496
- expect(user_data.em[0]).toEqual(utils_1.hash('test123@gmail.com'));
497
- expect(user_data.ph[0]).toEqual(utils_1.hash('448444124653'));
498
- expect(user_data.db).toEqual(utils_1.hash('19970216'));
499
- expect(user_data.fn).toEqual(utils_1.hash('tester'));
500
- expect(user_data.ln).toEqual(utils_1.hash('mctest'));
501
- expect(user_data.ge).toEqual(utils_1.hash('m'));
502
- expect(user_data.ct).toEqual(utils_1.hash('afakecity'));
503
- expect(user_data.st).toEqual(utils_1.hash('notevenastate'));
504
- expect(user_data.country).toEqual(utils_1.hash('bo'));
505
- expect(user_data.zp).toEqual(utils_1.hash('1234'));
506
- expect(user_data.client_ip_address).toBe(testEvent.context?.ip);
507
- expect(user_data.client_user_agent).toBe(testEvent.context?.userAgent);
508
- expect(user_data.idfv).toBe(testEvent.context?.device?.id);
509
- expect(user_data.madid).toBe(testEvent.context?.device?.advertisingId);
510
- expect(user_data.sc_click_id).toEqual(testEvent.integrations?.['Snap Conversions Api']?.click_id);
511
- expect(user_data.sc_cookie1).toEqual(testEvent.integrations?.['Snap Conversions Api']?.uuid_c1);
512
580
  });
513
581
  });
514
582
  });