@capillarytech/creatives-library 8.0.242-alpha.1 → 8.0.242-alpha.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/assets/Android.png +0 -0
  2. package/assets/iOS.png +0 -0
  3. package/config/app.js +1 -1
  4. package/constants/unified.js +2 -2
  5. package/initialReducer.js +0 -2
  6. package/package.json +1 -1
  7. package/services/api.js +5 -10
  8. package/services/tests/api.test.js +0 -18
  9. package/translations/en.json +4 -3
  10. package/utils/common.js +6 -5
  11. package/utils/commonUtils.js +1 -14
  12. package/utils/imageUrlUpload.js +141 -0
  13. package/utils/tests/commonUtil.test.js +0 -224
  14. package/utils/transformTemplateConfig.js +10 -0
  15. package/v2Components/CapDeviceContent/index.js +56 -61
  16. package/v2Components/CapImageUpload/constants.js +2 -0
  17. package/v2Components/CapImageUpload/index.js +65 -16
  18. package/v2Components/CapImageUpload/index.scss +4 -1
  19. package/v2Components/CapImageUpload/messages.js +5 -1
  20. package/v2Components/CapImageUrlUpload/constants.js +26 -0
  21. package/v2Components/CapImageUrlUpload/index.js +365 -0
  22. package/v2Components/CapImageUrlUpload/index.scss +35 -0
  23. package/v2Components/CapImageUrlUpload/messages.js +47 -0
  24. package/v2Components/CapTagList/index.js +1 -6
  25. package/v2Components/CapTagListWithInput/index.js +1 -5
  26. package/v2Components/CapTagListWithInput/messages.js +1 -1
  27. package/v2Components/CapWhatsappCTA/tests/index.test.js +0 -5
  28. package/v2Components/ErrorInfoNote/index.js +72 -412
  29. package/v2Components/ErrorInfoNote/messages.js +0 -22
  30. package/v2Components/ErrorInfoNote/style.scss +2 -279
  31. package/v2Components/HtmlEditor/HTMLEditor.js +89 -210
  32. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1132
  33. package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +12 -17
  34. package/v2Components/HtmlEditor/_htmlEditor.scss +23 -8
  35. package/v2Components/HtmlEditor/_index.lazy.scss +1 -1
  36. package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +101 -13
  37. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +139 -148
  38. package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +1 -2
  39. package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
  40. package/v2Components/HtmlEditor/components/EditorToolbar/index.js +1 -1
  41. package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +0 -1
  42. package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +7 -4
  43. package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +45 -35
  44. package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +3 -1
  45. package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
  46. package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +6 -7
  47. package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +6 -3
  48. package/v2Components/HtmlEditor/components/PreviewPane/index.js +11 -10
  49. package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
  50. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +62 -87
  51. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +31 -49
  52. package/v2Components/HtmlEditor/constants.js +20 -29
  53. package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +16 -373
  54. package/v2Components/HtmlEditor/hooks/useEditorContent.js +2 -5
  55. package/v2Components/HtmlEditor/hooks/useInAppContent.js +146 -88
  56. package/v2Components/HtmlEditor/index.js +1 -1
  57. package/v2Components/HtmlEditor/messages.js +85 -95
  58. package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +101 -99
  59. package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +25 -23
  60. package/v2Components/HtmlEditor/utils/validationAdapter.js +41 -34
  61. package/v2Components/MobilePushPreviewV2/index.js +7 -32
  62. package/v2Components/TemplatePreview/_templatePreview.scss +24 -44
  63. package/v2Components/TemplatePreview/index.js +32 -47
  64. package/v2Components/TemplatePreview/messages.js +0 -4
  65. package/v2Components/TestAndPreviewSlidebox/index.js +25 -31
  66. package/v2Containers/App/constants.js +5 -0
  67. package/v2Containers/BeeEditor/index.js +80 -82
  68. package/v2Containers/Cap/tests/__snapshots__/index.test.js.snap +4 -3
  69. package/v2Containers/CreativesContainer/SlideBoxContent.js +118 -148
  70. package/v2Containers/CreativesContainer/SlideBoxFooter.js +3 -9
  71. package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -2
  72. package/v2Containers/CreativesContainer/constants.js +2 -1
  73. package/v2Containers/CreativesContainer/index.js +41 -173
  74. package/v2Containers/CreativesContainer/messages.js +4 -4
  75. package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +210 -0
  76. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +354 -38
  77. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +0 -36
  78. package/v2Containers/Email/actions.js +0 -7
  79. package/v2Containers/Email/constants.js +1 -5
  80. package/v2Containers/Email/index.js +0 -13
  81. package/v2Containers/Email/messages.js +0 -32
  82. package/v2Containers/Email/reducer.js +1 -12
  83. package/v2Containers/Email/sagas.js +6 -41
  84. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +0 -2
  85. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +7 -193
  86. package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +74 -40
  87. package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +67 -2
  88. package/v2Containers/EmailWrapper/constants.js +0 -2
  89. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +67 -436
  90. package/v2Containers/EmailWrapper/index.js +23 -99
  91. package/v2Containers/EmailWrapper/messages.js +1 -61
  92. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +1 -26
  93. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +77 -111
  94. package/v2Containers/InApp/actions.js +0 -7
  95. package/v2Containers/InApp/constants.js +4 -20
  96. package/v2Containers/InApp/index.js +357 -800
  97. package/v2Containers/InApp/index.scss +3 -4
  98. package/v2Containers/InApp/messages.js +3 -7
  99. package/v2Containers/InApp/reducer.js +3 -21
  100. package/v2Containers/InApp/sagas.js +9 -29
  101. package/v2Containers/InApp/selectors.js +5 -25
  102. package/v2Containers/InApp/tests/index.test.js +50 -154
  103. package/v2Containers/InApp/tests/reducer.test.js +0 -34
  104. package/v2Containers/InApp/tests/sagas.test.js +9 -61
  105. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +12 -12
  106. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +8 -8
  107. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +100 -77
  108. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +72 -63
  109. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +184 -150
  110. package/v2Containers/SmsTrai/Create/tests/__snapshots__/index.test.js.snap +16 -12
  111. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +32 -28
  112. package/v2Containers/TagList/index.js +1 -67
  113. package/v2Containers/Templates/ChannelTypeIllustration.js +13 -1
  114. package/v2Containers/Templates/_templates.scss +202 -56
  115. package/v2Containers/Templates/actions.js +2 -1
  116. package/v2Containers/Templates/constants.js +1 -0
  117. package/v2Containers/Templates/index.js +278 -128
  118. package/v2Containers/Templates/messages.js +24 -4
  119. package/v2Containers/Templates/reducer.js +2 -0
  120. package/v2Containers/Templates/tests/index.test.js +10 -0
  121. package/v2Containers/TemplatesV2/index.js +8 -1
  122. package/v2Containers/TemplatesV2/messages.js +4 -0
  123. package/v2Containers/WebPush/Create/components/BrandIconSection.js +108 -0
  124. package/v2Containers/WebPush/Create/components/ButtonForm.js +172 -0
  125. package/v2Containers/WebPush/Create/components/ButtonItem.js +101 -0
  126. package/v2Containers/WebPush/Create/components/ButtonList.js +145 -0
  127. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.js +164 -0
  128. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.test.js +463 -0
  129. package/v2Containers/WebPush/Create/components/FormActions.js +54 -0
  130. package/v2Containers/WebPush/Create/components/FormActions.test.js +163 -0
  131. package/v2Containers/WebPush/Create/components/MediaSection.js +142 -0
  132. package/v2Containers/WebPush/Create/components/MediaSection.test.js +341 -0
  133. package/v2Containers/WebPush/Create/components/MessageSection.js +103 -0
  134. package/v2Containers/WebPush/Create/components/MessageSection.test.js +268 -0
  135. package/v2Containers/WebPush/Create/components/NotificationTitleSection.js +87 -0
  136. package/v2Containers/WebPush/Create/components/NotificationTitleSection.test.js +210 -0
  137. package/v2Containers/WebPush/Create/components/TemplateNameSection.js +54 -0
  138. package/v2Containers/WebPush/Create/components/TemplateNameSection.test.js +143 -0
  139. package/v2Containers/WebPush/Create/components/__snapshots__/ButtonsLinksSection.test.js.snap +86 -0
  140. package/v2Containers/WebPush/Create/components/__snapshots__/FormActions.test.js.snap +16 -0
  141. package/v2Containers/WebPush/Create/components/__snapshots__/MediaSection.test.js.snap +41 -0
  142. package/v2Containers/WebPush/Create/components/__snapshots__/MessageSection.test.js.snap +54 -0
  143. package/v2Containers/WebPush/Create/components/__snapshots__/NotificationTitleSection.test.js.snap +37 -0
  144. package/v2Containers/WebPush/Create/components/__snapshots__/TemplateNameSection.test.js.snap +21 -0
  145. package/v2Containers/WebPush/Create/components/_buttons.scss +246 -0
  146. package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +554 -0
  147. package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +607 -0
  148. package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +633 -0
  149. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +666 -0
  150. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +74 -0
  151. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +78 -0
  152. package/v2Containers/WebPush/Create/hooks/useButtonManagement.js +138 -0
  153. package/v2Containers/WebPush/Create/hooks/useButtonManagement.test.js +406 -0
  154. package/v2Containers/WebPush/Create/hooks/useCharacterCount.js +30 -0
  155. package/v2Containers/WebPush/Create/hooks/useCharacterCount.test.js +151 -0
  156. package/v2Containers/WebPush/Create/hooks/useImageUpload.js +104 -0
  157. package/v2Containers/WebPush/Create/hooks/useImageUpload.test.js +538 -0
  158. package/v2Containers/WebPush/Create/hooks/useTagManagement.js +122 -0
  159. package/v2Containers/WebPush/Create/hooks/useTagManagement.test.js +633 -0
  160. package/v2Containers/WebPush/Create/index.js +1056 -0
  161. package/v2Containers/WebPush/Create/index.scss +134 -0
  162. package/v2Containers/WebPush/Create/messages.js +203 -0
  163. package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +228 -0
  164. package/v2Containers/WebPush/Create/preview/NotificationContainer.js +294 -0
  165. package/v2Containers/WebPush/Create/preview/PreviewContent.js +90 -0
  166. package/v2Containers/WebPush/Create/preview/PreviewControls.js +305 -0
  167. package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +23 -0
  168. package/v2Containers/WebPush/Create/preview/WebPushPreview.js +150 -0
  169. package/v2Containers/WebPush/Create/preview/assets/Light.svg +53 -0
  170. package/v2Containers/WebPush/Create/preview/assets/Top.svg +5 -0
  171. package/v2Containers/WebPush/Create/preview/assets/android-arrow-down.svg +9 -0
  172. package/v2Containers/WebPush/Create/preview/assets/android-arrow-up.svg +9 -0
  173. package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
  174. package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
  175. package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +106 -0
  176. package/v2Containers/WebPush/Create/preview/assets/iOS.svg +26 -0
  177. package/v2Containers/WebPush/Create/preview/assets/macos-arrow-down-icon.svg +9 -0
  178. package/v2Containers/WebPush/Create/preview/assets/macos-triple-dot-icon.svg +9 -0
  179. package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +18 -0
  180. package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +29 -0
  181. package/v2Containers/WebPush/Create/preview/assets/windows-close-icon.svg +9 -0
  182. package/v2Containers/WebPush/Create/preview/assets/windows-triple-dot-icon.svg +9 -0
  183. package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +47 -0
  184. package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +141 -0
  185. package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +45 -0
  186. package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +68 -0
  187. package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +61 -0
  188. package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +99 -0
  189. package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +733 -0
  190. package/v2Containers/WebPush/Create/preview/components/tests/WindowsChromeExpanded.test.js +571 -0
  191. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +81 -0
  192. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/WindowsChromeExpanded.test.js.snap +81 -0
  193. package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +50 -0
  194. package/v2Containers/WebPush/Create/preview/constants.js +637 -0
  195. package/v2Containers/WebPush/Create/preview/notification-container.scss +79 -0
  196. package/v2Containers/WebPush/Create/preview/preview.scss +351 -0
  197. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +370 -0
  198. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +12 -0
  199. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +12 -0
  200. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +12 -0
  201. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +47 -0
  202. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +11 -0
  203. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +11 -0
  204. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +11 -0
  205. package/v2Containers/WebPush/Create/preview/styles/_base.scss +207 -0
  206. package/v2Containers/WebPush/Create/preview/styles/_ios.scss +153 -0
  207. package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +107 -0
  208. package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +101 -0
  209. package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +229 -0
  210. package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +909 -0
  211. package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +1081 -0
  212. package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +723 -0
  213. package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +943 -0
  214. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +131 -0
  215. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +112 -0
  216. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +144 -0
  217. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +129 -0
  218. package/v2Containers/WebPush/Create/utils/payloadBuilder.js +94 -0
  219. package/v2Containers/WebPush/Create/utils/payloadBuilder.test.js +390 -0
  220. package/v2Containers/WebPush/Create/utils/previewUtils.js +89 -0
  221. package/v2Containers/WebPush/Create/utils/urlValidation.js +115 -0
  222. package/v2Containers/WebPush/Create/utils/urlValidation.test.js +449 -0
  223. package/v2Containers/WebPush/Create/utils/validation.js +75 -0
  224. package/v2Containers/WebPush/Create/utils/validation.test.js +283 -0
  225. package/v2Containers/WebPush/actions.js +60 -0
  226. package/v2Containers/WebPush/constants.js +128 -0
  227. package/v2Containers/WebPush/index.js +2 -0
  228. package/v2Containers/WebPush/reducer.js +104 -0
  229. package/v2Containers/WebPush/sagas.js +119 -0
  230. package/v2Containers/WebPush/selectors.js +65 -0
  231. package/v2Containers/WebPush/tests/reducer.test.js +863 -0
  232. package/v2Containers/WebPush/tests/sagas.test.js +566 -0
  233. package/v2Containers/WebPush/tests/selectors.test.js +843 -0
  234. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +528 -431
  235. package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -254
  236. package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -362
  237. package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
  238. package/v2Containers/BeePopupEditor/constants.js +0 -10
  239. package/v2Containers/BeePopupEditor/index.js +0 -193
  240. package/v2Containers/BeePopupEditor/tests/index.test.js +0 -627
  241. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +0 -1045
  242. package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +0 -376
  243. package/v2Containers/InApp/__tests__/sagas.test.js +0 -363
  244. package/v2Containers/InApp/tests/selectors.test.js +0 -612
  245. package/v2Containers/InAppWrapper/components/InAppWrapperView.js +0 -162
  246. package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +0 -267
  247. package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +0 -9
  248. package/v2Containers/InAppWrapper/constants.js +0 -16
  249. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +0 -473
  250. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +0 -198
  251. package/v2Containers/InAppWrapper/index.js +0 -148
  252. package/v2Containers/InAppWrapper/messages.js +0 -49
  253. package/v2Containers/InappAdvance/index.js +0 -1099
  254. package/v2Containers/InappAdvance/index.scss +0 -10
  255. package/v2Containers/InappAdvance/tests/index.test.js +0 -448
@@ -1,10 +0,0 @@
1
- @import '~@capillarytech/cap-ui-library/styles/_variables.scss';
2
- .cap-inapp-creatives {
3
- #inapp-layout-dropdown {
4
- width: 20.5rem;
5
- }
6
- .inapp-creative-layout {
7
- margin-top: $CAP_SPACE_04;
8
- margin-bottom: $CAP_SPACE_08;
9
- }
10
- }
@@ -1,448 +0,0 @@
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
- });