@capillarytech/creatives-library 8.0.239-alpha.0 → 8.0.239

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 (110) hide show
  1. package/package.json +1 -1
  2. package/services/api.js +0 -5
  3. package/translations/en.json +0 -1
  4. package/utils/transformerUtils.js +0 -42
  5. package/v2Components/CapImageUpload/constants.js +0 -2
  6. package/v2Components/CapImageUpload/index.js +14 -54
  7. package/v2Components/CapImageUpload/index.scss +1 -4
  8. package/v2Components/CapImageUpload/messages.js +0 -4
  9. package/v2Containers/App/constants.js +0 -5
  10. package/v2Containers/Cap/tests/__snapshots__/index.test.js.snap +0 -1
  11. package/v2Containers/CreativesContainer/SlideBoxContent.js +2 -57
  12. package/v2Containers/CreativesContainer/SlideBoxHeader.js +0 -1
  13. package/v2Containers/CreativesContainer/constants.js +0 -2
  14. package/v2Containers/CreativesContainer/index.js +0 -152
  15. package/v2Containers/CreativesContainer/messages.js +0 -4
  16. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +0 -3
  17. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +0 -2
  18. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +0 -25
  19. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +0 -18
  20. package/v2Containers/Rcs/index.js +153 -383
  21. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +0 -46
  22. package/v2Containers/Rcs/tests/index.test.js +168 -0
  23. package/v2Containers/SmsTrai/Create/tests/__snapshots__/index.test.js.snap +0 -4
  24. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +0 -8
  25. package/v2Containers/Templates/ChannelTypeIllustration.js +1 -13
  26. package/v2Containers/Templates/_templates.scss +0 -203
  27. package/v2Containers/Templates/actions.js +1 -2
  28. package/v2Containers/Templates/constants.js +0 -1
  29. package/v2Containers/Templates/index.js +30 -273
  30. package/v2Containers/Templates/messages.js +0 -24
  31. package/v2Containers/Templates/reducer.js +0 -2
  32. package/v2Containers/Templates/tests/index.test.js +0 -10
  33. package/v2Containers/TemplatesV2/index.js +2 -3
  34. package/v2Containers/TemplatesV2/messages.js +0 -4
  35. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +0 -132
  36. package/v2Components/CapImageUrlUpload/constants.js +0 -19
  37. package/v2Components/CapImageUrlUpload/index.js +0 -455
  38. package/v2Components/CapImageUrlUpload/index.scss +0 -35
  39. package/v2Components/CapImageUrlUpload/messages.js +0 -47
  40. package/v2Containers/WebPush/Create/components/ButtonForm.js +0 -175
  41. package/v2Containers/WebPush/Create/components/ButtonItem.js +0 -101
  42. package/v2Containers/WebPush/Create/components/ButtonList.js +0 -144
  43. package/v2Containers/WebPush/Create/components/_buttons.scss +0 -246
  44. package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +0 -554
  45. package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +0 -607
  46. package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +0 -633
  47. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +0 -666
  48. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +0 -74
  49. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +0 -80
  50. package/v2Containers/WebPush/Create/index.js +0 -1727
  51. package/v2Containers/WebPush/Create/index.scss +0 -123
  52. package/v2Containers/WebPush/Create/messages.js +0 -199
  53. package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +0 -241
  54. package/v2Containers/WebPush/Create/preview/NotificationContainer.js +0 -290
  55. package/v2Containers/WebPush/Create/preview/PreviewContent.js +0 -81
  56. package/v2Containers/WebPush/Create/preview/PreviewControls.js +0 -240
  57. package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +0 -23
  58. package/v2Containers/WebPush/Create/preview/WebPushPreview.js +0 -139
  59. package/v2Containers/WebPush/Create/preview/assets/Light.svg +0 -53
  60. package/v2Containers/WebPush/Create/preview/assets/Top.svg +0 -5
  61. package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
  62. package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
  63. package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +0 -106
  64. package/v2Containers/WebPush/Create/preview/assets/iOS.svg +0 -26
  65. package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +0 -18
  66. package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +0 -29
  67. package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +0 -44
  68. package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +0 -110
  69. package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +0 -45
  70. package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +0 -72
  71. package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +0 -55
  72. package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +0 -70
  73. package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +0 -512
  74. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +0 -77
  75. package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +0 -527
  76. package/v2Containers/WebPush/Create/preview/constants.js +0 -162
  77. package/v2Containers/WebPush/Create/preview/notification-container.scss +0 -104
  78. package/v2Containers/WebPush/Create/preview/preview.scss +0 -409
  79. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +0 -300
  80. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +0 -12
  81. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +0 -12
  82. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +0 -12
  83. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +0 -303
  84. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +0 -11
  85. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +0 -11
  86. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +0 -11
  87. package/v2Containers/WebPush/Create/preview/styles/_base.scss +0 -188
  88. package/v2Containers/WebPush/Create/preview/styles/_ios.scss +0 -106
  89. package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +0 -107
  90. package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +0 -75
  91. package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +0 -174
  92. package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +0 -909
  93. package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +0 -1077
  94. package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +0 -723
  95. package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +0 -943
  96. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +0 -128
  97. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +0 -121
  98. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +0 -144
  99. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +0 -127
  100. package/v2Containers/WebPush/Create/utils/urlValidation.js +0 -116
  101. package/v2Containers/WebPush/Create/utils/urlValidation.test.js +0 -449
  102. package/v2Containers/WebPush/actions.js +0 -60
  103. package/v2Containers/WebPush/constants.js +0 -108
  104. package/v2Containers/WebPush/index.js +0 -2
  105. package/v2Containers/WebPush/reducer.js +0 -104
  106. package/v2Containers/WebPush/sagas.js +0 -119
  107. package/v2Containers/WebPush/selectors.js +0 -65
  108. package/v2Containers/WebPush/tests/reducer.test.js +0 -863
  109. package/v2Containers/WebPush/tests/sagas.test.js +0 -566
  110. package/v2Containers/WebPush/tests/selectors.test.js +0 -843
