@capillarytech/creatives-library 8.0.255-alpha.4 → 8.0.256

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 (164) hide show
  1. package/constants/unified.js +0 -1
  2. package/package.json +1 -1
  3. package/services/api.js +0 -5
  4. package/translations/en.json +3 -4
  5. package/utils/common.js +0 -6
  6. package/utils/tests/transformerUtils.test.js +0 -297
  7. package/utils/transformerUtils.js +0 -40
  8. package/v2Components/CapImageUpload/constants.js +0 -2
  9. package/v2Components/CapImageUpload/index.js +16 -65
  10. package/v2Components/CapImageUpload/index.scss +1 -4
  11. package/v2Components/CapImageUpload/messages.js +1 -5
  12. package/v2Components/CommonTestAndPreview/UnifiedPreview/InAppPreviewContent.js +3 -3
  13. package/v2Components/CommonTestAndPreview/UnifiedPreview/RcsPreviewContent.js +3 -3
  14. package/v2Components/CommonTestAndPreview/UnifiedPreview/SmsPreviewContent.js +3 -3
  15. package/v2Components/CommonTestAndPreview/UnifiedPreview/ViberPreviewContent.js +3 -3
  16. package/v2Components/CommonTestAndPreview/UnifiedPreview/WhatsAppPreviewContent.js +1 -1
  17. package/v2Components/CommonTestAndPreview/UnifiedPreview/_unifiedPreview.scss +37 -6
  18. package/v2Components/CommonTestAndPreview/_commonTestAndPreview.scss +0 -2
  19. package/v2Components/TemplatePreview/_templatePreview.scss +1 -2
  20. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +0 -1
  21. package/v2Containers/App/constants.js +0 -5
  22. package/v2Containers/Cap/tests/__snapshots__/index.test.js.snap +3 -4
  23. package/v2Containers/CreativesContainer/SlideBoxContent.js +2 -57
  24. package/v2Containers/CreativesContainer/SlideBoxHeader.js +0 -1
  25. package/v2Containers/CreativesContainer/constants.js +0 -3
  26. package/v2Containers/CreativesContainer/index.js +0 -168
  27. package/v2Containers/CreativesContainer/messages.js +0 -4
  28. package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +0 -210
  29. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +0 -304
  30. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +12 -36
  31. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +6 -8
  32. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +75 -100
  33. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +54 -72
  34. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +214 -286
  35. package/v2Containers/SmsTrai/Create/tests/__snapshots__/index.test.js.snap +12 -16
  36. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +48 -60
  37. package/v2Containers/Templates/ChannelTypeIllustration.js +1 -13
  38. package/v2Containers/Templates/_templates.scss +0 -205
  39. package/v2Containers/Templates/actions.js +1 -2
  40. package/v2Containers/Templates/constants.js +0 -1
  41. package/v2Containers/Templates/index.js +34 -274
  42. package/v2Containers/Templates/messages.js +0 -24
  43. package/v2Containers/Templates/reducer.js +0 -2
  44. package/v2Containers/Templates/tests/index.test.js +0 -10
  45. package/v2Containers/TemplatesV2/index.js +7 -15
  46. package/v2Containers/TemplatesV2/messages.js +0 -4
  47. package/v2Containers/Whatsapp/index.js +1 -1
  48. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +870 -1442
  49. package/utils/imageUrlUpload.js +0 -141
  50. package/v2Components/CapImageUrlUpload/constants.js +0 -26
  51. package/v2Components/CapImageUrlUpload/index.js +0 -365
  52. package/v2Components/CapImageUrlUpload/index.scss +0 -35
  53. package/v2Components/CapImageUrlUpload/messages.js +0 -47
  54. package/v2Containers/WebPush/Create/components/BrandIconSection.js +0 -108
  55. package/v2Containers/WebPush/Create/components/ButtonForm.js +0 -172
  56. package/v2Containers/WebPush/Create/components/ButtonItem.js +0 -101
  57. package/v2Containers/WebPush/Create/components/ButtonList.js +0 -145
  58. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.js +0 -164
  59. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.test.js +0 -463
  60. package/v2Containers/WebPush/Create/components/FormActions.js +0 -54
  61. package/v2Containers/WebPush/Create/components/FormActions.test.js +0 -163
  62. package/v2Containers/WebPush/Create/components/MediaSection.js +0 -142
  63. package/v2Containers/WebPush/Create/components/MediaSection.test.js +0 -341
  64. package/v2Containers/WebPush/Create/components/MessageSection.js +0 -103
  65. package/v2Containers/WebPush/Create/components/MessageSection.test.js +0 -268
  66. package/v2Containers/WebPush/Create/components/NotificationTitleSection.js +0 -87
  67. package/v2Containers/WebPush/Create/components/NotificationTitleSection.test.js +0 -210
  68. package/v2Containers/WebPush/Create/components/TemplateNameSection.js +0 -54
  69. package/v2Containers/WebPush/Create/components/TemplateNameSection.test.js +0 -143
  70. package/v2Containers/WebPush/Create/components/__snapshots__/ButtonsLinksSection.test.js.snap +0 -86
  71. package/v2Containers/WebPush/Create/components/__snapshots__/FormActions.test.js.snap +0 -16
  72. package/v2Containers/WebPush/Create/components/__snapshots__/MediaSection.test.js.snap +0 -41
  73. package/v2Containers/WebPush/Create/components/__snapshots__/MessageSection.test.js.snap +0 -54
  74. package/v2Containers/WebPush/Create/components/__snapshots__/NotificationTitleSection.test.js.snap +0 -37
  75. package/v2Containers/WebPush/Create/components/__snapshots__/TemplateNameSection.test.js.snap +0 -21
  76. package/v2Containers/WebPush/Create/components/_buttons.scss +0 -246
  77. package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +0 -554
  78. package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +0 -607
  79. package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +0 -633
  80. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +0 -666
  81. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +0 -74
  82. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +0 -78
  83. package/v2Containers/WebPush/Create/hooks/useButtonManagement.js +0 -138
  84. package/v2Containers/WebPush/Create/hooks/useButtonManagement.test.js +0 -406
  85. package/v2Containers/WebPush/Create/hooks/useCharacterCount.js +0 -30
  86. package/v2Containers/WebPush/Create/hooks/useCharacterCount.test.js +0 -151
  87. package/v2Containers/WebPush/Create/hooks/useImageUpload.js +0 -104
  88. package/v2Containers/WebPush/Create/hooks/useImageUpload.test.js +0 -538
  89. package/v2Containers/WebPush/Create/hooks/useTagManagement.js +0 -122
  90. package/v2Containers/WebPush/Create/hooks/useTagManagement.test.js +0 -633
  91. package/v2Containers/WebPush/Create/index.js +0 -1148
  92. package/v2Containers/WebPush/Create/index.scss +0 -134
  93. package/v2Containers/WebPush/Create/messages.js +0 -203
  94. package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +0 -228
  95. package/v2Containers/WebPush/Create/preview/NotificationContainer.js +0 -294
  96. package/v2Containers/WebPush/Create/preview/PreviewContent.js +0 -90
  97. package/v2Containers/WebPush/Create/preview/PreviewControls.js +0 -305
  98. package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +0 -23
  99. package/v2Containers/WebPush/Create/preview/WebPushPreview.js +0 -155
  100. package/v2Containers/WebPush/Create/preview/assets/Light.svg +0 -53
  101. package/v2Containers/WebPush/Create/preview/assets/Top.svg +0 -5
  102. package/v2Containers/WebPush/Create/preview/assets/android-arrow-down.svg +0 -9
  103. package/v2Containers/WebPush/Create/preview/assets/android-arrow-up.svg +0 -9
  104. package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
  105. package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
  106. package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +0 -106
  107. package/v2Containers/WebPush/Create/preview/assets/iOS.svg +0 -26
  108. package/v2Containers/WebPush/Create/preview/assets/macos-arrow-down-icon.svg +0 -9
  109. package/v2Containers/WebPush/Create/preview/assets/macos-triple-dot-icon.svg +0 -9
  110. package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +0 -18
  111. package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +0 -29
  112. package/v2Containers/WebPush/Create/preview/assets/windows-close-icon.svg +0 -9
  113. package/v2Containers/WebPush/Create/preview/assets/windows-triple-dot-icon.svg +0 -9
  114. package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +0 -47
  115. package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +0 -141
  116. package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +0 -45
  117. package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +0 -68
  118. package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +0 -61
  119. package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +0 -99
  120. package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +0 -733
  121. package/v2Containers/WebPush/Create/preview/components/tests/WindowsChromeExpanded.test.js +0 -571
  122. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +0 -81
  123. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/WindowsChromeExpanded.test.js.snap +0 -81
  124. package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +0 -50
  125. package/v2Containers/WebPush/Create/preview/constants.js +0 -637
  126. package/v2Containers/WebPush/Create/preview/notification-container.scss +0 -79
  127. package/v2Containers/WebPush/Create/preview/preview.scss +0 -351
  128. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +0 -370
  129. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +0 -12
  130. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +0 -12
  131. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +0 -12
  132. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +0 -47
  133. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +0 -11
  134. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +0 -11
  135. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +0 -11
  136. package/v2Containers/WebPush/Create/preview/styles/_base.scss +0 -207
  137. package/v2Containers/WebPush/Create/preview/styles/_ios.scss +0 -153
  138. package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +0 -107
  139. package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +0 -101
  140. package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +0 -229
  141. package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +0 -909
  142. package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +0 -1081
  143. package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +0 -723
  144. package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +0 -1327
  145. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +0 -131
  146. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +0 -112
  147. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +0 -144
  148. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +0 -129
  149. package/v2Containers/WebPush/Create/utils/payloadBuilder.js +0 -96
  150. package/v2Containers/WebPush/Create/utils/payloadBuilder.test.js +0 -396
  151. package/v2Containers/WebPush/Create/utils/previewUtils.js +0 -89
  152. package/v2Containers/WebPush/Create/utils/urlValidation.js +0 -115
  153. package/v2Containers/WebPush/Create/utils/urlValidation.test.js +0 -449
  154. package/v2Containers/WebPush/Create/utils/validation.js +0 -75
  155. package/v2Containers/WebPush/Create/utils/validation.test.js +0 -283
  156. package/v2Containers/WebPush/actions.js +0 -60
  157. package/v2Containers/WebPush/constants.js +0 -132
  158. package/v2Containers/WebPush/index.js +0 -2
  159. package/v2Containers/WebPush/reducer.js +0 -104
  160. package/v2Containers/WebPush/sagas.js +0 -119
  161. package/v2Containers/WebPush/selectors.js +0 -65
  162. package/v2Containers/WebPush/tests/reducer.test.js +0 -863
  163. package/v2Containers/WebPush/tests/sagas.test.js +0 -566
  164. package/v2Containers/WebPush/tests/selectors.test.js +0 -960
