@capillarytech/creatives-library 8.0.125-alpha.6 → 8.0.126

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 (105) hide show
  1. package/config/app.js +6 -0
  2. package/containers/App/constants.js +0 -1
  3. package/containers/Email/index.js +5 -5
  4. package/containers/WeChat/RichmediaTemplates/Create/index.js +1 -1
  5. package/initialReducer.js +2 -0
  6. package/package.json +1 -1
  7. package/services/api.js +94 -1
  8. package/services/tests/api.test.js +191 -0
  9. package/tests/integration/TemplateCreation/TemplateCreation.integration.test.js +3 -8
  10. package/tests/integration/TemplateCreation/api-response.js +0 -5
  11. package/tests/integration/TemplateCreation/msw-handler.js +63 -42
  12. package/utils/common.js +0 -7
  13. package/utils/commonUtils.js +6 -2
  14. package/v2Components/CapImageUpload/index.js +45 -51
  15. package/v2Components/CapInAppCTA/index.js +0 -1
  16. package/v2Components/CapTagList/index.js +120 -177
  17. package/v2Components/CapVideoUpload/constants.js +0 -3
  18. package/v2Components/CapVideoUpload/index.js +110 -167
  19. package/v2Components/CapVideoUpload/messages.js +0 -16
  20. package/v2Components/Carousel/index.js +13 -15
  21. package/v2Components/CustomerSearchSection/_customerSearch.scss +309 -0
  22. package/v2Components/CustomerSearchSection/constants.js +5 -0
  23. package/v2Components/CustomerSearchSection/index.js +362 -0
  24. package/v2Components/CustomerSearchSection/messages.js +20 -0
  25. package/v2Components/CustomerSearchSection/tests/utils.test.js +334 -0
  26. package/v2Components/CustomerSearchSection/utils.js +49 -0
  27. package/v2Components/ErrorInfoNote/style.scss +0 -1
  28. package/v2Components/MobilePushPreviewV2/index.js +5 -37
  29. package/v2Components/TemplatePreview/_templatePreview.scss +72 -114
  30. package/v2Components/TemplatePreview/index.js +50 -178
  31. package/v2Components/TemplatePreview/messages.js +0 -4
  32. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +543 -0
  33. package/v2Components/TestAndPreviewSlidebox/actions.js +67 -0
  34. package/v2Components/TestAndPreviewSlidebox/constants.js +67 -0
  35. package/v2Components/TestAndPreviewSlidebox/index.js +771 -0
  36. package/v2Components/TestAndPreviewSlidebox/messages.js +147 -0
  37. package/v2Components/TestAndPreviewSlidebox/reducer.js +233 -0
  38. package/v2Components/TestAndPreviewSlidebox/sagas.js +258 -0
  39. package/v2Components/TestAndPreviewSlidebox/selectors.js +142 -0
  40. package/v2Components/TestAndPreviewSlidebox/tests/actions.test.js +80 -0
  41. package/v2Components/TestAndPreviewSlidebox/tests/reducer.test.js +367 -0
  42. package/v2Components/TestAndPreviewSlidebox/tests/saga.rtl.test.js +192 -0
  43. package/v2Components/TestAndPreviewSlidebox/tests/saga.test.js +652 -0
  44. package/v2Components/TestAndPreviewSlidebox/tests/selector.test.js +182 -0
  45. package/v2Containers/CreativesContainer/SlideBoxContent.js +21 -9
  46. package/v2Containers/CreativesContainer/SlideBoxFooter.js +23 -2
  47. package/v2Containers/CreativesContainer/index.js +160 -195
  48. package/v2Containers/CreativesContainer/messages.js +4 -0
  49. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +21 -0
  50. package/v2Containers/Email/index.js +18 -6
  51. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +10 -0
  52. package/v2Containers/EmailWrapper/index.js +6 -0
  53. package/v2Containers/InApp/constants.js +0 -1
  54. package/v2Containers/InApp/index.js +13 -13
  55. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +3 -0
  56. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +2 -0
  57. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +2 -0
  58. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +9 -0
  59. package/v2Containers/MobilePush/Create/index.js +0 -1
  60. package/v2Containers/MobilePush/commonMethods.js +14 -7
  61. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +23 -5
  62. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4 -0
  63. package/v2Containers/TagList/index.js +10 -56
  64. package/v2Containers/Templates/_templates.scss +1 -101
  65. package/v2Containers/Templates/index.js +35 -147
  66. package/v2Containers/Templates/messages.js +0 -8
  67. package/v2Containers/Templates/sagas.js +0 -2
  68. package/v2Containers/WeChat/RichmediaTemplates/Create/index.js +1 -1
  69. package/v2Containers/Whatsapp/constants.js +0 -1
  70. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +35 -0
  71. package/utils/createPayload.js +0 -270
  72. package/utils/tests/createPayload.test.js +0 -761
  73. package/v2Components/CapMpushCTA/constants.js +0 -25
  74. package/v2Components/CapMpushCTA/index.js +0 -332
  75. package/v2Components/CapMpushCTA/index.scss +0 -95
  76. package/v2Components/CapMpushCTA/messages.js +0 -89
  77. package/v2Components/TemplatePreview/assets/images/Android _ With date and time.svg +0 -29
  78. package/v2Components/TemplatePreview/assets/images/android.svg +0 -9
  79. package/v2Components/TemplatePreview/assets/images/iOS _ With date and time.svg +0 -26
  80. package/v2Components/TemplatePreview/assets/images/ios.svg +0 -9
  81. package/v2Containers/Email/tests/index.test.js +0 -35
  82. package/v2Containers/MobilePushNew/actions.js +0 -116
  83. package/v2Containers/MobilePushNew/components/CtaButtons.js +0 -170
  84. package/v2Containers/MobilePushNew/components/MediaUploaders.js +0 -686
  85. package/v2Containers/MobilePushNew/components/PlatformContentFields.js +0 -279
  86. package/v2Containers/MobilePushNew/components/index.js +0 -5
  87. package/v2Containers/MobilePushNew/components/tests/CtaButtons.test.js +0 -779
  88. package/v2Containers/MobilePushNew/components/tests/MediaUploaders.test.js +0 -2114
  89. package/v2Containers/MobilePushNew/components/tests/PlatformContentFields.test.js +0 -343
  90. package/v2Containers/MobilePushNew/constants.js +0 -115
  91. package/v2Containers/MobilePushNew/hooks/tests/usePlatformSync.test.js +0 -1299
  92. package/v2Containers/MobilePushNew/hooks/tests/useUpload.test.js +0 -1223
  93. package/v2Containers/MobilePushNew/hooks/usePlatformSync.js +0 -246
  94. package/v2Containers/MobilePushNew/hooks/useUpload.js +0 -709
  95. package/v2Containers/MobilePushNew/index.js +0 -2170
  96. package/v2Containers/MobilePushNew/index.scss +0 -308
  97. package/v2Containers/MobilePushNew/messages.js +0 -226
  98. package/v2Containers/MobilePushNew/reducer.js +0 -160
  99. package/v2Containers/MobilePushNew/sagas.js +0 -198
  100. package/v2Containers/MobilePushNew/selectors.js +0 -55
  101. package/v2Containers/MobilePushNew/tests/reducer.test.js +0 -741
  102. package/v2Containers/MobilePushNew/tests/sagas.test.js +0 -863
  103. package/v2Containers/MobilePushNew/tests/selectors.test.js +0 -425
  104. package/v2Containers/MobilePushNew/tests/utils.test.js +0 -322
  105. package/v2Containers/MobilePushNew/utils.js +0 -33