@@ -1,512 +0,0 @@
1
- import React from 'react';
2
- import { shallowWithIntl, mountWithIntl } from '../../../../../../helpers/intl-enzym-test-helpers';
3
- import AndroidMobileExpanded from '../AndroidMobileExpanded';
4
-
5
- describe('AndroidMobileExpanded', () => {
6
- const defaultProps = {
7
- icon: 'https://example.com/chrome-icon.png',
8
- selectedBrowser: 'Chrome',
9
- notificationTitle: 'Test Notification Title',
10
- notificationBody: 'Test notification body text that can be quite long and should be truncated after 4 lines',
11
- displayUrl: 'example.com',
12
- brandIcon: 'https://example.com/brand-icon.png',
13
- shouldShowBrandIcon: false,
14
- shouldShowBrandIconExpanded: false,
15
- mediaImageUrl: '',
16
- };
17
-
18
- beforeEach(() => {
19
- jest.clearAllMocks();
20
- });
21
-
22
- describe('Basic Rendering', () => {
23
- it('should render correctly with default props', () => {
24
- const wrapper = shallowWithIntl(<AndroidMobileExpanded {...defaultProps} />);
25
- expect(wrapper).toMatchSnapshot();
26
- });
27
-
28
- it('should render all required elements', () => {
29
- const wrapper = mountWithIntl(<AndroidMobileExpanded {...defaultProps} />);
30
-
31
- // Browser icon container
32
- expect(wrapper.find('.android-mobile-expanded-icon').exists()).toBe(true);
33
- expect(wrapper.find('.notification-icon-container').exists()).toBe(true);
34
- expect(wrapper.find('.notification-icon').exists()).toBe(true);
35
-
36
- // Wrapper container
37
- expect(wrapper.find('.android-mobile-expanded-wrapper').exists()).toBe(true);
38
-
39
- // Top section
40
- expect(wrapper.find('.android-mobile-expanded-top').exists()).toBe(true);
41
- expect(wrapper.find('.android-mobile-expanded-top-content').exists()).toBe(true);
42
-
43
- // Header
44
- expect(wrapper.find('.android-mobile-expanded-header').exists()).toBe(true);
45
- expect(wrapper.find('.android-mobile-expanded-header-content').exists()).toBe(true);
46
- expect(wrapper.find('.android-mobile-expanded-browser-name').exists()).toBe(true);
47
- expect(wrapper.find('.android-mobile-expanded-domain-time').exists()).toBe(true);
48
- expect(wrapper.find('.android-mobile-expanded-domain').exists()).toBe(true);
49
- expect(wrapper.find('.android-mobile-expanded-time').exists()).toBe(true);
50
-
51
- // Title
52
- expect(wrapper.find('.android-mobile-expanded-title').exists()).toBe(true);
53
-
54
- // Body
55
- expect(wrapper.find('.android-mobile-expanded-body').exists()).toBe(true);
56
- expect(wrapper.find('.android-mobile-expanded-body-text').exists()).toBe(true);
57
-
58
- // Arrow
59
- expect(wrapper.find('.notification-action-arrow.android-mobile-expanded-arrow').exists()).toBe(true);
60
- });
61
-
62
- it('should render browser icon with correct src and alt', () => {
63
- const wrapper = mountWithIntl(<AndroidMobileExpanded {...defaultProps} />);
64
- const icon = wrapper.find('.notification-icon');
65
-
66
- expect(icon.exists()).toBe(true);
67
- expect(icon.prop('src')).toBe(defaultProps.icon);
68
- expect(icon.prop('alt')).toBe(defaultProps.selectedBrowser);
69
- });
70
-
71
- it('should render notification title', () => {
72
- const wrapper = mountWithIntl(<AndroidMobileExpanded {...defaultProps} />);
73
- const title = wrapper.find('.android-mobile-expanded-title');
74
-
75
- expect(title.exists()).toBe(true);
76
- expect(title.text()).toBe(defaultProps.notificationTitle);
77
- });
78
-
79
- it('should render notification body', () => {
80
- const wrapper = mountWithIntl(<AndroidMobileExpanded {...defaultProps} />);
81
- const body = wrapper.find('.android-mobile-expanded-body-text');
82
-
83
- expect(body.exists()).toBe(true);
84
- expect(body.text()).toBe(defaultProps.notificationBody);
85
- });
86
-
87
- it('should render display URL', () => {
88
- const wrapper = mountWithIntl(<AndroidMobileExpanded {...defaultProps} />);
89
- const domain = wrapper.find('.android-mobile-expanded-domain');
90
-
91
- expect(domain.exists()).toBe(true);
92
- expect(domain.text()).toBe(defaultProps.displayUrl);
93
- });
94
-
95
- it('should render hardcoded time', () => {
96
- const wrapper = mountWithIntl(<AndroidMobileExpanded {...defaultProps} />);
97
- const time = wrapper.find('.android-mobile-expanded-time');
98
-
99
- expect(time.exists()).toBe(true);
100
- expect(time.text()).toBe('2:29 PM');
101
- });
102
-
103
- it('should render arrow icon', () => {
104
- const wrapper = mountWithIntl(<AndroidMobileExpanded {...defaultProps} />);
105
- const arrow = wrapper.find('.notification-action-arrow.android-mobile-expanded-arrow');
106
-
107
- expect(arrow.exists()).toBe(true);
108
- expect(arrow.text()).toBe('^');
109
- });
110
- });
111
-
112
- describe('getBrowserDisplayName', () => {
113
- it('should return "Chrome" for Chrome browser', () => {
114
- const wrapper = mountWithIntl(
115
- <AndroidMobileExpanded {...defaultProps} selectedBrowser="Chrome" />
116
- );
117
- const browserName = wrapper.find('.android-mobile-expanded-browser-name');
118
-
119
- expect(browserName.text()).toBe('Chrome');
120
- });
121
-
122
- it('should return "Firefox" for Firefox browser', () => {
123
- const wrapper = mountWithIntl(
124
- <AndroidMobileExpanded {...defaultProps} selectedBrowser="Firefox" />
125
- );
126
- const browserName = wrapper.find('.android-mobile-expanded-browser-name');
127
-
128
- expect(browserName.text()).toBe('Firefox');
129
- });
130
-
131
- it('should return "Edge" for Edge browser', () => {
132
- const wrapper = mountWithIntl(
133
- <AndroidMobileExpanded {...defaultProps} selectedBrowser="Edge" />
134
- );
135
- const browserName = wrapper.find('.android-mobile-expanded-browser-name');
136
-
137
- expect(browserName.text()).toBe('Edge');
138
- });
139
-
140
- it('should return "Opera" for Opera browser', () => {
141
- const wrapper = mountWithIntl(
142
- <AndroidMobileExpanded {...defaultProps} selectedBrowser="Opera" />
143
- );
144
- const browserName = wrapper.find('.android-mobile-expanded-browser-name');
145
-
146
- expect(browserName.text()).toBe('Opera');
147
- });
148
-
149
- it('should return the browser name as-is for unknown browsers', () => {
150
- const unknownBrowser = 'Safari';
151
- const wrapper = mountWithIntl(
152
- <AndroidMobileExpanded {...defaultProps} selectedBrowser={unknownBrowser} />
153
- );
154
- const browserName = wrapper.find('.android-mobile-expanded-browser-name');
155
-
156
- expect(browserName.text()).toBe(unknownBrowser);
157
- });
158
-
159
- it('should handle empty string browser name', () => {
160
- const wrapper = mountWithIntl(
161
- <AndroidMobileExpanded {...defaultProps} selectedBrowser="" />
162
- );
163
- const browserName = wrapper.find('.android-mobile-expanded-browser-name');
164
-
165
- expect(browserName.text()).toBe('');
166
- });
167
-
168
- it('should handle case-sensitive browser names', () => {
169
- const wrapper = mountWithIntl(
170
- <AndroidMobileExpanded {...defaultProps} selectedBrowser="chrome" />
171
- );
172
- const browserName = wrapper.find('.android-mobile-expanded-browser-name');
173
-
174
- // Should return as-is since "chrome" (lowercase) is not in the mapping
175
- expect(browserName.text()).toBe('chrome');
176
- });
177
- });
178
-
179
- describe('Brand Icon Display Logic', () => {
180
- it('should show brand icon when shouldShowBrandIconExpanded is true and brandIcon exists', () => {
181
- const wrapper = mountWithIntl(
182
- <AndroidMobileExpanded
183
- {...defaultProps}
184
- shouldShowBrandIconExpanded={true}
185
- brandIcon="https://example.com/brand-icon.png"
186
- />
187
- );
188
-
189
- const brandIconContainer = wrapper.find('.notification-brand-icon-container.android-mobile-chrome-brand-icon');
190
- expect(brandIconContainer.exists()).toBe(true);
191
-
192
- const brandIcon = wrapper.find('.notification-brand-icon');
193
- expect(brandIcon.exists()).toBe(true);
194
- expect(brandIcon.prop('src')).toBe('https://example.com/brand-icon.png');
195
- expect(brandIcon.prop('alt')).toBe('Brand icon');
196
- });
197
-
198
- it('should show brand icon when shouldShowBrandIcon is true and brandIcon exists', () => {
199
- const wrapper = mountWithIntl(
200
- <AndroidMobileExpanded
201
- {...defaultProps}
202
- shouldShowBrandIcon={true}
203
- brandIcon="https://example.com/brand-icon.png"
204
- />
205
- );
206
-
207
- const brandIconContainer = wrapper.find('.notification-brand-icon-container.android-mobile-chrome-brand-icon');
208
- expect(brandIconContainer.exists()).toBe(true);
209
-
210
- const brandIcon = wrapper.find('.notification-brand-icon');
211
- expect(brandIcon.exists()).toBe(true);
212
- expect(brandIcon.prop('src')).toBe('https://example.com/brand-icon.png');
213
- });
214
-
215
- it('should show brand icon when both shouldShowBrandIcon and shouldShowBrandIconExpanded are true', () => {
216
- const wrapper = mountWithIntl(
217
- <AndroidMobileExpanded
218
- {...defaultProps}
219
- shouldShowBrandIcon={true}
220
- shouldShowBrandIconExpanded={true}
221
- brandIcon="https://example.com/brand-icon.png"
222
- />
223
- );
224
-
225
- const brandIconContainer = wrapper.find('.notification-brand-icon-container.android-mobile-chrome-brand-icon');
226
- expect(brandIconContainer.exists()).toBe(true);
227
- });
228
-
229
- it('should not show brand icon when both shouldShowBrandIcon and shouldShowBrandIconExpanded are false', () => {
230
- const wrapper = mountWithIntl(
231
- <AndroidMobileExpanded
232
- {...defaultProps}
233
- shouldShowBrandIcon={false}
234
- shouldShowBrandIconExpanded={false}
235
- brandIcon="https://example.com/brand-icon.png"
236
- />
237
- );
238
-
239
- const brandIconContainer = wrapper.find('.notification-brand-icon-container.android-mobile-chrome-brand-icon');
240
- expect(brandIconContainer.exists()).toBe(false);
241
- });
242
-
243
- it('should not show brand icon when brandIcon is not provided, even if shouldShowBrandIconExpanded is true', () => {
244
- const wrapper = mountWithIntl(
245
- <AndroidMobileExpanded
246
- {...defaultProps}
247
- shouldShowBrandIconExpanded={true}
248
- brandIcon=""
249
- />
250
- );
251
-
252
- const brandIconContainer = wrapper.find('.notification-brand-icon-container.android-mobile-chrome-brand-icon');
253
- expect(brandIconContainer.exists()).toBe(false);
254
- });
255
-
256
- it('should not show brand icon when brandIcon is not provided, even if shouldShowBrandIcon is true', () => {
257
- const wrapper = mountWithIntl(
258
- <AndroidMobileExpanded
259
- {...defaultProps}
260
- shouldShowBrandIcon={true}
261
- brandIcon={null}
262
- />
263
- );
264
-
265
- const brandIconContainer = wrapper.find('.notification-brand-icon-container.android-mobile-chrome-brand-icon');
266
- expect(brandIconContainer.exists()).toBe(false);
267
- });
268
-
269
- it('should not show brand icon when brandIcon is undefined', () => {
270
- const propsWithoutBrandIcon = { ...defaultProps };
271
- delete propsWithoutBrandIcon.brandIcon;
272
-
273
- const wrapper = mountWithIntl(
274
- <AndroidMobileExpanded
275
- {...propsWithoutBrandIcon}
276
- shouldShowBrandIcon={true}
277
- shouldShowBrandIconExpanded={true}
278
- />
279
- );
280
-
281
- const brandIconContainer = wrapper.find('.notification-brand-icon-container.android-mobile-chrome-brand-icon');
282
- expect(brandIconContainer.exists()).toBe(false);
283
- });
284
-
285
- it('should handle shouldShowBrandIconExpanded taking precedence when both flags are set', () => {
286
- // When shouldShowBrandIconExpanded is true, it should show (OR logic)
287
- const wrapper = mountWithIntl(
288
- <AndroidMobileExpanded
289
- {...defaultProps}
290
- shouldShowBrandIcon={false}
291
- shouldShowBrandIconExpanded={true}
292
- brandIcon="https://example.com/brand-icon.png"
293
- />
294
- );
295
-
296
- const brandIconContainer = wrapper.find('.notification-brand-icon-container.android-mobile-chrome-brand-icon');
297
- expect(brandIconContainer.exists()).toBe(true);
298
- });
299
- });
300
-
301
- describe('Media Image Display', () => {
302
- it('should render media image when mediaImageUrl is provided', () => {
303
- const wrapper = mountWithIntl(
304
- <AndroidMobileExpanded
305
- {...defaultProps}
306
- mediaImageUrl="https://example.com/media-image.jpg"
307
- />
308
- );
309
-
310
- const mediaContainer = wrapper.find('.android-mobile-expanded-media');
311
- expect(mediaContainer.exists()).toBe(true);
312
-
313
- const mediaImage = wrapper.find('.android-mobile-expanded-media-image');
314
- expect(mediaImage.exists()).toBe(true);
315
- expect(mediaImage.prop('src')).toBe('https://example.com/media-image.jpg');
316
- expect(mediaImage.prop('alt')).toBe('Notification media');
317
- });
318
-
319
- it('should not render media image when mediaImageUrl is empty string', () => {
320
- const wrapper = mountWithIntl(
321
- <AndroidMobileExpanded
322
- {...defaultProps}
323
- mediaImageUrl=""
324
- />
325
- );
326
-
327
- const mediaContainer = wrapper.find('.android-mobile-expanded-media');
328
- expect(mediaContainer.exists()).toBe(false);
329
- });
330
-
331
- it('should not render media image when mediaImageUrl is not provided', () => {
332
- const propsWithoutMedia = { ...defaultProps };
333
- delete propsWithoutMedia.mediaImageUrl;
334
-
335
- const wrapper = mountWithIntl(<AndroidMobileExpanded {...propsWithoutMedia} />);
336
-
337
- const mediaContainer = wrapper.find('.android-mobile-expanded-media');
338
- expect(mediaContainer.exists()).toBe(false);
339
- });
340
-
341
- it('should not render media image when mediaImageUrl is null', () => {
342
- const wrapper = mountWithIntl(
343
- <AndroidMobileExpanded
344
- {...defaultProps}
345
- mediaImageUrl={null}
346
- />
347
- );
348
-
349
- const mediaContainer = wrapper.find('.android-mobile-expanded-media');
350
- expect(mediaContainer.exists()).toBe(false);
351
- });
352
-
353
- it('should not render media image when mediaImageUrl is undefined', () => {
354
- const wrapper = mountWithIntl(
355
- <AndroidMobileExpanded
356
- {...defaultProps}
357
- mediaImageUrl={undefined}
358
- />
359
- );
360
-
361
- const mediaContainer = wrapper.find('.android-mobile-expanded-media');
362
- expect(mediaContainer.exists()).toBe(false);
363
- });
364
- });
365
-
366
- describe('Edge Cases and Optional Props', () => {
367
- it('should handle empty notification title', () => {
368
- const wrapper = mountWithIntl(
369
- <AndroidMobileExpanded {...defaultProps} notificationTitle="" />
370
- );
371
- const title = wrapper.find('.android-mobile-expanded-title');
372
-
373
- expect(title.exists()).toBe(true);
374
- expect(title.text()).toBe('');
375
- });
376
-
377
- it('should handle empty notification body', () => {
378
- const wrapper = mountWithIntl(
379
- <AndroidMobileExpanded {...defaultProps} notificationBody="" />
380
- );
381
- const body = wrapper.find('.android-mobile-expanded-body-text');
382
-
383
- expect(body.exists()).toBe(true);
384
- expect(body.text()).toBe('');
385
- });
386
-
387
- it('should handle empty display URL', () => {
388
- const wrapper = mountWithIntl(
389
- <AndroidMobileExpanded {...defaultProps} displayUrl="" />
390
- );
391
- const domain = wrapper.find('.android-mobile-expanded-domain');
392
-
393
- expect(domain.exists()).toBe(true);
394
- expect(domain.text()).toBe('');
395
- });
396
-
397
- it('should handle very long notification title', () => {
398
- const longTitle = 'A'.repeat(200);
399
- const wrapper = mountWithIntl(
400
- <AndroidMobileExpanded {...defaultProps} notificationTitle={longTitle} />
401
- );
402
- const title = wrapper.find('.android-mobile-expanded-title');
403
-
404
- expect(title.exists()).toBe(true);
405
- expect(title.text()).toBe(longTitle);
406
- });
407
-
408
- it('should handle very long notification body', () => {
409
- const longBody = 'B'.repeat(500);
410
- const wrapper = mountWithIntl(
411
- <AndroidMobileExpanded {...defaultProps} notificationBody={longBody} />
412
- );
413
- const body = wrapper.find('.android-mobile-expanded-body-text');
414
-
415
- expect(body.exists()).toBe(true);
416
- expect(body.text()).toBe(longBody);
417
- });
418
-
419
- it('should handle missing optional props gracefully', () => {
420
- const minimalProps = {
421
- icon: 'https://example.com/icon.png',
422
- selectedBrowser: 'Chrome',
423
- };
424
-
425
- const wrapper = mountWithIntl(<AndroidMobileExpanded {...minimalProps} />);
426
-
427
- // Should still render all structural elements
428
- expect(wrapper.find('.android-mobile-expanded-wrapper').exists()).toBe(true);
429
- expect(wrapper.find('.android-mobile-expanded-title').exists()).toBe(true);
430
- expect(wrapper.find('.android-mobile-expanded-body-text').exists()).toBe(true);
431
- });
432
- });
433
-
434
- describe('Component Structure', () => {
435
- it('should have correct DOM hierarchy', () => {
436
- const wrapper = mountWithIntl(<AndroidMobileExpanded {...defaultProps} />);
437
-
438
- // Icon should be sibling to wrapper
439
- const icon = wrapper.find('.android-mobile-expanded-icon');
440
- const wrapperDiv = wrapper.find('.android-mobile-expanded-wrapper');
441
- const arrow = wrapper.find('.notification-action-arrow.android-mobile-expanded-arrow');
442
-
443
- expect(icon.exists()).toBe(true);
444
- expect(wrapperDiv.exists()).toBe(true);
445
- expect(arrow.exists()).toBe(true);
446
-
447
- // Top section should contain header and title
448
- const topSection = wrapper.find('.android-mobile-expanded-top');
449
- expect(topSection.find('.android-mobile-expanded-header').exists()).toBe(true);
450
- expect(topSection.find('.android-mobile-expanded-title').exists()).toBe(true);
451
-
452
- // Body should contain body text
453
- const bodySection = wrapper.find('.android-mobile-expanded-body');
454
- expect(bodySection.find('.android-mobile-expanded-body-text').exists()).toBe(true);
455
- });
456
-
457
- it('should render brand icon in correct location when shown', () => {
458
- const wrapper = mountWithIntl(
459
- <AndroidMobileExpanded
460
- {...defaultProps}
461
- shouldShowBrandIconExpanded={true}
462
- brandIcon="https://example.com/brand-icon.png"
463
- />
464
- );
465
-
466
- // Brand icon should be in the top section
467
- const topSection = wrapper.find('.android-mobile-expanded-top');
468
- const brandIconContainer = topSection.find('.notification-brand-icon-container.android-mobile-chrome-brand-icon');
469
-
470
- expect(brandIconContainer.exists()).toBe(true);
471
- });
472
-
473
- it('should render media image in body section when provided', () => {
474
- const wrapper = mountWithIntl(
475
- <AndroidMobileExpanded
476
- {...defaultProps}
477
- mediaImageUrl="https://example.com/media.jpg"
478
- />
479
- );
480
-
481
- // Media should be in the body section
482
- const bodySection = wrapper.find('.android-mobile-expanded-body');
483
- const mediaContainer = bodySection.find('.android-mobile-expanded-media');
484
-
485
- expect(mediaContainer.exists()).toBe(true);
486
- });
487
- });
488
-
489
- describe('PropTypes Validation', () => {
490
- it('should require icon prop', () => {
491
- const propsWithoutIcon = { ...defaultProps };
492
- delete propsWithoutIcon.icon;
493
-
494
- // PropTypes validation happens at runtime, but we can verify the component handles missing props
495
- // In a real scenario, this would be caught by PropTypes in development mode
496
- expect(() => {
497
- mountWithIntl(<AndroidMobileExpanded {...propsWithoutIcon} />);
498
- }).not.toThrow();
499
- });
500
-
501
- it('should require selectedBrowser prop', () => {
502
- const propsWithoutBrowser = { ...defaultProps };
503
- delete propsWithoutBrowser.selectedBrowser;
504
-
505
- // Component should still render, but PropTypes would warn in development
506
- expect(() => {
507
- mountWithIntl(<AndroidMobileExpanded {...propsWithoutBrowser} />);
508
- }).not.toThrow();
509
- });
510
- });
511
- });
512
-
@@ -1,77 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`AndroidMobileExpanded Basic Rendering should render correctly with default props 1`] = `
4
- <Fragment>
5
- <div
6
- className="android-mobile-expanded-icon"
7
- >
8
- <div
9
- className="notification-icon-container"
10
- >
11
- <img
12
- alt="Chrome"
13
- className="notification-icon"
14
- src="https://example.com/chrome-icon.png"
15
- />
16
- </div>
17
- </div>
18
- <div
19
- className="android-mobile-expanded-wrapper"
20
- >
21
- <div
22
- className="android-mobile-expanded-top"
23
- >
24
- <div
25
- className="android-mobile-expanded-top-content"
26
- >
27
- <div
28
- className="android-mobile-expanded-header"
29
- >
30
- <div
31
- className="android-mobile-expanded-header-content"
32
- >
33
- <span
34
- className="android-mobile-expanded-browser-name"
35
- >
36
- Chrome
37
- </span>
38
- <span
39
- className="android-mobile-expanded-domain-time"
40
- >
41
- <span
42
- className="android-mobile-expanded-domain"
43
- >
44
- example.com
45
- </span>
46
- <span
47
- className="android-mobile-expanded-time"
48
- >
49
- 2:29 PM
50
- </span>
51
- </span>
52
- </div>
53
- </div>
54
- <div
55
- className="android-mobile-expanded-title"
56
- >
57
- Test Notification Title
58
- </div>
59
- </div>
60
- </div>
61
- <div
62
- className="android-mobile-expanded-body"
63
- >
64
- <div
65
- className="android-mobile-expanded-body-text"
66
- >
67
- Test notification body text that can be quite long and should be truncated after 4 lines
68
- </div>
69
- </div>
70
- </div>
71
- <div
72
- className="notification-action-arrow android-mobile-expanded-arrow"
73
- >
74
- ^
75
- </div>
76
- </Fragment>
77
- `;