@@ -1,633 +0,0 @@
1
- import { renderHook } from '@testing-library/react';
2
- import { act } from 'react';
3
- import { useTagManagement } from './useTagManagement';
4
- import { TAG, EMBEDDED, DEFAULT, FULL, ALL, LIBRARY } from '../../../Whatsapp/constants';
5
- import { SMS } from '../../../CreativesContainer/constants';
6
-
7
- describe('useTagManagement', () => {
8
- const mockFetchSchemaForEntity = jest.fn();
9
- const mockGlobalActions = {
10
- fetchSchemaForEntity: mockFetchSchemaForEntity,
11
- };
12
-
13
- const defaultLocation = {
14
- query: {
15
- type: '',
16
- module: '',
17
- },
18
- };
19
-
20
- const defaultMetaEntities = {
21
- tags: {
22
- standard: [
23
- { id: 1, name: 'Tag 1' },
24
- { id: 2, name: 'Tag 2' },
25
- ],
26
- },
27
- };
28
-
29
- beforeEach(() => {
30
- jest.clearAllMocks();
31
- });
32
-
33
- describe('Initialization', () => {
34
- it('should initialize with empty tags array', () => {
35
- const { result } = renderHook(() =>
36
- useTagManagement({
37
- location: defaultLocation,
38
- globalActions: mockGlobalActions,
39
- metaEntities: null,
40
- })
41
- );
42
-
43
- expect(result.current.tags).toEqual([]);
44
- });
45
-
46
- it('should initialize with tags from metaEntities', () => {
47
- const { result } = renderHook(() =>
48
- useTagManagement({
49
- location: defaultLocation,
50
- globalActions: mockGlobalActions,
51
- metaEntities: defaultMetaEntities,
52
- })
53
- );
54
-
55
- expect(result.current.tags).toEqual(defaultMetaEntities.tags.standard);
56
- });
57
- });
58
-
59
- describe('Tag Fetching', () => {
60
- it('should fetch tags on mount with default context', () => {
61
- renderHook(() =>
62
- useTagManagement({
63
- location: defaultLocation,
64
- globalActions: mockGlobalActions,
65
- metaEntities: null,
66
- })
67
- );
68
-
69
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
70
- layout: SMS,
71
- type: TAG,
72
- context: DEFAULT,
73
- embedded: FULL,
74
- });
75
- });
76
-
77
- it('should fetch tags with embedded context when type is EMBEDDED', () => {
78
- const location = {
79
- query: {
80
- type: EMBEDDED,
81
- module: 'test-module',
82
- },
83
- };
84
-
85
- renderHook(() =>
86
- useTagManagement({
87
- location,
88
- globalActions: mockGlobalActions,
89
- metaEntities: null,
90
- })
91
- );
92
-
93
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
94
- layout: SMS,
95
- type: TAG,
96
- context: 'test-module',
97
- embedded: EMBEDDED,
98
- });
99
- });
100
-
101
- it('should use getDefaultTags as context when provided', () => {
102
- const getDefaultTags = 'custom-context';
103
-
104
- renderHook(() =>
105
- useTagManagement({
106
- location: defaultLocation,
107
- globalActions: mockGlobalActions,
108
- metaEntities: null,
109
- getDefaultTags,
110
- })
111
- );
112
-
113
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
114
- layout: SMS,
115
- type: TAG,
116
- context: 'custom-context',
117
- embedded: FULL,
118
- });
119
- });
120
-
121
- it('should not fetch if globalActions.fetchSchemaForEntity is missing', () => {
122
- renderHook(() =>
123
- useTagManagement({
124
- location: defaultLocation,
125
- globalActions: {},
126
- metaEntities: null,
127
- })
128
- );
129
-
130
- expect(mockFetchSchemaForEntity).not.toHaveBeenCalled();
131
- });
132
-
133
- it('should not fetch again if tagFetchKey has not changed', () => {
134
- const { rerender } = renderHook(
135
- ({ location, globalActions }) =>
136
- useTagManagement({
137
- location,
138
- globalActions,
139
- metaEntities: null,
140
- }),
141
- {
142
- initialProps: {
143
- location: defaultLocation,
144
- globalActions: mockGlobalActions,
145
- },
146
- }
147
- );
148
-
149
- expect(mockFetchSchemaForEntity).toHaveBeenCalledTimes(1);
150
-
151
- rerender({
152
- location: defaultLocation,
153
- globalActions: mockGlobalActions,
154
- });
155
-
156
- expect(mockFetchSchemaForEntity).toHaveBeenCalledTimes(1);
157
- });
158
-
159
- it('should fetch again when location type changes', () => {
160
- const { rerender } = renderHook(
161
- ({ location, globalActions }) =>
162
- useTagManagement({
163
- location,
164
- globalActions: mockGlobalActions,
165
- metaEntities: null,
166
- }),
167
- {
168
- initialProps: {
169
- location: defaultLocation,
170
- globalActions: mockGlobalActions,
171
- },
172
- }
173
- );
174
-
175
- expect(mockFetchSchemaForEntity).toHaveBeenCalledTimes(1);
176
-
177
- const newLocation = {
178
- query: {
179
- type: EMBEDDED,
180
- module: 'test',
181
- },
182
- };
183
-
184
- rerender({
185
- location: newLocation,
186
- globalActions: mockGlobalActions,
187
- });
188
-
189
- expect(mockFetchSchemaForEntity).toHaveBeenCalledTimes(2);
190
- });
191
-
192
- it('should fetch again when getDefaultTags changes', () => {
193
- const { rerender } = renderHook(
194
- ({ getDefaultTags, globalActions }) =>
195
- useTagManagement({
196
- location: defaultLocation,
197
- globalActions,
198
- metaEntities: null,
199
- getDefaultTags,
200
- }),
201
- {
202
- initialProps: {
203
- getDefaultTags: 'context1',
204
- globalActions: mockGlobalActions,
205
- },
206
- }
207
- );
208
-
209
- expect(mockFetchSchemaForEntity).toHaveBeenCalledTimes(1);
210
-
211
- rerender({
212
- getDefaultTags: 'context2',
213
- globalActions: mockGlobalActions,
214
- });
215
-
216
- expect(mockFetchSchemaForEntity).toHaveBeenCalledTimes(2);
217
- });
218
- });
219
-
220
- describe('Tag Updates from metaEntities', () => {
221
- it('should update tags when metaEntities changes', () => {
222
- const { result, rerender } = renderHook(
223
- ({ metaEntities }) =>
224
- useTagManagement({
225
- location: defaultLocation,
226
- globalActions: mockGlobalActions,
227
- metaEntities,
228
- }),
229
- {
230
- initialProps: {
231
- metaEntities: null,
232
- },
233
- }
234
- );
235
-
236
- expect(result.current.tags).toEqual([]);
237
-
238
- rerender({ metaEntities: defaultMetaEntities });
239
-
240
- expect(result.current.tags).toEqual(defaultMetaEntities.tags.standard);
241
- });
242
-
243
- it('should use supportedTags when embedded in library mode without getDefaultTags', () => {
244
- // Define supportedTags outside to maintain stable reference
245
- const supportedTagsArray = [
246
- { id: 3, name: 'Supported Tag 1' },
247
- { id: 4, name: 'Supported Tag 2' },
248
- ];
249
-
250
- const location = {
251
- query: {
252
- type: EMBEDDED,
253
- module: LIBRARY,
254
- },
255
- };
256
-
257
- const { result } = renderHook(
258
- ({ supportedTags }) =>
259
- useTagManagement({
260
- location,
261
- globalActions: mockGlobalActions,
262
- metaEntities: defaultMetaEntities,
263
- supportedTags,
264
- }),
265
- {
266
- initialProps: {
267
- supportedTags: supportedTagsArray,
268
- },
269
- }
270
- );
271
-
272
- expect(result.current.tags).toEqual(supportedTagsArray);
273
- });
274
-
275
- it('should use metaEntities tags when embedded in library mode with getDefaultTags', () => {
276
- // Define supportedTags outside to maintain stable reference
277
- const supportedTagsArray = [
278
- { id: 3, name: 'Supported Tag 1' },
279
- ];
280
-
281
- const location = {
282
- query: {
283
- type: EMBEDDED,
284
- module: LIBRARY,
285
- },
286
- };
287
-
288
- const { result } = renderHook(
289
- ({ supportedTags }) =>
290
- useTagManagement({
291
- location,
292
- globalActions: mockGlobalActions,
293
- metaEntities: defaultMetaEntities,
294
- supportedTags,
295
- getDefaultTags: 'custom',
296
- }),
297
- {
298
- initialProps: {
299
- supportedTags: supportedTagsArray,
300
- },
301
- }
302
- );
303
-
304
- expect(result.current.tags).toEqual(defaultMetaEntities.tags.standard);
305
- });
306
-
307
- it('should handle empty metaEntities.tags.standard', () => {
308
- const emptyMetaEntities = {
309
- tags: {
310
- standard: [],
311
- },
312
- };
313
-
314
- const { result } = renderHook(() =>
315
- useTagManagement({
316
- location: defaultLocation,
317
- globalActions: mockGlobalActions,
318
- metaEntities: emptyMetaEntities,
319
- })
320
- );
321
-
322
- expect(result.current.tags).toEqual([]);
323
- });
324
-
325
- it('should handle missing metaEntities.tags.standard', () => {
326
- const metaEntitiesWithoutTags = {
327
- tags: {},
328
- };
329
-
330
- const { result } = renderHook(() =>
331
- useTagManagement({
332
- location: defaultLocation,
333
- globalActions: mockGlobalActions,
334
- metaEntities: metaEntitiesWithoutTags,
335
- })
336
- );
337
-
338
- expect(result.current.tags).toEqual([]);
339
- });
340
-
341
- it('should handle null metaEntities', () => {
342
- const { result } = renderHook(() =>
343
- useTagManagement({
344
- location: defaultLocation,
345
- globalActions: mockGlobalActions,
346
- metaEntities: null,
347
- })
348
- );
349
-
350
- expect(result.current.tags).toEqual([]);
351
- });
352
- });
353
-
354
- describe('handleOnTagsContextChange', () => {
355
- it('should fetch tags with new context', () => {
356
- const { result } = renderHook(() =>
357
- useTagManagement({
358
- location: defaultLocation,
359
- globalActions: mockGlobalActions,
360
- metaEntities: defaultMetaEntities,
361
- })
362
- );
363
-
364
- act(() => {
365
- result.current.handleOnTagsContextChange('new-context');
366
- });
367
-
368
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
369
- layout: SMS,
370
- type: TAG,
371
- context: 'new-context',
372
- embedded: FULL,
373
- });
374
- });
375
-
376
- it('should use DEFAULT context when data is ALL', () => {
377
- const { result } = renderHook(() =>
378
- useTagManagement({
379
- location: defaultLocation,
380
- globalActions: mockGlobalActions,
381
- metaEntities: defaultMetaEntities,
382
- })
383
- );
384
-
385
- act(() => {
386
- result.current.handleOnTagsContextChange(ALL);
387
- });
388
-
389
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
390
- layout: SMS,
391
- type: TAG,
392
- context: DEFAULT,
393
- embedded: FULL,
394
- });
395
- });
396
-
397
- it('should use DEFAULT context when data is "all" (case insensitive)', () => {
398
- const { result } = renderHook(() =>
399
- useTagManagement({
400
- location: defaultLocation,
401
- globalActions: mockGlobalActions,
402
- metaEntities: defaultMetaEntities,
403
- })
404
- );
405
-
406
- act(() => {
407
- result.current.handleOnTagsContextChange('ALL');
408
- });
409
-
410
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
411
- layout: SMS,
412
- type: TAG,
413
- context: DEFAULT,
414
- embedded: FULL,
415
- });
416
- });
417
-
418
- it('should use embedded context when location type is EMBEDDED', () => {
419
- const location = {
420
- query: {
421
- type: EMBEDDED,
422
- module: 'test-module',
423
- },
424
- };
425
-
426
- const { result } = renderHook(() =>
427
- useTagManagement({
428
- location,
429
- globalActions: mockGlobalActions,
430
- metaEntities: defaultMetaEntities,
431
- })
432
- );
433
-
434
- act(() => {
435
- result.current.handleOnTagsContextChange('new-context');
436
- });
437
-
438
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
439
- layout: SMS,
440
- type: TAG,
441
- context: 'new-context',
442
- embedded: EMBEDDED,
443
- });
444
- });
445
-
446
- it('should use getDefaultTags as context when provided', () => {
447
- const getDefaultTags = 'custom-context';
448
-
449
- const { result } = renderHook(() =>
450
- useTagManagement({
451
- location: defaultLocation,
452
- globalActions: mockGlobalActions,
453
- metaEntities: defaultMetaEntities,
454
- getDefaultTags,
455
- })
456
- );
457
-
458
- act(() => {
459
- result.current.handleOnTagsContextChange('new-context');
460
- });
461
-
462
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
463
- layout: SMS,
464
- type: TAG,
465
- context: 'custom-context',
466
- embedded: FULL,
467
- });
468
- });
469
-
470
- it('should handle null data', () => {
471
- const { result } = renderHook(() =>
472
- useTagManagement({
473
- location: defaultLocation,
474
- globalActions: mockGlobalActions,
475
- metaEntities: defaultMetaEntities,
476
- })
477
- );
478
-
479
- act(() => {
480
- result.current.handleOnTagsContextChange(null);
481
- });
482
-
483
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
484
- layout: SMS,
485
- type: TAG,
486
- context: DEFAULT,
487
- embedded: FULL,
488
- });
489
- });
490
-
491
- it('should handle empty string data', () => {
492
- const { result } = renderHook(() =>
493
- useTagManagement({
494
- location: defaultLocation,
495
- globalActions: mockGlobalActions,
496
- metaEntities: defaultMetaEntities,
497
- })
498
- );
499
-
500
- act(() => {
501
- result.current.handleOnTagsContextChange('');
502
- });
503
-
504
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
505
- layout: SMS,
506
- type: TAG,
507
- context: DEFAULT,
508
- embedded: FULL,
509
- });
510
- });
511
-
512
- it('should not throw when globalActions is missing', () => {
513
- const { result } = renderHook(() =>
514
- useTagManagement({
515
- location: defaultLocation,
516
- globalActions: {},
517
- metaEntities: defaultMetaEntities,
518
- })
519
- );
520
-
521
- expect(() => {
522
- act(() => {
523
- result.current.handleOnTagsContextChange('context');
524
- });
525
- }).not.toThrow();
526
- });
527
- });
528
-
529
- describe('validationConfig', () => {
530
- it('should return validation config with tags', () => {
531
- const injectedTags = [{ id: 5, name: 'Injected Tag' }];
532
- const eventContextTags = [{ id: 6, name: 'Event Tag' }];
533
-
534
- const { result } = renderHook(() =>
535
- useTagManagement({
536
- location: defaultLocation,
537
- globalActions: mockGlobalActions,
538
- metaEntities: defaultMetaEntities,
539
- injectedTags,
540
- eventContextTags,
541
- getDefaultTags: 'custom',
542
- })
543
- );
544
-
545
- expect(result.current.validationConfig).toEqual({
546
- tagsParam: defaultMetaEntities.tags.standard,
547
- injectedTagsParams: injectedTags,
548
- location: defaultLocation,
549
- tagModule: 'custom',
550
- eventContextTags,
551
- });
552
- });
553
-
554
- it('should update validation config when tags change', () => {
555
- const { result, rerender } = renderHook(
556
- ({ metaEntities }) =>
557
- useTagManagement({
558
- location: defaultLocation,
559
- globalActions: mockGlobalActions,
560
- metaEntities,
561
- }),
562
- {
563
- initialProps: {
564
- metaEntities: defaultMetaEntities,
565
- },
566
- }
567
- );
568
-
569
- const firstConfig = result.current.validationConfig;
570
-
571
- const newMetaEntities = {
572
- tags: {
573
- standard: [{ id: 7, name: 'New Tag' }],
574
- },
575
- };
576
-
577
- rerender({ metaEntities: newMetaEntities });
578
-
579
- expect(result.current.validationConfig.tagsParam).toEqual(newMetaEntities.tags.standard);
580
- expect(result.current.validationConfig).not.toBe(firstConfig);
581
- });
582
-
583
- it('should memoize validation config when dependencies do not change', () => {
584
- const { result, rerender } = renderHook(
585
- ({ metaEntities }) =>
586
- useTagManagement({
587
- location: defaultLocation,
588
- globalActions: mockGlobalActions,
589
- metaEntities,
590
- }),
591
- {
592
- initialProps: {
593
- metaEntities: defaultMetaEntities,
594
- },
595
- }
596
- );
597
-
598
- const firstConfig = result.current.validationConfig;
599
-
600
- rerender({ metaEntities: defaultMetaEntities });
601
-
602
- // Verify memoization by checking reference equality
603
- expect(result.current.validationConfig).toBe(firstConfig);
604
- });
605
- });
606
-
607
- describe('Edge Cases', () => {
608
- it('should handle location without query', () => {
609
- const { result } = renderHook(() =>
610
- useTagManagement({
611
- location: {},
612
- globalActions: mockGlobalActions,
613
- metaEntities: defaultMetaEntities,
614
- })
615
- );
616
-
617
- expect(result.current.tags).toEqual(defaultMetaEntities.tags.standard);
618
- });
619
-
620
- it('should handle location as null', () => {
621
- const { result } = renderHook(() =>
622
- useTagManagement({
623
- location: null,
624
- globalActions: mockGlobalActions,
625
- metaEntities: defaultMetaEntities,
626
- })
627
- );
628
-
629
- expect(result.current.tags).toEqual(defaultMetaEntities.tags.standard);
630
- });
631
- });
632
- });
633
-