@capillarytech/creatives-library 8.0.242-alpha.0 → 8.0.242-alpha.2
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.
- package/assets/Android.png +0 -0
- package/assets/iOS.png +0 -0
- package/constants/unified.js +2 -1
- package/initialReducer.js +2 -0
- package/package.json +1 -1
- package/sagas/__tests__/assetPolling.test.js +74 -3
- package/sagas/assetPolling.js +8 -1
- package/services/api.js +10 -5
- package/services/tests/api.test.js +18 -0
- package/translations/en.json +0 -1
- package/utils/common.js +5 -0
- package/utils/commonUtils.js +14 -1
- package/utils/tests/commonUtil.test.js +224 -0
- package/utils/transformTemplateConfig.js +0 -10
- package/utils/transformerUtils.js +0 -42
- package/v2Components/CapDeviceContent/index.js +61 -56
- package/v2Components/CapImageUpload/constants.js +0 -2
- package/v2Components/CapImageUpload/index.js +14 -54
- package/v2Components/CapImageUpload/index.scss +1 -4
- package/v2Components/CapImageUpload/messages.js +0 -4
- package/v2Components/CapTagList/index.js +6 -1
- package/v2Components/CapTagListWithInput/index.js +5 -1
- package/v2Components/CapTagListWithInput/messages.js +1 -1
- package/v2Components/CapWhatsappCTA/tests/index.test.js +5 -0
- package/v2Components/ErrorInfoNote/index.js +412 -72
- package/v2Components/ErrorInfoNote/messages.js +22 -0
- package/v2Components/ErrorInfoNote/style.scss +279 -2
- package/v2Components/HtmlEditor/HTMLEditor.js +217 -90
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +1132 -133
- package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +17 -12
- package/v2Components/HtmlEditor/_htmlEditor.scss +15 -23
- package/v2Components/HtmlEditor/_index.lazy.scss +1 -1
- package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +13 -101
- package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +148 -139
- package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +2 -1
- package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
- package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +1 -0
- package/v2Components/HtmlEditor/components/EditorToolbar/index.js +1 -1
- package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +1 -0
- package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +4 -7
- package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +35 -45
- package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +1 -3
- package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
- package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +7 -6
- package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +3 -6
- package/v2Components/HtmlEditor/components/PreviewPane/index.js +10 -11
- package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +87 -62
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +49 -31
- package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +254 -0
- package/v2Components/HtmlEditor/components/ValidationTabs/index.js +362 -0
- package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +51 -0
- package/v2Components/HtmlEditor/constants.js +29 -20
- package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +373 -16
- package/v2Components/HtmlEditor/hooks/useEditorContent.js +5 -2
- package/v2Components/HtmlEditor/hooks/useInAppContent.js +88 -146
- package/v2Components/HtmlEditor/index.js +1 -1
- package/v2Components/HtmlEditor/messages.js +95 -85
- package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +99 -101
- package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +23 -25
- package/v2Components/HtmlEditor/utils/validationAdapter.js +34 -41
- package/v2Components/MobilePushPreviewV2/index.js +32 -7
- package/v2Components/TemplatePreview/_templatePreview.scss +44 -24
- package/v2Components/TemplatePreview/index.js +47 -32
- package/v2Components/TemplatePreview/messages.js +4 -0
- package/v2Components/TestAndPreviewSlidebox/index.js +31 -25
- package/v2Containers/App/constants.js +0 -5
- package/v2Containers/BeeEditor/index.js +82 -80
- package/v2Containers/BeePopupEditor/constants.js +10 -0
- package/v2Containers/BeePopupEditor/index.js +193 -0
- package/v2Containers/BeePopupEditor/tests/index.test.js +627 -0
- package/v2Containers/Cap/tests/__snapshots__/index.test.js.snap +0 -1
- package/v2Containers/CreativesContainer/SlideBoxContent.js +148 -120
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +9 -3
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -2
- package/v2Containers/CreativesContainer/constants.js +1 -2
- package/v2Containers/CreativesContainer/index.js +173 -193
- package/v2Containers/CreativesContainer/messages.js +4 -4
- package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +38 -50
- package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +36 -0
- package/v2Containers/Email/actions.js +7 -0
- package/v2Containers/Email/constants.js +5 -1
- package/v2Containers/Email/index.js +13 -0
- package/v2Containers/Email/messages.js +32 -0
- package/v2Containers/Email/reducer.js +12 -1
- package/v2Containers/Email/sagas.js +41 -6
- package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +2 -0
- package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +1046 -0
- package/v2Containers/EmailWrapper/components/EmailWrapperView.js +193 -7
- package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +40 -74
- package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +2 -67
- package/v2Containers/EmailWrapper/constants.js +2 -0
- package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +436 -67
- package/v2Containers/EmailWrapper/index.js +99 -23
- package/v2Containers/EmailWrapper/messages.js +61 -1
- package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +26 -1
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +111 -77
- package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +376 -0
- package/v2Containers/InApp/__tests__/sagas.test.js +363 -0
- package/v2Containers/InApp/actions.js +7 -0
- package/v2Containers/InApp/constants.js +20 -4
- package/v2Containers/InApp/index.js +800 -357
- package/v2Containers/InApp/index.scss +4 -3
- package/v2Containers/InApp/messages.js +7 -3
- package/v2Containers/InApp/reducer.js +21 -3
- package/v2Containers/InApp/sagas.js +29 -9
- package/v2Containers/InApp/selectors.js +25 -5
- package/v2Containers/InApp/tests/index.test.js +154 -50
- package/v2Containers/InApp/tests/reducer.test.js +34 -0
- package/v2Containers/InApp/tests/sagas.test.js +61 -9
- package/v2Containers/InApp/tests/selectors.test.js +612 -0
- package/v2Containers/InAppWrapper/components/InAppWrapperView.js +162 -0
- package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +267 -0
- package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +9 -0
- package/v2Containers/InAppWrapper/constants.js +16 -0
- package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +473 -0
- package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +198 -0
- package/v2Containers/InAppWrapper/index.js +148 -0
- package/v2Containers/InAppWrapper/messages.js +49 -0
- package/v2Containers/InappAdvance/index.js +1099 -0
- package/v2Containers/InappAdvance/index.scss +10 -0
- package/v2Containers/InappAdvance/tests/index.test.js +448 -0
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +3 -3
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +2 -2
- package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +2 -25
- package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +9 -18
- package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +12 -46
- package/v2Containers/SmsTrai/Create/tests/__snapshots__/index.test.js.snap +0 -4
- package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4 -8
- package/v2Containers/TagList/index.js +67 -1
- package/v2Containers/Templates/ChannelTypeIllustration.js +1 -13
- package/v2Containers/Templates/_templates.scss +56 -200
- package/v2Containers/Templates/actions.js +1 -2
- package/v2Containers/Templates/constants.js +0 -1
- package/v2Containers/Templates/index.js +124 -277
- package/v2Containers/Templates/messages.js +4 -24
- package/v2Containers/Templates/reducer.js +0 -2
- package/v2Containers/Templates/tests/index.test.js +0 -10
- package/v2Containers/TemplatesV2/index.js +2 -3
- package/v2Containers/TemplatesV2/messages.js +0 -4
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +35 -132
- package/v2Components/CapImageUrlUpload/constants.js +0 -19
- package/v2Components/CapImageUrlUpload/index.js +0 -455
- package/v2Components/CapImageUrlUpload/index.scss +0 -35
- package/v2Components/CapImageUrlUpload/messages.js +0 -47
- package/v2Containers/WebPush/Create/components/ButtonForm.js +0 -175
- package/v2Containers/WebPush/Create/components/ButtonItem.js +0 -101
- package/v2Containers/WebPush/Create/components/ButtonList.js +0 -144
- package/v2Containers/WebPush/Create/components/_buttons.scss +0 -246
- package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +0 -554
- package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +0 -607
- package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +0 -633
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +0 -666
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +0 -74
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +0 -80
- package/v2Containers/WebPush/Create/index.js +0 -1755
- package/v2Containers/WebPush/Create/index.scss +0 -123
- package/v2Containers/WebPush/Create/messages.js +0 -199
- package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +0 -241
- package/v2Containers/WebPush/Create/preview/NotificationContainer.js +0 -290
- package/v2Containers/WebPush/Create/preview/PreviewContent.js +0 -81
- package/v2Containers/WebPush/Create/preview/PreviewControls.js +0 -240
- package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +0 -23
- package/v2Containers/WebPush/Create/preview/WebPushPreview.js +0 -144
- package/v2Containers/WebPush/Create/preview/assets/Light.svg +0 -53
- package/v2Containers/WebPush/Create/preview/assets/Top.svg +0 -5
- package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
- package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
- package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +0 -106
- package/v2Containers/WebPush/Create/preview/assets/iOS.svg +0 -26
- package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +0 -18
- package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +0 -29
- package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +0 -44
- package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +0 -110
- package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +0 -45
- package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +0 -72
- package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +0 -55
- package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +0 -70
- package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +0 -512
- package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +0 -77
- package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +0 -527
- package/v2Containers/WebPush/Create/preview/constants.js +0 -162
- package/v2Containers/WebPush/Create/preview/notification-container.scss +0 -104
- package/v2Containers/WebPush/Create/preview/preview.scss +0 -409
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +0 -300
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +0 -303
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_base.scss +0 -188
- package/v2Containers/WebPush/Create/preview/styles/_ios.scss +0 -106
- package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +0 -107
- package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +0 -75
- package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +0 -174
- package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +0 -909
- package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +0 -1077
- package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +0 -723
- package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +0 -943
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +0 -128
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +0 -121
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +0 -144
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +0 -127
- package/v2Containers/WebPush/Create/utils/urlValidation.js +0 -116
- package/v2Containers/WebPush/Create/utils/urlValidation.test.js +0 -449
- package/v2Containers/WebPush/actions.js +0 -60
- package/v2Containers/WebPush/constants.js +0 -108
- package/v2Containers/WebPush/index.js +0 -2
- package/v2Containers/WebPush/reducer.js +0 -104
- package/v2Containers/WebPush/sagas.js +0 -119
- package/v2Containers/WebPush/selectors.js +0 -65
- package/v2Containers/WebPush/tests/reducer.test.js +0 -863
- package/v2Containers/WebPush/tests/sagas.test.js +0 -566
- package/v2Containers/WebPush/tests/selectors.test.js +0 -960
|
@@ -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
|
-
`;
|