@capillarytech/creatives-library 8.0.249 → 8.0.250-alpha.0
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/services/api.js +10 -0
- package/services/tests/api.test.js +18 -0
- package/utils/common.js +5 -0
- package/utils/commonUtils.js +28 -5
- package/utils/tests/commonUtil.test.js +224 -0
- package/utils/transformTemplateConfig.js +0 -10
- package/v2Components/CapDeviceContent/index.js +61 -56
- 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 +452 -72
- package/v2Components/ErrorInfoNote/messages.js +22 -0
- package/v2Components/ErrorInfoNote/style.scss +280 -4
- package/v2Components/FormBuilder/tests/index.test.js +13 -4
- package/v2Components/HtmlEditor/HTMLEditor.js +640 -94
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +874 -0
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +1167 -133
- package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +27 -16
- package/v2Components/HtmlEditor/_htmlEditor.scss +108 -45
- 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 +9 -0
- package/v2Components/HtmlEditor/components/EditorToolbar/index.js +1 -1
- package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +22 -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 +11 -13
- package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +49 -31
- package/v2Components/HtmlEditor/components/ValidationPanel/index.js +68 -39
- package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +254 -0
- package/v2Components/HtmlEditor/components/ValidationTabs/index.js +391 -0
- package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +51 -0
- package/v2Components/HtmlEditor/constants.js +42 -20
- package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +373 -16
- package/v2Components/HtmlEditor/hooks/__tests__/useValidation.apiErrors.test.js +795 -0
- package/v2Components/HtmlEditor/hooks/useEditorContent.js +5 -2
- package/v2Components/HtmlEditor/hooks/useInAppContent.js +88 -146
- package/v2Components/HtmlEditor/hooks/useValidation.js +189 -53
- package/v2Components/HtmlEditor/index.js +1 -1
- package/v2Components/HtmlEditor/messages.js +95 -85
- package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +94 -45
- package/v2Components/HtmlEditor/utils/contentSanitizer.js +40 -41
- package/v2Components/HtmlEditor/utils/htmlValidator.js +71 -72
- package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +134 -102
- package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +23 -25
- package/v2Components/HtmlEditor/utils/validationAdapter.js +66 -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/_testAndPreviewSlidebox.scss +1 -0
- package/v2Containers/BeeEditor/index.js +172 -90
- 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/CreativesContainer/SlideBoxContent.js +127 -51
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +163 -13
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -1
- package/v2Containers/CreativesContainer/constants.js +1 -0
- package/v2Containers/CreativesContainer/index.js +239 -46
- package/v2Containers/CreativesContainer/messages.js +8 -0
- package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +11 -2
- package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +38 -50
- package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +106 -0
- package/v2Containers/Email/actions.js +7 -0
- package/v2Containers/Email/constants.js +5 -1
- package/v2Containers/Email/index.js +222 -27
- package/v2Containers/Email/messages.js +32 -0
- package/v2Containers/Email/reducer.js +12 -1
- package/v2Containers/Email/sagas.js +61 -7
- package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +2 -0
- package/v2Containers/Email/tests/sagas.test.js +320 -29
- package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +1321 -0
- package/v2Containers/EmailWrapper/components/EmailWrapperView.js +210 -15
- package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +40 -74
- package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +1749 -0
- package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +520 -0
- package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +2 -67
- package/v2Containers/EmailWrapper/constants.js +2 -0
- package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +629 -77
- package/v2Containers/EmailWrapper/index.js +103 -23
- package/v2Containers/EmailWrapper/messages.js +61 -1
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +643 -0
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +594 -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 +802 -359
- 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 -0
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +2 -0
- package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +2 -0
- package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +9 -0
- package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +12 -0
- package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4 -0
- package/v2Containers/TagList/index.js +62 -19
- package/v2Containers/Templates/_templates.scss +60 -1
- package/v2Containers/Templates/index.js +89 -4
- package/v2Containers/Templates/messages.js +4 -0
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +34 -0
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +0 -152
- package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +0 -214
|
@@ -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
|
+
});
|
|
@@ -2282,6 +2282,7 @@ new message content.",
|
|
|
2282
2282
|
"email": [Function],
|
|
2283
2283
|
"facebookPreview": [Function],
|
|
2284
2284
|
"gallery": [Function],
|
|
2285
|
+
"inApp": [Function],
|
|
2285
2286
|
"language": [Function],
|
|
2286
2287
|
"navigationConfig": [Function],
|
|
2287
2288
|
"previewAndTest": [Function],
|
|
@@ -5966,6 +5967,7 @@ new message content.",
|
|
|
5966
5967
|
"email": [Function],
|
|
5967
5968
|
"facebookPreview": [Function],
|
|
5968
5969
|
"gallery": [Function],
|
|
5970
|
+
"inApp": [Function],
|
|
5969
5971
|
"language": [Function],
|
|
5970
5972
|
"navigationConfig": [Function],
|
|
5971
5973
|
"previewAndTest": [Function],
|
|
@@ -9789,6 +9791,7 @@ new message content.",
|
|
|
9789
9791
|
"email": [Function],
|
|
9790
9792
|
"facebookPreview": [Function],
|
|
9791
9793
|
"gallery": [Function],
|
|
9794
|
+
"inApp": [Function],
|
|
9792
9795
|
"language": [Function],
|
|
9793
9796
|
"navigationConfig": [Function],
|
|
9794
9797
|
"previewAndTest": [Function],
|
|
@@ -2282,6 +2282,7 @@ new message content.",
|
|
|
2282
2282
|
"email": [Function],
|
|
2283
2283
|
"facebookPreview": [Function],
|
|
2284
2284
|
"gallery": [Function],
|
|
2285
|
+
"inApp": [Function],
|
|
2285
2286
|
"language": [Function],
|
|
2286
2287
|
"navigationConfig": [Function],
|
|
2287
2288
|
"previewAndTest": [Function],
|
|
@@ -21556,6 +21557,7 @@ new message content.",
|
|
|
21556
21557
|
"email": [Function],
|
|
21557
21558
|
"facebookPreview": [Function],
|
|
21558
21559
|
"gallery": [Function],
|
|
21560
|
+
"inApp": [Function],
|
|
21559
21561
|
"language": [Function],
|
|
21560
21562
|
"navigationConfig": [Function],
|
|
21561
21563
|
"previewAndTest": [Function],
|
|
@@ -2282,6 +2282,7 @@ new message content.",
|
|
|
2282
2282
|
"email": [Function],
|
|
2283
2283
|
"facebookPreview": [Function],
|
|
2284
2284
|
"gallery": [Function],
|
|
2285
|
+
"inApp": [Function],
|
|
2285
2286
|
"language": [Function],
|
|
2286
2287
|
"navigationConfig": [Function],
|
|
2287
2288
|
"previewAndTest": [Function],
|
|
@@ -34893,6 +34894,7 @@ new message content.",
|
|
|
34893
34894
|
"email": [Function],
|
|
34894
34895
|
"facebookPreview": [Function],
|
|
34895
34896
|
"gallery": [Function],
|
|
34897
|
+
"inApp": [Function],
|
|
34896
34898
|
"language": [Function],
|
|
34897
34899
|
"navigationConfig": [Function],
|
|
34898
34900
|
"previewAndTest": [Function],
|
|
@@ -2282,6 +2282,7 @@ new message content.",
|
|
|
2282
2282
|
"email": [Function],
|
|
2283
2283
|
"facebookPreview": [Function],
|
|
2284
2284
|
"gallery": [Function],
|
|
2285
|
+
"inApp": [Function],
|
|
2285
2286
|
"language": [Function],
|
|
2286
2287
|
"navigationConfig": [Function],
|
|
2287
2288
|
"previewAndTest": [Function],
|
|
@@ -11302,6 +11303,7 @@ new message content.",
|
|
|
11302
11303
|
"email": [Function],
|
|
11303
11304
|
"facebookPreview": [Function],
|
|
11304
11305
|
"gallery": [Function],
|
|
11306
|
+
"inApp": [Function],
|
|
11305
11307
|
"language": [Function],
|
|
11306
11308
|
"navigationConfig": [Function],
|
|
11307
11309
|
"previewAndTest": [Function],
|
|
@@ -20506,6 +20508,7 @@ new message content.",
|
|
|
20506
20508
|
"email": [Function],
|
|
20507
20509
|
"facebookPreview": [Function],
|
|
20508
20510
|
"gallery": [Function],
|
|
20511
|
+
"inApp": [Function],
|
|
20509
20512
|
"language": [Function],
|
|
20510
20513
|
"navigationConfig": [Function],
|
|
20511
20514
|
"previewAndTest": [Function],
|
|
@@ -29987,6 +29990,7 @@ new message content.",
|
|
|
29987
29990
|
"email": [Function],
|
|
29988
29991
|
"facebookPreview": [Function],
|
|
29989
29992
|
"gallery": [Function],
|
|
29993
|
+
"inApp": [Function],
|
|
29990
29994
|
"language": [Function],
|
|
29991
29995
|
"navigationConfig": [Function],
|
|
29992
29996
|
"previewAndTest": [Function],
|
|
@@ -41689,6 +41693,7 @@ new message content.",
|
|
|
41689
41693
|
"email": [Function],
|
|
41690
41694
|
"facebookPreview": [Function],
|
|
41691
41695
|
"gallery": [Function],
|
|
41696
|
+
"inApp": [Function],
|
|
41692
41697
|
"language": [Function],
|
|
41693
41698
|
"navigationConfig": [Function],
|
|
41694
41699
|
"previewAndTest": [Function],
|
|
@@ -53433,6 +53438,7 @@ new message content.",
|
|
|
53433
53438
|
"email": [Function],
|
|
53434
53439
|
"facebookPreview": [Function],
|
|
53435
53440
|
"gallery": [Function],
|
|
53441
|
+
"inApp": [Function],
|
|
53436
53442
|
"language": [Function],
|
|
53437
53443
|
"navigationConfig": [Function],
|
|
53438
53444
|
"previewAndTest": [Function],
|
|
@@ -61227,6 +61233,7 @@ new message content.",
|
|
|
61227
61233
|
"email": [Function],
|
|
61228
61234
|
"facebookPreview": [Function],
|
|
61229
61235
|
"gallery": [Function],
|
|
61236
|
+
"inApp": [Function],
|
|
61230
61237
|
"language": [Function],
|
|
61231
61238
|
"navigationConfig": [Function],
|
|
61232
61239
|
"previewAndTest": [Function],
|
|
@@ -69439,6 +69446,7 @@ new message content.",
|
|
|
69439
69446
|
"email": [Function],
|
|
69440
69447
|
"facebookPreview": [Function],
|
|
69441
69448
|
"gallery": [Function],
|
|
69449
|
+
"inApp": [Function],
|
|
69442
69450
|
"language": [Function],
|
|
69443
69451
|
"navigationConfig": [Function],
|
|
69444
69452
|
"previewAndTest": [Function],
|
|
@@ -77928,6 +77936,7 @@ new message content.",
|
|
|
77928
77936
|
"email": [Function],
|
|
77929
77937
|
"facebookPreview": [Function],
|
|
77930
77938
|
"gallery": [Function],
|
|
77939
|
+
"inApp": [Function],
|
|
77931
77940
|
"language": [Function],
|
|
77932
77941
|
"navigationConfig": [Function],
|
|
77933
77942
|
"previewAndTest": [Function],
|
|
@@ -2282,6 +2282,7 @@ new message content.",
|
|
|
2282
2282
|
"email": [Function],
|
|
2283
2283
|
"facebookPreview": [Function],
|
|
2284
2284
|
"gallery": [Function],
|
|
2285
|
+
"inApp": [Function],
|
|
2285
2286
|
"language": [Function],
|
|
2286
2287
|
"navigationConfig": [Function],
|
|
2287
2288
|
"previewAndTest": [Function],
|
|
@@ -18319,6 +18320,7 @@ new message content.",
|
|
|
18319
18320
|
"email": [Function],
|
|
18320
18321
|
"facebookPreview": [Function],
|
|
18321
18322
|
"gallery": [Function],
|
|
18323
|
+
"inApp": [Function],
|
|
18322
18324
|
"language": [Function],
|
|
18323
18325
|
"navigationConfig": [Function],
|
|
18324
18326
|
"previewAndTest": [Function],
|
|
@@ -34356,6 +34358,7 @@ new message content.",
|
|
|
34356
34358
|
"email": [Function],
|
|
34357
34359
|
"facebookPreview": [Function],
|
|
34358
34360
|
"gallery": [Function],
|
|
34361
|
+
"inApp": [Function],
|
|
34359
34362
|
"language": [Function],
|
|
34360
34363
|
"navigationConfig": [Function],
|
|
34361
34364
|
"previewAndTest": [Function],
|
|
@@ -50915,6 +50918,7 @@ new message content.",
|
|
|
50915
50918
|
"email": [Function],
|
|
50916
50919
|
"facebookPreview": [Function],
|
|
50917
50920
|
"gallery": [Function],
|
|
50921
|
+
"inApp": [Function],
|
|
50918
50922
|
"language": [Function],
|
|
50919
50923
|
"navigationConfig": [Function],
|
|
50920
50924
|
"previewAndTest": [Function],
|
|
@@ -68022,6 +68026,7 @@ new message content.",
|
|
|
68022
68026
|
"email": [Function],
|
|
68023
68027
|
"facebookPreview": [Function],
|
|
68024
68028
|
"gallery": [Function],
|
|
68029
|
+
"inApp": [Function],
|
|
68025
68030
|
"language": [Function],
|
|
68026
68031
|
"navigationConfig": [Function],
|
|
68027
68032
|
"previewAndTest": [Function],
|
|
@@ -84059,6 +84064,7 @@ new message content.",
|
|
|
84059
84064
|
"email": [Function],
|
|
84060
84065
|
"facebookPreview": [Function],
|
|
84061
84066
|
"gallery": [Function],
|
|
84067
|
+
"inApp": [Function],
|
|
84062
84068
|
"language": [Function],
|
|
84063
84069
|
"navigationConfig": [Function],
|
|
84064
84070
|
"previewAndTest": [Function],
|
|
@@ -103405,6 +103411,7 @@ new message content.",
|
|
|
103405
103411
|
"email": [Function],
|
|
103406
103412
|
"facebookPreview": [Function],
|
|
103407
103413
|
"gallery": [Function],
|
|
103414
|
+
"inApp": [Function],
|
|
103408
103415
|
"language": [Function],
|
|
103409
103416
|
"navigationConfig": [Function],
|
|
103410
103417
|
"previewAndTest": [Function],
|
|
@@ -122751,6 +122758,7 @@ new message content.",
|
|
|
122751
122758
|
"email": [Function],
|
|
122752
122759
|
"facebookPreview": [Function],
|
|
122753
122760
|
"gallery": [Function],
|
|
122761
|
+
"inApp": [Function],
|
|
122754
122762
|
"language": [Function],
|
|
122755
122763
|
"navigationConfig": [Function],
|
|
122756
122764
|
"previewAndTest": [Function],
|
|
@@ -142772,6 +142780,7 @@ new message content.",
|
|
|
142772
142780
|
"email": [Function],
|
|
142773
142781
|
"facebookPreview": [Function],
|
|
142774
142782
|
"gallery": [Function],
|
|
142783
|
+
"inApp": [Function],
|
|
142775
142784
|
"language": [Function],
|
|
142776
142785
|
"navigationConfig": [Function],
|
|
142777
142786
|
"previewAndTest": [Function],
|
|
@@ -158809,6 +158818,7 @@ new message content.",
|
|
|
158809
158818
|
"email": [Function],
|
|
158810
158819
|
"facebookPreview": [Function],
|
|
158811
158820
|
"gallery": [Function],
|
|
158821
|
+
"inApp": [Function],
|
|
158812
158822
|
"language": [Function],
|
|
158813
158823
|
"navigationConfig": [Function],
|
|
158814
158824
|
"previewAndTest": [Function],
|
|
@@ -174846,6 +174856,7 @@ new message content.",
|
|
|
174846
174856
|
"email": [Function],
|
|
174847
174857
|
"facebookPreview": [Function],
|
|
174848
174858
|
"gallery": [Function],
|
|
174859
|
+
"inApp": [Function],
|
|
174849
174860
|
"language": [Function],
|
|
174850
174861
|
"navigationConfig": [Function],
|
|
174851
174862
|
"previewAndTest": [Function],
|
|
@@ -190883,6 +190894,7 @@ new message content.",
|
|
|
190883
190894
|
"email": [Function],
|
|
190884
190895
|
"facebookPreview": [Function],
|
|
190885
190896
|
"gallery": [Function],
|
|
190897
|
+
"inApp": [Function],
|
|
190886
190898
|
"language": [Function],
|
|
190887
190899
|
"navigationConfig": [Function],
|
|
190888
190900
|
"previewAndTest": [Function],
|