@@ -1,425 +0,0 @@
1
- import { fromJS } from 'immutable';
2
- import {
3
- makeSelectMobilePushNew,
4
- makeSelectUploadedAssetData,
5
- makeSelectUploadAssetSuccess,
6
- makeSelectCreateError,
7
- makeSelectAssetUploading,
8
- makeSelectGetTemplateDetailsInProgress,
9
- } from '../selectors';
10
-
11
- describe('MobilePushNew selectors', () => {
12
- // Mock state structures
13
- const mockMobilePushNewState = {
14
- uploadedAssetData: { id: 1, url: 'test-url' },
15
- uploadAssetSuccess: true,
16
- createTemplateErrorMessage: 'Test error message',
17
- assetUploading: true,
18
- getTemplateDetailsInProgress: true,
19
- otherProperty: 'test-value',
20
- };
21
-
22
- const mockStateWithMobilePushNew = fromJS({
23
- mobilePushNew: mockMobilePushNewState,
24
- otherState: { value: 'test' },
25
- });
26
-
27
- const mockStateWithoutMobilePushNew = fromJS({
28
- otherState: { value: 'test' },
29
- });
30
-
31
- const mockStateWithEmptyMobilePushNew = fromJS({
32
- mobilePushNew: {},
33
- otherState: { value: 'test' },
34
- });
35
-
36
- const mockStateWithPartialMobilePushNew = fromJS({
37
- mobilePushNew: {
38
- uploadedAssetData: { id: 2, name: 'test-asset' },
39
- uploadAssetSuccess: false,
40
- // Missing other properties to test defaults
41
- },
42
- otherState: { value: 'test' },
43
- });
44
-
45
- describe('makeSelectMobilePushNew', () => {
46
- it('should select the mobilePushNew state and convert to JS', () => {
47
- const selector = makeSelectMobilePushNew();
48
- const result = selector(mockStateWithMobilePushNew);
49
-
50
- expect(result).toEqual(mockMobilePushNewState);
51
- expect(typeof result).toBe('object');
52
- expect(Array.isArray(result)).toBe(false);
53
- });
54
-
55
- it('should return empty object when mobilePushNew state does not exist', () => {
56
- const selector = makeSelectMobilePushNew();
57
- const result = selector(mockStateWithoutMobilePushNew);
58
-
59
- expect(result).toEqual({});
60
- });
61
-
62
- it('should return empty object when mobilePushNew state is empty', () => {
63
- const selector = makeSelectMobilePushNew();
64
- const result = selector(mockStateWithEmptyMobilePushNew);
65
-
66
- expect(result).toEqual({});
67
- });
68
-
69
- it('should handle partial mobilePushNew state', () => {
70
- const selector = makeSelectMobilePushNew();
71
- const result = selector(mockStateWithPartialMobilePushNew);
72
-
73
- expect(result).toEqual({
74
- uploadedAssetData: { id: 2, name: 'test-asset' },
75
- uploadAssetSuccess: false,
76
- });
77
- });
78
- });
79
-
80
- describe('makeSelectUploadedAssetData', () => {
81
- it('should select uploadedAssetData when it exists', () => {
82
- const selector = makeSelectUploadedAssetData();
83
- const result = selector(mockStateWithMobilePushNew);
84
-
85
- // The selector returns the Immutable object directly, not converted to JS
86
- expect(result.get('id')).toBe(1);
87
- expect(result.get('url')).toBe('test-url');
88
- });
89
-
90
- it('should return empty object when uploadedAssetData does not exist', () => {
91
- const selector = makeSelectUploadedAssetData();
92
- const result = selector(mockStateWithoutMobilePushNew);
93
-
94
- expect(result).toEqual({});
95
- });
96
-
97
- it('should return empty object when mobilePushNew state is empty', () => {
98
- const selector = makeSelectUploadedAssetData();
99
- const result = selector(mockStateWithEmptyMobilePushNew);
100
-
101
- expect(result).toEqual({});
102
- });
103
-
104
- it('should return uploadedAssetData from partial state', () => {
105
- const selector = makeSelectUploadedAssetData();
106
- const result = selector(mockStateWithPartialMobilePushNew);
107
-
108
- // The selector returns the Immutable object directly
109
- expect(result.get('id')).toBe(2);
110
- expect(result.get('name')).toBe('test-asset');
111
- });
112
-
113
- it('should return empty object when uploadedAssetData is null', () => {
114
- const stateWithNullAssetData = fromJS({
115
- mobilePushNew: {
116
- uploadedAssetData: null,
117
- uploadAssetSuccess: true,
118
- },
119
- });
120
-
121
- const selector = makeSelectUploadedAssetData();
122
- const result = selector(stateWithNullAssetData);
123
-
124
- expect(result).toEqual({});
125
- });
126
- });
127
-
128
- describe('makeSelectUploadAssetSuccess', () => {
129
- it('should select uploadAssetSuccess when it is true', () => {
130
- const selector = makeSelectUploadAssetSuccess();
131
- const result = selector(mockStateWithMobilePushNew);
132
-
133
- expect(result).toBe(true);
134
- });
135
-
136
- it('should select uploadAssetSuccess when it is false', () => {
137
- const selector = makeSelectUploadAssetSuccess();
138
- const result = selector(mockStateWithPartialMobilePushNew);
139
-
140
- expect(result).toBe(false);
141
- });
142
-
143
- it('should return false when uploadAssetSuccess does not exist', () => {
144
- const selector = makeSelectUploadAssetSuccess();
145
- const result = selector(mockStateWithoutMobilePushNew);
146
-
147
- expect(result).toBe(false);
148
- });
149
-
150
- it('should return false when mobilePushNew state is empty', () => {
151
- const selector = makeSelectUploadAssetSuccess();
152
- const result = selector(mockStateWithEmptyMobilePushNew);
153
-
154
- expect(result).toBe(false);
155
- });
156
-
157
- it('should return false when uploadAssetSuccess is null or undefined', () => {
158
- const stateWithNullSuccess = fromJS({
159
- mobilePushNew: {
160
- uploadAssetSuccess: null,
161
- uploadedAssetData: {},
162
- },
163
- });
164
-
165
- const selector = makeSelectUploadAssetSuccess();
166
- const result = selector(stateWithNullSuccess);
167
-
168
- expect(result).toBe(false);
169
- });
170
- });
171
-
172
- describe('makeSelectCreateError', () => {
173
- it('should select createTemplateErrorMessage when it exists', () => {
174
- const selector = makeSelectCreateError();
175
- const result = selector(mockStateWithMobilePushNew);
176
-
177
- expect(result).toBe('Test error message');
178
- });
179
-
180
- it('should return empty string when createTemplateErrorMessage does not exist', () => {
181
- const selector = makeSelectCreateError();
182
- const result = selector(mockStateWithoutMobilePushNew);
183
-
184
- expect(result).toBe('');
185
- });
186
-
187
- it('should return empty string when mobilePushNew state is empty', () => {
188
- const selector = makeSelectCreateError();
189
- const result = selector(mockStateWithEmptyMobilePushNew);
190
-
191
- expect(result).toBe('');
192
- });
193
-
194
- it('should return empty string when createTemplateErrorMessage is not in partial state', () => {
195
- const selector = makeSelectCreateError();
196
- const result = selector(mockStateWithPartialMobilePushNew);
197
-
198
- expect(result).toBe('');
199
- });
200
-
201
- it('should handle various error message types', () => {
202
- const stateWithErrorMessage = fromJS({
203
- mobilePushNew: {
204
- createTemplateErrorMessage: 'Network error occurred',
205
- },
206
- });
207
-
208
- const selector = makeSelectCreateError();
209
- const result = selector(stateWithErrorMessage);
210
-
211
- expect(result).toBe('Network error occurred');
212
- });
213
-
214
- it('should return empty string when createTemplateErrorMessage is null', () => {
215
- const stateWithNullError = fromJS({
216
- mobilePushNew: {
217
- createTemplateErrorMessage: null,
218
- },
219
- });
220
-
221
- const selector = makeSelectCreateError();
222
- const result = selector(stateWithNullError);
223
-
224
- expect(result).toBe('');
225
- });
226
- });
227
-
228
- describe('makeSelectAssetUploading', () => {
229
- it('should select assetUploading when it is true', () => {
230
- const selector = makeSelectAssetUploading();
231
- const result = selector(mockStateWithMobilePushNew);
232
-
233
- expect(result).toBe(true);
234
- });
235
-
236
- it('should return false when assetUploading does not exist', () => {
237
- const selector = makeSelectAssetUploading();
238
- const result = selector(mockStateWithoutMobilePushNew);
239
-
240
- expect(result).toBe(false);
241
- });
242
-
243
- it('should return false when mobilePushNew state is empty', () => {
244
- const selector = makeSelectAssetUploading();
245
- const result = selector(mockStateWithEmptyMobilePushNew);
246
-
247
- expect(result).toBe(false);
248
- });
249
-
250
- it('should return false when assetUploading is not in partial state', () => {
251
- const selector = makeSelectAssetUploading();
252
- const result = selector(mockStateWithPartialMobilePushNew);
253
-
254
- expect(result).toBe(false);
255
- });
256
-
257
- it('should handle assetUploading when explicitly set to false', () => {
258
- const stateWithFalseUploading = fromJS({
259
- mobilePushNew: {
260
- assetUploading: false,
261
- },
262
- });
263
-
264
- const selector = makeSelectAssetUploading();
265
- const result = selector(stateWithFalseUploading);
266
-
267
- expect(result).toBe(false);
268
- });
269
-
270
- it('should return false when assetUploading is null', () => {
271
- const stateWithNullUploading = fromJS({
272
- mobilePushNew: {
273
- assetUploading: null,
274
- },
275
- });
276
-
277
- const selector = makeSelectAssetUploading();
278
- const result = selector(stateWithNullUploading);
279
-
280
- expect(result).toBe(false);
281
- });
282
- });
283
-
284
- describe('makeSelectGetTemplateDetailsInProgress', () => {
285
- it('should select getTemplateDetailsInProgress when it is true', () => {
286
- const selector = makeSelectGetTemplateDetailsInProgress();
287
- const result = selector(mockStateWithMobilePushNew);
288
-
289
- expect(result).toBe(true);
290
- });
291
-
292
- it('should return false when getTemplateDetailsInProgress does not exist', () => {
293
- const selector = makeSelectGetTemplateDetailsInProgress();
294
- const result = selector(mockStateWithoutMobilePushNew);
295
-
296
- expect(result).toBe(false);
297
- });
298
-
299
- it('should return false when mobilePushNew state is empty', () => {
300
- const selector = makeSelectGetTemplateDetailsInProgress();
301
- const result = selector(mockStateWithEmptyMobilePushNew);
302
-
303
- expect(result).toBe(false);
304
- });
305
-
306
- it('should return false when getTemplateDetailsInProgress is not in partial state', () => {
307
- const selector = makeSelectGetTemplateDetailsInProgress();
308
- const result = selector(mockStateWithPartialMobilePushNew);
309
-
310
- expect(result).toBe(false);
311
- });
312
-
313
- it('should handle getTemplateDetailsInProgress when explicitly set to false', () => {
314
- const stateWithFalseProgress = fromJS({
315
- mobilePushNew: {
316
- getTemplateDetailsInProgress: false,
317
- },
318
- });
319
-
320
- const selector = makeSelectGetTemplateDetailsInProgress();
321
- const result = selector(stateWithFalseProgress);
322
-
323
- expect(result).toBe(false);
324
- });
325
-
326
- it('should return false when getTemplateDetailsInProgress is null', () => {
327
- const stateWithNullProgress = fromJS({
328
- mobilePushNew: {
329
- getTemplateDetailsInProgress: null,
330
- },
331
- });
332
-
333
- const selector = makeSelectGetTemplateDetailsInProgress();
334
- const result = selector(stateWithNullProgress);
335
-
336
- expect(result).toBe(false);
337
- });
338
- });
339
-
340
- describe('Selector memoization', () => {
341
- it('should return the same result for identical state (memoization test)', () => {
342
- const selector = makeSelectMobilePushNew();
343
- const result1 = selector(mockStateWithMobilePushNew);
344
- const result2 = selector(mockStateWithMobilePushNew);
345
-
346
- expect(result1).toBe(result2);
347
- });
348
-
349
- it('should return different results for different states', () => {
350
- const selector = makeSelectUploadAssetSuccess();
351
- const result1 = selector(mockStateWithMobilePushNew);
352
- const result2 = selector(mockStateWithPartialMobilePushNew);
353
-
354
- expect(result1).toBe(true);
355
- expect(result2).toBe(false);
356
- expect(result1).not.toBe(result2);
357
- });
358
- });
359
-
360
- describe('Edge cases', () => {
361
- it('should handle undefined state gracefully', () => {
362
- const selector = makeSelectMobilePushNew();
363
- const undefinedState = fromJS({});
364
- const result = selector(undefinedState);
365
-
366
- expect(result).toEqual({});
367
- });
368
-
369
- it('should handle state with mobilePushNew as null', () => {
370
- const stateWithNullMobilePushNew = fromJS({
371
- mobilePushNew: null,
372
- });
373
-
374
- const selector = makeSelectUploadedAssetData();
375
- const result = selector(stateWithNullMobilePushNew);
376
-
377
- expect(result).toEqual({});
378
- });
379
-
380
- it('should handle deeply nested state access', () => {
381
- const complexState = fromJS({
382
- level1: {
383
- level2: {
384
- mobilePushNew: mockMobilePushNewState,
385
- },
386
- },
387
- });
388
-
389
- // This should return defaults since mobilePushNew is not at root level
390
- const selector = makeSelectUploadAssetSuccess();
391
- const result = selector(complexState);
392
-
393
- expect(result).toBe(false);
394
- });
395
- });
396
-
397
- describe('Multiple selector usage', () => {
398
- it('should work correctly when multiple selectors are used on same state', () => {
399
- const successSelector = makeSelectUploadAssetSuccess();
400
- const uploadingSelector = makeSelectAssetUploading();
401
- const errorSelector = makeSelectCreateError();
402
-
403
- const successResult = successSelector(mockStateWithMobilePushNew);
404
- const uploadingResult = uploadingSelector(mockStateWithMobilePushNew);
405
- const errorResult = errorSelector(mockStateWithMobilePushNew);
406
-
407
- expect(successResult).toBe(true);
408
- expect(uploadingResult).toBe(true);
409
- expect(errorResult).toBe('Test error message');
410
- });
411
-
412
- it('should maintain independent results across different selectors', () => {
413
- const assetDataSelector = makeSelectUploadedAssetData();
414
- const progressSelector = makeSelectGetTemplateDetailsInProgress();
415
-
416
- const assetDataResult = assetDataSelector(mockStateWithPartialMobilePushNew);
417
- const progressResult = progressSelector(mockStateWithPartialMobilePushNew);
418
-
419
- // Check that assetDataResult is an Immutable object with the expected values
420
- expect(assetDataResult.get('id')).toBe(2);
421
- expect(assetDataResult.get('name')).toBe('test-asset');
422
- expect(progressResult).toBe(false);
423
- });
424
- });
425
- });