@capillarytech/creatives-library 8.0.242-alpha.0 → 8.0.242-alpha.1
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 +210 -89
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +1132 -133
- package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +17 -12
- package/v2Components/HtmlEditor/_htmlEditor.scss +8 -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/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 +1045 -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
|
@@ -0,0 +1,448 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Provider } from 'react-redux';
|
|
3
|
+
import '@testing-library/jest-dom';
|
|
4
|
+
import { injectIntl } from 'react-intl';
|
|
5
|
+
import { configureStore } from '@capillarytech/vulcan-react-sdk/utils';
|
|
6
|
+
import history from '../../../utils/history';
|
|
7
|
+
import { initialReducer } from '../../../initialReducer';
|
|
8
|
+
import { InappAdvanced } from '../index';
|
|
9
|
+
import { render, screen, fireEvent, waitFor } from '../../../utils/test-utils';
|
|
10
|
+
|
|
11
|
+
// Mock child components that are complex or not under test
|
|
12
|
+
jest.mock('../../BeePopupEditor', () => ({
|
|
13
|
+
__esModule: true,
|
|
14
|
+
default: (props) => (
|
|
15
|
+
<div
|
|
16
|
+
data-testid={`bee-popup-editor-${props.device}`}
|
|
17
|
+
data-device={props.device}
|
|
18
|
+
data-template-layout-type={props.templateLayoutType}
|
|
19
|
+
>
|
|
20
|
+
BeePopupEditor - {props.device}
|
|
21
|
+
<button
|
|
22
|
+
onClick={() => props.saveBeeData('{"test": "json"}', '<p>Test HTML</p>', props.device)}
|
|
23
|
+
data-testid={`save-bee-data-${props.device}`}
|
|
24
|
+
>
|
|
25
|
+
Save Bee Data
|
|
26
|
+
</button>
|
|
27
|
+
<button
|
|
28
|
+
onClick={() => props.saveBeeInstance({ mockInstance: true })}
|
|
29
|
+
data-testid={`save-bee-instance-${props.device}`}
|
|
30
|
+
>
|
|
31
|
+
Save Bee Instance
|
|
32
|
+
</button>
|
|
33
|
+
</div>
|
|
34
|
+
),
|
|
35
|
+
}));
|
|
36
|
+
|
|
37
|
+
let store;
|
|
38
|
+
beforeAll(() => {
|
|
39
|
+
store = configureStore({}, initialReducer, history);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
const ComponentToRender = injectIntl(InappAdvanced);
|
|
43
|
+
const renderComponent = (props) =>
|
|
44
|
+
render(
|
|
45
|
+
<Provider store={store}>
|
|
46
|
+
<ComponentToRender {...props} />
|
|
47
|
+
</Provider>
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
describe('InappAdvanced Component', () => {
|
|
51
|
+
let defaultProps;
|
|
52
|
+
let mockActions;
|
|
53
|
+
|
|
54
|
+
beforeEach(() => {
|
|
55
|
+
mockActions = {
|
|
56
|
+
getBeePopupBuilderToken: jest.fn(),
|
|
57
|
+
createInAppTemplate: jest.fn(),
|
|
58
|
+
editTemplate: jest.fn(),
|
|
59
|
+
clearCreateResponse: jest.fn(),
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const mockGlobalActions = {
|
|
63
|
+
fetchSchemaForEntity: jest.fn(),
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
defaultProps = {
|
|
67
|
+
intl: {
|
|
68
|
+
formatMessage: jest.fn((msg) => msg.defaultMessage || msg.id),
|
|
69
|
+
},
|
|
70
|
+
actions: mockActions,
|
|
71
|
+
globalActions: mockGlobalActions,
|
|
72
|
+
isFullMode: true,
|
|
73
|
+
onCreateComplete: jest.fn(),
|
|
74
|
+
params: { id: 'test-id' },
|
|
75
|
+
templateData: {},
|
|
76
|
+
editData: {},
|
|
77
|
+
accountData: {
|
|
78
|
+
selectedWeChatAccount: {
|
|
79
|
+
sourceAccountIdentifier: 'test-account',
|
|
80
|
+
id: 'account-123',
|
|
81
|
+
configs: {
|
|
82
|
+
android: '1',
|
|
83
|
+
ios: '1',
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
location: {
|
|
88
|
+
pathname: '/inapp/create',
|
|
89
|
+
query: { type: 'inapp' },
|
|
90
|
+
search: '',
|
|
91
|
+
},
|
|
92
|
+
getDefaultTags: 'inapp',
|
|
93
|
+
supportedTags: [],
|
|
94
|
+
metaEntities: {
|
|
95
|
+
tags: {
|
|
96
|
+
standard: [],
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
injectedTags: [],
|
|
100
|
+
getFormData: jest.fn(),
|
|
101
|
+
templateName: 'Test Template',
|
|
102
|
+
setTemplateName: jest.fn(),
|
|
103
|
+
beePopupBuilderTokenFetching: false,
|
|
104
|
+
beePopupBuilderToken: {
|
|
105
|
+
uuid: 'test-uuid-123',
|
|
106
|
+
token: 'test-token-456',
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
describe('Component Initialization', () => {
|
|
112
|
+
it('should render without crashing', () => {
|
|
113
|
+
renderComponent(defaultProps);
|
|
114
|
+
|
|
115
|
+
expect(screen.getByText('Create')).toBeInTheDocument();
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it('should call getBeePopupBuilderToken on mount', () => {
|
|
119
|
+
renderComponent(defaultProps);
|
|
120
|
+
|
|
121
|
+
expect(mockActions.getBeePopupBuilderToken).toHaveBeenCalledTimes(1);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
it('should show loading spinner when beePopupBuilderTokenFetching is true', () => {
|
|
125
|
+
renderComponent({
|
|
126
|
+
...defaultProps,
|
|
127
|
+
beePopupBuilderTokenFetching: true,
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
// The spinner should be present but we can't easily test for it without mocking
|
|
131
|
+
expect(screen.getByText('Create')).toBeInTheDocument();
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
describe('Layout Selection', () => {
|
|
136
|
+
it('should render layout selection when isFullMode is true', () => {
|
|
137
|
+
renderComponent({
|
|
138
|
+
...defaultProps,
|
|
139
|
+
isFullMode: true,
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
expect(screen.getByText('Creative layout')).toBeInTheDocument();
|
|
143
|
+
// CapSelect from cap-ui-library should render a select element
|
|
144
|
+
const selectElements = screen.getAllByRole('button');
|
|
145
|
+
expect(selectElements.length).toBeGreaterThan(0);
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it('should update layout type when selection changes', () => {
|
|
149
|
+
renderComponent(defaultProps);
|
|
150
|
+
|
|
151
|
+
// Layout selection should be rendered
|
|
152
|
+
expect(screen.getByText('Creative layout')).toBeInTheDocument();
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
describe('Device Tabs', () => {
|
|
157
|
+
it('should render device tabs with Android and iOS options', () => {
|
|
158
|
+
renderComponent(defaultProps);
|
|
159
|
+
|
|
160
|
+
expect(screen.getByText('Android')).toBeInTheDocument();
|
|
161
|
+
expect(screen.getByText('IOS')).toBeInTheDocument();
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it('should show BeePopupEditor for Android when Android tab is active', () => {
|
|
165
|
+
renderComponent({
|
|
166
|
+
...defaultProps,
|
|
167
|
+
beePopupBuilderToken: { uuid: 'test-uuid' },
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
expect(screen.getByTestId('bee-popup-editor-ANDROID')).toBeInTheDocument();
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
it('should only show supported device tabs', () => {
|
|
174
|
+
renderComponent({
|
|
175
|
+
...defaultProps,
|
|
176
|
+
accountData: {
|
|
177
|
+
selectedWeChatAccount: {
|
|
178
|
+
configs: {
|
|
179
|
+
android: '0', // Not supported
|
|
180
|
+
ios: '1', // Supported
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
expect(screen.queryByText('Android')).not.toBeInTheDocument();
|
|
187
|
+
expect(screen.getByText('IOS')).toBeInTheDocument();
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
describe('BeePopupEditor Integration', () => {
|
|
192
|
+
it('should pass correct props to BeePopupEditor', () => {
|
|
193
|
+
renderComponent({
|
|
194
|
+
...defaultProps,
|
|
195
|
+
beePopupBuilderToken: { uuid: 'test-uuid' },
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
const beeEditor = screen.getByTestId('bee-popup-editor-ANDROID');
|
|
199
|
+
expect(beeEditor).toHaveAttribute('data-device', 'ANDROID');
|
|
200
|
+
expect(beeEditor).toHaveAttribute('data-template-layout-type', 'MODAL');
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
it('should handle saveBeeData callback correctly', () => {
|
|
204
|
+
renderComponent({
|
|
205
|
+
...defaultProps,
|
|
206
|
+
beePopupBuilderToken: { uuid: 'test-uuid' },
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
const saveBeeDataButton = screen.getByTestId('save-bee-data-ANDROID');
|
|
210
|
+
fireEvent.click(saveBeeDataButton);
|
|
211
|
+
|
|
212
|
+
// The component should update its internal state with the JSON and HTML
|
|
213
|
+
expect(saveBeeDataButton).toBeInTheDocument(); // Basic check that callback was handled
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
it('should handle saveBeeInstance callback correctly', () => {
|
|
217
|
+
renderComponent({
|
|
218
|
+
...defaultProps,
|
|
219
|
+
beePopupBuilderToken: { uuid: 'test-uuid' },
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
const saveBeeInstanceButton = screen.getByTestId('save-bee-instance-ANDROID');
|
|
223
|
+
fireEvent.click(saveBeeInstanceButton);
|
|
224
|
+
|
|
225
|
+
// The component should store the bee instance
|
|
226
|
+
expect(saveBeeInstanceButton).toBeInTheDocument(); // Basic check that callback was handled
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
it('should not render BeePopupEditor when no token is available', () => {
|
|
230
|
+
renderComponent({
|
|
231
|
+
...defaultProps,
|
|
232
|
+
beePopupBuilderToken: null,
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
expect(screen.queryByTestId('bee-popup-editor-ANDROID')).not.toBeInTheDocument();
|
|
236
|
+
});
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
describe('Action Buttons', () => {
|
|
240
|
+
it('should render Create button in full mode for new templates', () => {
|
|
241
|
+
renderComponent({
|
|
242
|
+
...defaultProps,
|
|
243
|
+
isFullMode: true,
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
expect(screen.getByText('Create')).toBeInTheDocument();
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
it('should render Update button in edit mode', () => {
|
|
250
|
+
renderComponent({
|
|
251
|
+
...defaultProps,
|
|
252
|
+
isFullMode: true,
|
|
253
|
+
editData: {
|
|
254
|
+
templateDetails: {
|
|
255
|
+
name: 'Existing Template',
|
|
256
|
+
versions: {
|
|
257
|
+
base: {
|
|
258
|
+
content: {
|
|
259
|
+
ANDROID: { title: 'Test' },
|
|
260
|
+
},
|
|
261
|
+
},
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
},
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
expect(screen.getByText('Update')).toBeInTheDocument();
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
it('should render Done button in library mode', () => {
|
|
271
|
+
renderComponent({
|
|
272
|
+
...defaultProps,
|
|
273
|
+
isFullMode: false,
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
expect(screen.getByText('Done')).toBeInTheDocument();
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
it('should call appropriate action when Create button is clicked', async () => {
|
|
280
|
+
renderComponent({
|
|
281
|
+
...defaultProps,
|
|
282
|
+
isFullMode: true,
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
const createButton = screen.getByText('Create');
|
|
286
|
+
fireEvent.click(createButton);
|
|
287
|
+
|
|
288
|
+
// Wait for async operations to complete
|
|
289
|
+
await waitFor(() => {
|
|
290
|
+
expect(mockActions.createInAppTemplate).toHaveBeenCalled();
|
|
291
|
+
}, { timeout: 3000 });
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
describe('Form Data Integration', () => {
|
|
296
|
+
it('should call getFormData when in library mode', async () => {
|
|
297
|
+
const mockGetFormData = jest.fn();
|
|
298
|
+
renderComponent({
|
|
299
|
+
...defaultProps,
|
|
300
|
+
isFullMode: false,
|
|
301
|
+
getFormData: mockGetFormData,
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
const doneButton = screen.getByText('Done');
|
|
305
|
+
fireEvent.click(doneButton);
|
|
306
|
+
|
|
307
|
+
// Wait for async operations to complete
|
|
308
|
+
await waitFor(() => {
|
|
309
|
+
expect(mockGetFormData).toHaveBeenCalledWith({
|
|
310
|
+
value: expect.any(Object),
|
|
311
|
+
_id: 'test-id',
|
|
312
|
+
validity: true,
|
|
313
|
+
type: 'INAPP',
|
|
314
|
+
});
|
|
315
|
+
}, { timeout: 3000 });
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
describe('Template Name Integration', () => {
|
|
320
|
+
it('should display the template name when provided', () => {
|
|
321
|
+
renderComponent({
|
|
322
|
+
...defaultProps,
|
|
323
|
+
templateName: 'My Awesome Template',
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
// Template name should be used in the payload creation
|
|
327
|
+
expect(screen.getByText('Create')).toBeInTheDocument();
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
it('should handle setTemplateName callback', () => {
|
|
331
|
+
const mockSetTemplateName = jest.fn();
|
|
332
|
+
renderComponent({
|
|
333
|
+
...defaultProps,
|
|
334
|
+
setTemplateName: mockSetTemplateName,
|
|
335
|
+
});
|
|
336
|
+
|
|
337
|
+
// The component should be able to update template name
|
|
338
|
+
expect(mockSetTemplateName).toBeDefined();
|
|
339
|
+
});
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
describe('Account Data Integration', () => {
|
|
343
|
+
it('should handle missing account data gracefully', () => {
|
|
344
|
+
renderComponent({
|
|
345
|
+
...defaultProps,
|
|
346
|
+
accountData: {},
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
// Component should render without crashing
|
|
350
|
+
expect(screen.getByText('Create')).toBeInTheDocument();
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
it('should use account data in payload creation', () => {
|
|
354
|
+
renderComponent({
|
|
355
|
+
...defaultProps,
|
|
356
|
+
accountData: {
|
|
357
|
+
selectedWeChatAccount: {
|
|
358
|
+
sourceAccountIdentifier: 'test-account-123',
|
|
359
|
+
id: 'account-456',
|
|
360
|
+
},
|
|
361
|
+
},
|
|
362
|
+
});
|
|
363
|
+
|
|
364
|
+
// Account data should be used when creating the payload
|
|
365
|
+
expect(screen.getByText('Create')).toBeInTheDocument();
|
|
366
|
+
});
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
describe('Edit Flow', () => {
|
|
370
|
+
it('should initialize edit flow when editData is provided', () => {
|
|
371
|
+
renderComponent({
|
|
372
|
+
...defaultProps,
|
|
373
|
+
editData: {
|
|
374
|
+
templateDetails: {
|
|
375
|
+
name: 'Existing Template',
|
|
376
|
+
createdAt: '2023-01-01',
|
|
377
|
+
versions: {
|
|
378
|
+
base: {
|
|
379
|
+
content: {
|
|
380
|
+
ANDROID: {
|
|
381
|
+
isBEEeditor: true,
|
|
382
|
+
beeJson: '{"test": "json"}',
|
|
383
|
+
beeHtml: '<p>Test HTML</p>',
|
|
384
|
+
},
|
|
385
|
+
IOS: {
|
|
386
|
+
isBEEeditor: true,
|
|
387
|
+
beeJson: '{"test": "ios-json"}',
|
|
388
|
+
beeHtml: '<p>iOS Test HTML</p>',
|
|
389
|
+
},
|
|
390
|
+
},
|
|
391
|
+
},
|
|
392
|
+
},
|
|
393
|
+
},
|
|
394
|
+
},
|
|
395
|
+
});
|
|
396
|
+
|
|
397
|
+
// Should show Update button in edit flow
|
|
398
|
+
expect(screen.getByText('Update')).toBeInTheDocument();
|
|
399
|
+
});
|
|
400
|
+
});
|
|
401
|
+
|
|
402
|
+
describe('Error Handling', () => {
|
|
403
|
+
it('should handle missing props gracefully', () => {
|
|
404
|
+
expect(() => {
|
|
405
|
+
renderComponent({
|
|
406
|
+
intl: {
|
|
407
|
+
formatMessage: jest.fn((msg) => msg.defaultMessage || msg.id),
|
|
408
|
+
},
|
|
409
|
+
actions: mockActions,
|
|
410
|
+
globalActions: {
|
|
411
|
+
fetchSchemaForEntity: jest.fn(),
|
|
412
|
+
},
|
|
413
|
+
location: {
|
|
414
|
+
pathname: '/inapp/create',
|
|
415
|
+
query: { type: 'inapp' },
|
|
416
|
+
search: '',
|
|
417
|
+
},
|
|
418
|
+
});
|
|
419
|
+
}).not.toThrow();
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
it('should handle undefined beePopupBuilderToken gracefully', () => {
|
|
423
|
+
renderComponent({
|
|
424
|
+
...defaultProps,
|
|
425
|
+
beePopupBuilderToken: undefined,
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
expect(screen.getByText('Create')).toBeInTheDocument();
|
|
429
|
+
});
|
|
430
|
+
});
|
|
431
|
+
|
|
432
|
+
describe('Responsive Behavior', () => {
|
|
433
|
+
it('should apply correct CSS classes for different modes', () => {
|
|
434
|
+
const { container } = renderComponent(defaultProps);
|
|
435
|
+
|
|
436
|
+
expect(container.querySelector('.cap-inapp-creatives')).toBeInTheDocument();
|
|
437
|
+
});
|
|
438
|
+
|
|
439
|
+
it('should show footer with correct classes in library mode', () => {
|
|
440
|
+
const { container } = renderComponent({
|
|
441
|
+
...defaultProps,
|
|
442
|
+
isFullMode: false,
|
|
443
|
+
});
|
|
444
|
+
|
|
445
|
+
expect(container.querySelector('.inapp-footer-lib')).toBeInTheDocument();
|
|
446
|
+
});
|
|
447
|
+
});
|
|
448
|
+
});
|
|
@@ -1896,7 +1896,6 @@ new message content.",
|
|
|
1896
1896
|
"creatives.containersV2.WeChat.templateName": "Template Name",
|
|
1897
1897
|
"creatives.containersV2.WeChat.wechatCreateSuccess": "WeChat template mapped successfully",
|
|
1898
1898
|
"creatives.containersV2.WeChat.wechatEditSuccess": "WeChat template edited successfully",
|
|
1899
|
-
"creatives.containersV2.WebPush.addLabels": "Add labels",
|
|
1900
1899
|
"creatives.containersV2.Whatsapp.IncorrectCategoryError": "INCORRECT CATEGORY: Message content different from expected content in the category selected. Refer {here} for expected content in each category.",
|
|
1901
1900
|
"creatives.containersV2.Whatsapp.accountUpdate": "Account update",
|
|
1902
1901
|
"creatives.containersV2.Whatsapp.accountUpdateTooltip": "Let customers know about updates or changes to their accounts.",
|
|
@@ -2282,6 +2281,7 @@ new message content.",
|
|
|
2282
2281
|
"email": [Function],
|
|
2283
2282
|
"facebookPreview": [Function],
|
|
2284
2283
|
"gallery": [Function],
|
|
2284
|
+
"inApp": [Function],
|
|
2285
2285
|
"language": [Function],
|
|
2286
2286
|
"navigationConfig": [Function],
|
|
2287
2287
|
"previewAndTest": [Function],
|
|
@@ -5580,7 +5580,6 @@ new message content.",
|
|
|
5580
5580
|
"creatives.containersV2.WeChat.templateName": "Template Name",
|
|
5581
5581
|
"creatives.containersV2.WeChat.wechatCreateSuccess": "WeChat template mapped successfully",
|
|
5582
5582
|
"creatives.containersV2.WeChat.wechatEditSuccess": "WeChat template edited successfully",
|
|
5583
|
-
"creatives.containersV2.WebPush.addLabels": "Add labels",
|
|
5584
5583
|
"creatives.containersV2.Whatsapp.IncorrectCategoryError": "INCORRECT CATEGORY: Message content different from expected content in the category selected. Refer {here} for expected content in each category.",
|
|
5585
5584
|
"creatives.containersV2.Whatsapp.accountUpdate": "Account update",
|
|
5586
5585
|
"creatives.containersV2.Whatsapp.accountUpdateTooltip": "Let customers know about updates or changes to their accounts.",
|
|
@@ -5966,6 +5965,7 @@ new message content.",
|
|
|
5966
5965
|
"email": [Function],
|
|
5967
5966
|
"facebookPreview": [Function],
|
|
5968
5967
|
"gallery": [Function],
|
|
5968
|
+
"inApp": [Function],
|
|
5969
5969
|
"language": [Function],
|
|
5970
5970
|
"navigationConfig": [Function],
|
|
5971
5971
|
"previewAndTest": [Function],
|
|
@@ -9403,7 +9403,6 @@ new message content.",
|
|
|
9403
9403
|
"creatives.containersV2.WeChat.templateName": "Template Name",
|
|
9404
9404
|
"creatives.containersV2.WeChat.wechatCreateSuccess": "WeChat template mapped successfully",
|
|
9405
9405
|
"creatives.containersV2.WeChat.wechatEditSuccess": "WeChat template edited successfully",
|
|
9406
|
-
"creatives.containersV2.WebPush.addLabels": "Add labels",
|
|
9407
9406
|
"creatives.containersV2.Whatsapp.IncorrectCategoryError": "INCORRECT CATEGORY: Message content different from expected content in the category selected. Refer {here} for expected content in each category.",
|
|
9408
9407
|
"creatives.containersV2.Whatsapp.accountUpdate": "Account update",
|
|
9409
9408
|
"creatives.containersV2.Whatsapp.accountUpdateTooltip": "Let customers know about updates or changes to their accounts.",
|
|
@@ -9789,6 +9788,7 @@ new message content.",
|
|
|
9789
9788
|
"email": [Function],
|
|
9790
9789
|
"facebookPreview": [Function],
|
|
9791
9790
|
"gallery": [Function],
|
|
9791
|
+
"inApp": [Function],
|
|
9792
9792
|
"language": [Function],
|
|
9793
9793
|
"navigationConfig": [Function],
|
|
9794
9794
|
"previewAndTest": [Function],
|
|
@@ -1896,7 +1896,6 @@ new message content.",
|
|
|
1896
1896
|
"creatives.containersV2.WeChat.templateName": "Template Name",
|
|
1897
1897
|
"creatives.containersV2.WeChat.wechatCreateSuccess": "WeChat template mapped successfully",
|
|
1898
1898
|
"creatives.containersV2.WeChat.wechatEditSuccess": "WeChat template edited successfully",
|
|
1899
|
-
"creatives.containersV2.WebPush.addLabels": "Add labels",
|
|
1900
1899
|
"creatives.containersV2.Whatsapp.IncorrectCategoryError": "INCORRECT CATEGORY: Message content different from expected content in the category selected. Refer {here} for expected content in each category.",
|
|
1901
1900
|
"creatives.containersV2.Whatsapp.accountUpdate": "Account update",
|
|
1902
1901
|
"creatives.containersV2.Whatsapp.accountUpdateTooltip": "Let customers know about updates or changes to their accounts.",
|
|
@@ -2282,6 +2281,7 @@ new message content.",
|
|
|
2282
2281
|
"email": [Function],
|
|
2283
2282
|
"facebookPreview": [Function],
|
|
2284
2283
|
"gallery": [Function],
|
|
2284
|
+
"inApp": [Function],
|
|
2285
2285
|
"language": [Function],
|
|
2286
2286
|
"navigationConfig": [Function],
|
|
2287
2287
|
"previewAndTest": [Function],
|
|
@@ -21170,7 +21170,6 @@ new message content.",
|
|
|
21170
21170
|
"creatives.containersV2.WeChat.templateName": "Template Name",
|
|
21171
21171
|
"creatives.containersV2.WeChat.wechatCreateSuccess": "WeChat template mapped successfully",
|
|
21172
21172
|
"creatives.containersV2.WeChat.wechatEditSuccess": "WeChat template edited successfully",
|
|
21173
|
-
"creatives.containersV2.WebPush.addLabels": "Add labels",
|
|
21174
21173
|
"creatives.containersV2.Whatsapp.IncorrectCategoryError": "INCORRECT CATEGORY: Message content different from expected content in the category selected. Refer {here} for expected content in each category.",
|
|
21175
21174
|
"creatives.containersV2.Whatsapp.accountUpdate": "Account update",
|
|
21176
21175
|
"creatives.containersV2.Whatsapp.accountUpdateTooltip": "Let customers know about updates or changes to their accounts.",
|
|
@@ -21556,6 +21555,7 @@ new message content.",
|
|
|
21556
21555
|
"email": [Function],
|
|
21557
21556
|
"facebookPreview": [Function],
|
|
21558
21557
|
"gallery": [Function],
|
|
21558
|
+
"inApp": [Function],
|
|
21559
21559
|
"language": [Function],
|
|
21560
21560
|
"navigationConfig": [Function],
|
|
21561
21561
|
"previewAndTest": [Function],
|