@capillarytech/creatives-library 8.0.257 → 8.0.258

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 (278) hide show
  1. package/assets/Android.png +0 -0
  2. package/assets/iOS.png +0 -0
  3. package/constants/unified.js +2 -2
  4. package/initialReducer.js +0 -2
  5. package/package.json +1 -1
  6. package/services/api.js +5 -10
  7. package/services/tests/api.test.js +0 -34
  8. package/translations/en.json +4 -3
  9. package/utils/common.js +6 -5
  10. package/utils/commonUtils.js +5 -28
  11. package/utils/imageUrlUpload.js +141 -0
  12. package/utils/tests/commonUtil.test.js +0 -224
  13. package/utils/tests/transformerUtils.test.js +297 -0
  14. package/utils/transformTemplateConfig.js +10 -0
  15. package/utils/transformerUtils.js +40 -0
  16. package/v2Components/CapDeviceContent/index.js +56 -61
  17. package/v2Components/CapImageUpload/constants.js +2 -0
  18. package/v2Components/CapImageUpload/index.js +65 -16
  19. package/v2Components/CapImageUpload/index.scss +4 -1
  20. package/v2Components/CapImageUpload/messages.js +5 -1
  21. package/v2Components/CapImageUrlUpload/constants.js +26 -0
  22. package/v2Components/CapImageUrlUpload/index.js +365 -0
  23. package/v2Components/CapImageUrlUpload/index.scss +35 -0
  24. package/v2Components/CapImageUrlUpload/messages.js +47 -0
  25. package/v2Components/CapTagList/index.js +1 -6
  26. package/v2Components/CapTagListWithInput/index.js +1 -5
  27. package/v2Components/CapTagListWithInput/messages.js +1 -1
  28. package/v2Components/CapWhatsappCTA/tests/index.test.js +0 -5
  29. package/v2Components/ErrorInfoNote/index.js +72 -457
  30. package/v2Components/ErrorInfoNote/messages.js +6 -36
  31. package/v2Components/ErrorInfoNote/style.scss +6 -282
  32. package/v2Components/FormBuilder/tests/index.test.js +4 -13
  33. package/v2Components/HtmlEditor/HTMLEditor.js +94 -547
  34. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1441
  35. package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +16 -27
  36. package/v2Components/HtmlEditor/_htmlEditor.scss +45 -108
  37. package/v2Components/HtmlEditor/_index.lazy.scss +1 -0
  38. package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +102 -23
  39. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +140 -148
  40. package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +1 -2
  41. package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
  42. package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +0 -9
  43. package/v2Components/HtmlEditor/components/EditorToolbar/index.js +4 -4
  44. package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +0 -22
  45. package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +7 -4
  46. package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +45 -35
  47. package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +3 -1
  48. package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
  49. package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +6 -7
  50. package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +6 -3
  51. package/v2Components/HtmlEditor/components/PreviewPane/index.js +43 -22
  52. package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
  53. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +152 -0
  54. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/_validationErrorDisplay.scss +0 -1
  55. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +31 -49
  56. package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +34 -50
  57. package/v2Components/HtmlEditor/components/ValidationPanel/index.js +41 -70
  58. package/v2Components/HtmlEditor/constants.js +20 -42
  59. package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +16 -373
  60. package/v2Components/HtmlEditor/hooks/__tests__/useValidation.test.js +0 -103
  61. package/v2Components/HtmlEditor/hooks/useEditorContent.js +2 -5
  62. package/v2Components/HtmlEditor/hooks/useInAppContent.js +146 -88
  63. package/v2Components/HtmlEditor/hooks/useValidation.js +53 -189
  64. package/v2Components/HtmlEditor/index.js +1 -1
  65. package/v2Components/HtmlEditor/messages.js +94 -92
  66. package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +45 -94
  67. package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +0 -134
  68. package/v2Components/HtmlEditor/utils/contentSanitizer.js +41 -40
  69. package/v2Components/HtmlEditor/utils/htmlValidator.js +72 -71
  70. package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +102 -134
  71. package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +25 -23
  72. package/v2Components/HtmlEditor/utils/validationAdapter.js +41 -66
  73. package/v2Components/MobilePushPreviewV2/index.js +7 -32
  74. package/v2Components/TemplatePreview/_templatePreview.scss +24 -55
  75. package/v2Components/TemplatePreview/index.js +32 -47
  76. package/v2Components/TemplatePreview/messages.js +0 -4
  77. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +0 -1
  78. package/v2Containers/App/constants.js +5 -0
  79. package/v2Containers/BeeEditor/index.js +90 -172
  80. package/v2Containers/Cap/tests/__snapshots__/index.test.js.snap +4 -3
  81. package/v2Containers/CreativesContainer/SlideBoxContent.js +107 -129
  82. package/v2Containers/CreativesContainer/SlideBoxFooter.js +13 -163
  83. package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -2
  84. package/v2Containers/CreativesContainer/constants.js +3 -1
  85. package/v2Containers/CreativesContainer/index.js +214 -239
  86. package/v2Containers/CreativesContainer/messages.js +4 -8
  87. package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +210 -0
  88. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +2 -11
  89. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +354 -38
  90. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +0 -106
  91. package/v2Containers/Email/actions.js +0 -7
  92. package/v2Containers/Email/constants.js +1 -5
  93. package/v2Containers/Email/index.js +29 -234
  94. package/v2Containers/Email/messages.js +0 -32
  95. package/v2Containers/Email/reducer.js +1 -12
  96. package/v2Containers/Email/sagas.js +7 -61
  97. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +0 -2
  98. package/v2Containers/Email/tests/reducer.test.js +0 -46
  99. package/v2Containers/Email/tests/sagas.test.js +29 -320
  100. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +21 -211
  101. package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +74 -40
  102. package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +67 -2
  103. package/v2Containers/EmailWrapper/constants.js +0 -2
  104. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +77 -629
  105. package/v2Containers/EmailWrapper/index.js +23 -103
  106. package/v2Containers/EmailWrapper/messages.js +1 -65
  107. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +214 -0
  108. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +77 -594
  109. package/v2Containers/InApp/actions.js +0 -7
  110. package/v2Containers/InApp/constants.js +4 -20
  111. package/v2Containers/InApp/index.js +359 -802
  112. package/v2Containers/InApp/index.scss +3 -4
  113. package/v2Containers/InApp/messages.js +3 -7
  114. package/v2Containers/InApp/reducer.js +3 -21
  115. package/v2Containers/InApp/sagas.js +9 -29
  116. package/v2Containers/InApp/selectors.js +5 -25
  117. package/v2Containers/InApp/tests/index.test.js +50 -154
  118. package/v2Containers/InApp/tests/reducer.test.js +0 -34
  119. package/v2Containers/InApp/tests/sagas.test.js +9 -61
  120. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +36 -15
  121. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +8 -8
  122. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +100 -77
  123. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +72 -63
  124. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +250 -190
  125. package/v2Containers/SmsTrai/Create/tests/__snapshots__/index.test.js.snap +16 -12
  126. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +48 -40
  127. package/v2Containers/TagList/index.js +19 -62
  128. package/v2Containers/Templates/ChannelTypeIllustration.js +13 -1
  129. package/v2Containers/Templates/_templates.scss +202 -56
  130. package/v2Containers/Templates/actions.js +2 -1
  131. package/v2Containers/Templates/constants.js +1 -0
  132. package/v2Containers/Templates/index.js +278 -123
  133. package/v2Containers/Templates/messages.js +24 -4
  134. package/v2Containers/Templates/reducer.js +2 -0
  135. package/v2Containers/Templates/tests/index.test.js +10 -0
  136. package/v2Containers/TemplatesV2/index.js +15 -7
  137. package/v2Containers/TemplatesV2/messages.js +4 -0
  138. package/v2Containers/WebPush/Create/components/BrandIconSection.js +108 -0
  139. package/v2Containers/WebPush/Create/components/ButtonForm.js +172 -0
  140. package/v2Containers/WebPush/Create/components/ButtonItem.js +101 -0
  141. package/v2Containers/WebPush/Create/components/ButtonList.js +145 -0
  142. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.js +164 -0
  143. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.test.js +463 -0
  144. package/v2Containers/WebPush/Create/components/FormActions.js +54 -0
  145. package/v2Containers/WebPush/Create/components/FormActions.test.js +163 -0
  146. package/v2Containers/WebPush/Create/components/MediaSection.js +142 -0
  147. package/v2Containers/WebPush/Create/components/MediaSection.test.js +341 -0
  148. package/v2Containers/WebPush/Create/components/MessageSection.js +103 -0
  149. package/v2Containers/WebPush/Create/components/MessageSection.test.js +268 -0
  150. package/v2Containers/WebPush/Create/components/NotificationTitleSection.js +87 -0
  151. package/v2Containers/WebPush/Create/components/NotificationTitleSection.test.js +210 -0
  152. package/v2Containers/WebPush/Create/components/TemplateNameSection.js +54 -0
  153. package/v2Containers/WebPush/Create/components/TemplateNameSection.test.js +143 -0
  154. package/v2Containers/WebPush/Create/components/__snapshots__/ButtonsLinksSection.test.js.snap +86 -0
  155. package/v2Containers/WebPush/Create/components/__snapshots__/FormActions.test.js.snap +16 -0
  156. package/v2Containers/WebPush/Create/components/__snapshots__/MediaSection.test.js.snap +41 -0
  157. package/v2Containers/WebPush/Create/components/__snapshots__/MessageSection.test.js.snap +54 -0
  158. package/v2Containers/WebPush/Create/components/__snapshots__/NotificationTitleSection.test.js.snap +37 -0
  159. package/v2Containers/WebPush/Create/components/__snapshots__/TemplateNameSection.test.js.snap +21 -0
  160. package/v2Containers/WebPush/Create/components/_buttons.scss +246 -0
  161. package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +554 -0
  162. package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +607 -0
  163. package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +633 -0
  164. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +666 -0
  165. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +74 -0
  166. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +78 -0
  167. package/v2Containers/WebPush/Create/hooks/useButtonManagement.js +138 -0
  168. package/v2Containers/WebPush/Create/hooks/useButtonManagement.test.js +406 -0
  169. package/v2Containers/WebPush/Create/hooks/useCharacterCount.js +30 -0
  170. package/v2Containers/WebPush/Create/hooks/useCharacterCount.test.js +151 -0
  171. package/v2Containers/WebPush/Create/hooks/useImageUpload.js +104 -0
  172. package/v2Containers/WebPush/Create/hooks/useImageUpload.test.js +538 -0
  173. package/v2Containers/WebPush/Create/hooks/useTagManagement.js +122 -0
  174. package/v2Containers/WebPush/Create/hooks/useTagManagement.test.js +633 -0
  175. package/v2Containers/WebPush/Create/index.js +1148 -0
  176. package/v2Containers/WebPush/Create/index.scss +134 -0
  177. package/v2Containers/WebPush/Create/messages.js +203 -0
  178. package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +228 -0
  179. package/v2Containers/WebPush/Create/preview/NotificationContainer.js +294 -0
  180. package/v2Containers/WebPush/Create/preview/PreviewContent.js +90 -0
  181. package/v2Containers/WebPush/Create/preview/PreviewControls.js +305 -0
  182. package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +23 -0
  183. package/v2Containers/WebPush/Create/preview/WebPushPreview.js +155 -0
  184. package/v2Containers/WebPush/Create/preview/assets/Light.svg +53 -0
  185. package/v2Containers/WebPush/Create/preview/assets/Top.svg +5 -0
  186. package/v2Containers/WebPush/Create/preview/assets/android-arrow-down.svg +9 -0
  187. package/v2Containers/WebPush/Create/preview/assets/android-arrow-up.svg +9 -0
  188. package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
  189. package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
  190. package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +106 -0
  191. package/v2Containers/WebPush/Create/preview/assets/iOS.svg +26 -0
  192. package/v2Containers/WebPush/Create/preview/assets/macos-arrow-down-icon.svg +9 -0
  193. package/v2Containers/WebPush/Create/preview/assets/macos-triple-dot-icon.svg +9 -0
  194. package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +18 -0
  195. package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +29 -0
  196. package/v2Containers/WebPush/Create/preview/assets/windows-close-icon.svg +9 -0
  197. package/v2Containers/WebPush/Create/preview/assets/windows-triple-dot-icon.svg +9 -0
  198. package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +47 -0
  199. package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +141 -0
  200. package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +45 -0
  201. package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +68 -0
  202. package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +61 -0
  203. package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +99 -0
  204. package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +733 -0
  205. package/v2Containers/WebPush/Create/preview/components/tests/WindowsChromeExpanded.test.js +571 -0
  206. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +81 -0
  207. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/WindowsChromeExpanded.test.js.snap +81 -0
  208. package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +50 -0
  209. package/v2Containers/WebPush/Create/preview/constants.js +637 -0
  210. package/v2Containers/WebPush/Create/preview/notification-container.scss +79 -0
  211. package/v2Containers/WebPush/Create/preview/preview.scss +351 -0
  212. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +370 -0
  213. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +12 -0
  214. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +12 -0
  215. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +12 -0
  216. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +47 -0
  217. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +11 -0
  218. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +11 -0
  219. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +11 -0
  220. package/v2Containers/WebPush/Create/preview/styles/_base.scss +207 -0
  221. package/v2Containers/WebPush/Create/preview/styles/_ios.scss +153 -0
  222. package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +107 -0
  223. package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +101 -0
  224. package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +229 -0
  225. package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +909 -0
  226. package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +1081 -0
  227. package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +723 -0
  228. package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +1327 -0
  229. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +131 -0
  230. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +112 -0
  231. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +144 -0
  232. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +129 -0
  233. package/v2Containers/WebPush/Create/utils/payloadBuilder.js +96 -0
  234. package/v2Containers/WebPush/Create/utils/payloadBuilder.test.js +396 -0
  235. package/v2Containers/WebPush/Create/utils/previewUtils.js +89 -0
  236. package/v2Containers/WebPush/Create/utils/urlValidation.js +115 -0
  237. package/v2Containers/WebPush/Create/utils/urlValidation.test.js +449 -0
  238. package/v2Containers/WebPush/Create/utils/validation.js +75 -0
  239. package/v2Containers/WebPush/Create/utils/validation.test.js +283 -0
  240. package/v2Containers/WebPush/actions.js +60 -0
  241. package/v2Containers/WebPush/constants.js +132 -0
  242. package/v2Containers/WebPush/index.js +2 -0
  243. package/v2Containers/WebPush/reducer.js +104 -0
  244. package/v2Containers/WebPush/sagas.js +119 -0
  245. package/v2Containers/WebPush/selectors.js +65 -0
  246. package/v2Containers/WebPush/tests/reducer.test.js +863 -0
  247. package/v2Containers/WebPush/tests/sagas.test.js +566 -0
  248. package/v2Containers/WebPush/tests/selectors.test.js +960 -0
  249. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +1272 -768
  250. package/v2Components/ErrorInfoNote/constants.js +0 -1
  251. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +0 -874
  252. package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +0 -6
  253. package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -255
  254. package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -364
  255. package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
  256. package/v2Components/HtmlEditor/utils/validationConstants.js +0 -40
  257. package/v2Containers/BeePopupEditor/_beePopupEditor.scss +0 -14
  258. package/v2Containers/BeePopupEditor/constants.js +0 -10
  259. package/v2Containers/BeePopupEditor/index.js +0 -194
  260. package/v2Containers/BeePopupEditor/tests/index.test.js +0 -627
  261. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +0 -1285
  262. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +0 -1880
  263. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +0 -520
  264. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +0 -643
  265. package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +0 -376
  266. package/v2Containers/InApp/__tests__/sagas.test.js +0 -363
  267. package/v2Containers/InApp/tests/selectors.test.js +0 -612
  268. package/v2Containers/InAppWrapper/components/InAppWrapperView.js +0 -151
  269. package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +0 -267
  270. package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +0 -23
  271. package/v2Containers/InAppWrapper/constants.js +0 -16
  272. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +0 -473
  273. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +0 -198
  274. package/v2Containers/InAppWrapper/index.js +0 -148
  275. package/v2Containers/InAppWrapper/messages.js +0 -49
  276. package/v2Containers/InappAdvance/index.js +0 -1099
  277. package/v2Containers/InappAdvance/index.scss +0 -10
  278. package/v2Containers/InappAdvance/tests/index.test.js +0 -448
@@ -1,520 +0,0 @@
1
- /**
2
- * EmailWrapperView Component Tests
3
- *
4
- * Tests to cover all uncovered lines in EmailWrapperView component
5
- */
6
-
7
- import React from 'react';
8
- import { render, screen, fireEvent } from '@testing-library/react';
9
- import '@testing-library/jest-dom';
10
- import { IntlProvider } from 'react-intl';
11
- import EmailWrapperView from '../EmailWrapperView';
12
- import { EMAIL_CREATE_MODES, STEPS } from '../../constants';
13
-
14
- // Mock dependencies
15
- jest.mock('../../../../utils/common', () => ({
16
- hasSupportCKEditor: jest.fn(() => false),
17
- }));
18
-
19
- jest.mock('../../../Email', () => ({
20
- EmailWithoutSaga: function MockEmailWithoutSaga(props) {
21
- return <div data-testid="email-without-saga">Email Component</div>;
22
- },
23
- }));
24
-
25
- jest.mock('../../../../v2Components/CmsTemplatesComponent', () => {
26
- const React = require('react');
27
- return function MockCmsTemplatesComponent(props) {
28
- return React.createElement('div', { 'data-testid': 'cms-templates' }, 'CMS Templates');
29
- };
30
- });
31
-
32
- jest.mock('../EmailHTMLEditor', () => {
33
- const React = require('react');
34
- return React.forwardRef((props, ref) => {
35
- React.useImperativeHandle(ref, () => ({
36
- getFormDataForPreview: jest.fn(() => ({ subject: 'Test', content: '<p>Test</p>' })),
37
- getContentForPreview: jest.fn(() => '<p>Test</p>'),
38
- }));
39
-
40
- return <div data-testid="email-html-editor">HTML Editor</div>;
41
- });
42
- });
43
-
44
- jest.mock('../../../../v2Components/TestAndPreviewSlidebox', () => {
45
- const React = require('react');
46
- return function MockTestAndPreviewSlidebox(props) {
47
- return React.createElement('div', { 'data-testid': 'test-preview-slidebox' },
48
- React.createElement('button', { onClick: props.onClose, 'data-testid': 'close-preview' }, 'Close')
49
- );
50
- };
51
- });
52
-
53
- // Mock CapRadioCard to render panes with title/content
54
- jest.mock('@capillarytech/cap-ui-library/CapRadioCard', () => {
55
- const React = require('react');
56
- return function MockCapRadioCard({ panes, selected, onChange }) {
57
- return (
58
- <div data-testid="cap-radio-card">
59
- {panes && panes.map((pane) => (
60
- <label key={pane.value || pane.key} data-testid={`radio-option-${pane.value || pane.key}`}>
61
- <input
62
- type="radio"
63
- value={pane.value || pane.key}
64
- checked={(pane.value || pane.key) === selected}
65
- onChange={onChange}
66
- />
67
- <span>{pane.title || pane.label}</span>
68
- {pane.content && <span>{pane.content}</span>}
69
- </label>
70
- ))}
71
- </div>
72
- );
73
- };
74
- });
75
-
76
- // Mock ComponentWithLabelHOC to just return the component
77
- jest.mock('@capillarytech/cap-ui-library/assets/HOCs/ComponentWithLabelHOC', () => {
78
- return (Component) => Component;
79
- });
80
-
81
- // Mock CapUploader to render children properly
82
- jest.mock('@capillarytech/cap-ui-library/CapUploader', () => {
83
- const React = require('react');
84
- return function MockCapUploader({ children, onChange, accept, showUploadList }) {
85
- return (
86
- <div data-testid="cap-uploader">
87
- {children}
88
- </div>
89
- );
90
- };
91
- });
92
-
93
- // Mock CapButton to properly handle disabled prop
94
- jest.mock('@capillarytech/cap-ui-library/CapButton', () => {
95
- const React = require('react');
96
- return function MockCapButton({ children, disabled, ...props }) {
97
- return (
98
- <button disabled={disabled} {...props}>
99
- {children}
100
- </button>
101
- );
102
- };
103
- });
104
-
105
- const defaultProps = {
106
- isUploading: false,
107
- emailCreateMode: EMAIL_CREATE_MODES.HTML_EDITOR,
108
- step: STEPS.CREATE_TEMPLATE_CONTENT,
109
- isFullMode: true,
110
- templateName: 'Test Template',
111
- onTemplateNameChange: jest.fn(),
112
- isTemplateNameEmpty: false,
113
- modes: [
114
- { value: EMAIL_CREATE_MODES.HTML_EDITOR, title: 'HTML Editor', content: 'HTML Editor Description' },
115
- { value: EMAIL_CREATE_MODES.DRAG_DROP, title: 'Drag & Drop', content: 'Drag & Drop Description' },
116
- { value: EMAIL_CREATE_MODES.UPLOAD, title: 'Upload', content: 'Upload Description' },
117
- ],
118
- onChange: jest.fn(),
119
- EmailLayout: null,
120
- modeContent: {},
121
- useFileUpload: jest.fn(),
122
- uploadButtonLabel: 'Upload File',
123
- isShowEmailCreate: true,
124
- emailProps: {
125
- editor: 'HTML',
126
- selectedEditorMode: EMAIL_CREATE_MODES.HTML_EDITOR,
127
- },
128
- cmsTemplatesProps: {},
129
- metaEntities: {},
130
- loadingTags: false,
131
- injectedTags: {},
132
- globalActions: {},
133
- supportedTags: [],
134
- getDefaultTags: 'default',
135
- location: { query: {}, pathname: '/email/create' },
136
- currentOrgDetails: {},
137
- forwardedTags: {},
138
- selectedOfferDetails: [],
139
- eventContextTags: [],
140
- getFormdata: jest.fn(),
141
- isGetFormData: false,
142
- getLiquidTags: jest.fn(),
143
- showLiquidErrorInFooter: jest.fn(),
144
- onValidationFail: jest.fn(),
145
- emailActions: {},
146
- Email: {},
147
- templateData: null,
148
- params: {},
149
- fetchingLiquidTags: false,
150
- createTemplateInProgress: false,
151
- fetchingCmsData: false,
152
- setIsLoadingContent: jest.fn(),
153
- showTestAndPreviewSlidebox: false,
154
- handleCloseTestAndPreview: jest.fn(),
155
- showTemplateName: jest.fn(),
156
- onHtmlEditorValidationStateChange: jest.fn(),
157
- moduleType: null,
158
- };
159
-
160
- const renderWithIntl = (props = {}) => {
161
- const mergedProps = { ...defaultProps, ...props };
162
- return render(
163
- <IntlProvider locale="en" messages={{}}>
164
- <EmailWrapperView {...mergedProps} />
165
- </IntlProvider>
166
- );
167
- };
168
-
169
- describe('EmailWrapperView', () => {
170
- beforeEach(() => {
171
- jest.clearAllMocks();
172
- });
173
-
174
- describe('Mode Selection UI', () => {
175
- it('renders mode selection when step is MODE_SELECTION', () => {
176
- renderWithIntl({ step: STEPS.MODE_SELECTION });
177
- expect(screen.getByText('HTML Editor')).toBeInTheDocument();
178
- });
179
-
180
- it('renders template name input in full mode', () => {
181
- renderWithIntl({
182
- step: STEPS.MODE_SELECTION,
183
- isFullMode: true,
184
- templateName: 'Test Template',
185
- });
186
- // Template name input should be rendered
187
- const inputs = screen.getAllByDisplayValue('Test Template');
188
- expect(inputs.length).toBeGreaterThan(0);
189
- });
190
-
191
- it('does not render template name input in library mode', () => {
192
- renderWithIntl({
193
- step: STEPS.MODE_SELECTION,
194
- isFullMode: false,
195
- });
196
- // Template name input should not be rendered
197
- });
198
-
199
- it('renders upload button when upload mode is selected', () => {
200
- renderWithIntl({
201
- step: STEPS.MODE_SELECTION,
202
- emailCreateMode: EMAIL_CREATE_MODES.UPLOAD,
203
- });
204
- expect(screen.getByText('Upload File')).toBeInTheDocument();
205
- });
206
-
207
- it('disables upload button when template name is empty in full mode', () => {
208
- renderWithIntl({
209
- step: STEPS.MODE_SELECTION,
210
- emailCreateMode: EMAIL_CREATE_MODES.UPLOAD,
211
- isFullMode: true,
212
- isTemplateNameEmpty: true,
213
- });
214
- // CapButton is rendered inside CapUploader, find it by text
215
- const uploadButton = screen.getByText('Upload File');
216
- expect(uploadButton).toBeDisabled();
217
- });
218
-
219
- it('shows error when template name is empty in full mode', () => {
220
- renderWithIntl({
221
- step: STEPS.MODE_SELECTION,
222
- emailCreateMode: EMAIL_CREATE_MODES.UPLOAD,
223
- isFullMode: true,
224
- isTemplateNameEmpty: true,
225
- });
226
- // Error message should be displayed
227
- });
228
-
229
- it('shows uploaded file name when EmailLayout exists', () => {
230
- const modeContent = { file: { name: 'test.html' } };
231
- renderWithIntl({
232
- step: STEPS.MODE_SELECTION,
233
- emailCreateMode: EMAIL_CREATE_MODES.UPLOAD,
234
- EmailLayout: { html: '<p>Content</p>' },
235
- modeContent,
236
- });
237
- expect(screen.getByText('test.html')).toBeInTheDocument();
238
- });
239
-
240
- it('handles mode change', () => {
241
- const onChange = jest.fn();
242
- renderWithIntl({
243
- step: STEPS.MODE_SELECTION,
244
- onChange,
245
- });
246
- // Mode change would be triggered by CapRadioCard
247
- });
248
-
249
- it('handles template name change', () => {
250
- const onTemplateNameChange = jest.fn();
251
- renderWithIntl({
252
- step: STEPS.MODE_SELECTION,
253
- onTemplateNameChange,
254
- isFullMode: true,
255
- });
256
- // Template name change would be triggered by input
257
- });
258
- });
259
-
260
- describe('Content Creation UI', () => {
261
- it('renders HTML Editor when HTML Editor mode is selected', () => {
262
- renderWithIntl({
263
- step: STEPS.CREATE_TEMPLATE_CONTENT,
264
- isShowEmailCreate: true,
265
- });
266
- expect(screen.getByTestId('email-html-editor')).toBeInTheDocument();
267
- });
268
-
269
- it('renders EmailWithoutSaga when BEE Editor mode is selected', () => {
270
- const { hasSupportCKEditor } = require('../../../../utils/common');
271
- hasSupportCKEditor.mockReturnValueOnce(true);
272
-
273
- renderWithIntl({
274
- step: STEPS.CREATE_TEMPLATE_CONTENT,
275
- isShowEmailCreate: true,
276
- emailProps: {
277
- editor: 'BEE',
278
- selectedEditorMode: null,
279
- },
280
- });
281
- expect(screen.getByTestId('email-without-saga')).toBeInTheDocument();
282
- });
283
-
284
- it('renders CMS Templates when not showing email create', () => {
285
- renderWithIntl({
286
- step: STEPS.CREATE_TEMPLATE_CONTENT,
287
- isShowEmailCreate: false,
288
- });
289
- expect(screen.getByTestId('cms-templates')).toBeInTheDocument();
290
- });
291
-
292
- it('renders HTML Editor in edit mode when not explicitly BEE', () => {
293
- renderWithIntl({
294
- step: STEPS.CREATE_TEMPLATE_CONTENT,
295
- isShowEmailCreate: true,
296
- params: { id: '123' },
297
- location: { query: {}, pathname: '/email/edit/123' },
298
- });
299
- expect(screen.getByTestId('email-html-editor')).toBeInTheDocument();
300
- });
301
-
302
- it('renders BEE Editor in edit mode when explicitly BEE', () => {
303
- const { hasSupportCKEditor } = require('../../../../utils/common');
304
- hasSupportCKEditor.mockReturnValueOnce(true);
305
-
306
- renderWithIntl({
307
- step: STEPS.CREATE_TEMPLATE_CONTENT,
308
- isShowEmailCreate: true,
309
- params: { id: '123' },
310
- location: { query: {}, pathname: '/email/edit/123' },
311
- emailProps: {
312
- editor: 'BEE',
313
- selectedEditorMode: null,
314
- },
315
- });
316
- expect(screen.getByTestId('email-without-saga')).toBeInTheDocument();
317
- });
318
-
319
- it('renders HTML Editor when drag drop mode is selected in create', () => {
320
- renderWithIntl({
321
- step: STEPS.CREATE_TEMPLATE_CONTENT,
322
- isShowEmailCreate: true,
323
- emailCreateMode: EMAIL_CREATE_MODES.DRAG_DROP,
324
- emailProps: {
325
- editor: 'BEE',
326
- selectedEditorMode: null,
327
- },
328
- });
329
- // Should still render HTML Editor in new flow
330
- });
331
-
332
- it('renders HTML Editor when HTML_EDITOR mode is selected', () => {
333
- renderWithIntl({
334
- step: STEPS.CREATE_TEMPLATE_CONTENT,
335
- isShowEmailCreate: true,
336
- emailCreateMode: EMAIL_CREATE_MODES.HTML_EDITOR,
337
- emailProps: {
338
- selectedEditorMode: EMAIL_CREATE_MODES.HTML_EDITOR,
339
- },
340
- });
341
- expect(screen.getByTestId('email-html-editor')).toBeInTheDocument();
342
- });
343
- });
344
-
345
- describe('HTML Editor Props', () => {
346
- it('passes correct props to HTML Editor', () => {
347
- renderWithIntl({
348
- step: STEPS.CREATE_TEMPLATE_CONTENT,
349
- isShowEmailCreate: true,
350
- location: { query: { module: 'library' } },
351
- params: { id: '123' },
352
- templateName: 'Test Template',
353
- isFullMode: true,
354
- });
355
- expect(screen.getByTestId('email-html-editor')).toBeInTheDocument();
356
- });
357
-
358
- it('handles form data change callback', () => {
359
- const onTemplateNameChange = jest.fn();
360
- renderWithIntl({
361
- step: STEPS.CREATE_TEMPLATE_CONTENT,
362
- isShowEmailCreate: true,
363
- onTemplateNameChange,
364
- templateName: 'Old Name',
365
- });
366
- // Form data change would be triggered by HTML Editor
367
- });
368
- });
369
-
370
- describe('Test and Preview Slidebox', () => {
371
- it('renders TestAndPreviewSlidebox when shown', () => {
372
- renderWithIntl({
373
- step: STEPS.CREATE_TEMPLATE_CONTENT,
374
- isShowEmailCreate: true,
375
- showTestAndPreviewSlidebox: true,
376
- });
377
- expect(screen.getByTestId('test-preview-slidebox')).toBeInTheDocument();
378
- });
379
-
380
- it('does not render TestAndPreviewSlidebox when not shown', () => {
381
- renderWithIntl({
382
- step: STEPS.CREATE_TEMPLATE_CONTENT,
383
- isShowEmailCreate: true,
384
- showTestAndPreviewSlidebox: false,
385
- });
386
- expect(screen.queryByTestId('test-preview-slidebox')).not.toBeInTheDocument();
387
- });
388
-
389
- it('does not render TestAndPreviewSlidebox when not HTML Editor mode', () => {
390
- const { hasSupportCKEditor } = require('../../../../utils/common');
391
- hasSupportCKEditor.mockReturnValueOnce(true);
392
-
393
- renderWithIntl({
394
- step: STEPS.CREATE_TEMPLATE_CONTENT,
395
- isShowEmailCreate: true,
396
- showTestAndPreviewSlidebox: true,
397
- emailProps: {
398
- editor: 'BEE',
399
- selectedEditorMode: null,
400
- },
401
- });
402
- expect(screen.queryByTestId('test-preview-slidebox')).not.toBeInTheDocument();
403
- });
404
-
405
- it('handles close test and preview', () => {
406
- const handleCloseTestAndPreview = jest.fn();
407
- renderWithIntl({
408
- step: STEPS.CREATE_TEMPLATE_CONTENT,
409
- isShowEmailCreate: true,
410
- showTestAndPreviewSlidebox: true,
411
- handleCloseTestAndPreview,
412
- });
413
- const closeButton = screen.getByTestId('close-preview');
414
- fireEvent.click(closeButton);
415
- expect(handleCloseTestAndPreview).toHaveBeenCalled();
416
- });
417
-
418
- it('gets form data for preview from HTML Editor ref', () => {
419
- renderWithIntl({
420
- step: STEPS.CREATE_TEMPLATE_CONTENT,
421
- isShowEmailCreate: true,
422
- showTestAndPreviewSlidebox: true,
423
- });
424
- // Form data should be retrieved from ref
425
- expect(screen.getByTestId('test-preview-slidebox')).toBeInTheDocument();
426
- });
427
-
428
- it('gets content for preview from HTML Editor ref', () => {
429
- renderWithIntl({
430
- step: STEPS.CREATE_TEMPLATE_CONTENT,
431
- isShowEmailCreate: true,
432
- showTestAndPreviewSlidebox: true,
433
- });
434
- // Content should be retrieved from ref
435
- expect(screen.getByTestId('test-preview-slidebox')).toBeInTheDocument();
436
- });
437
- });
438
-
439
- describe('Loading State', () => {
440
- it('shows loading spinner when uploading', () => {
441
- renderWithIntl({
442
- step: STEPS.MODE_SELECTION,
443
- emailCreateMode: EMAIL_CREATE_MODES.UPLOAD,
444
- isUploading: true,
445
- });
446
- // Loading spinner should be shown
447
- });
448
-
449
- it('does not show loading spinner when not uploading', () => {
450
- renderWithIntl({
451
- step: STEPS.MODE_SELECTION,
452
- emailCreateMode: EMAIL_CREATE_MODES.HTML_EDITOR,
453
- isUploading: false,
454
- });
455
- // Loading spinner should not be shown
456
- });
457
- });
458
-
459
- describe('Edge Cases', () => {
460
- it('handles missing location params', () => {
461
- renderWithIntl({
462
- step: STEPS.CREATE_TEMPLATE_CONTENT,
463
- isShowEmailCreate: true,
464
- location: null,
465
- params: null,
466
- });
467
- expect(screen.getByTestId('email-html-editor')).toBeInTheDocument();
468
- });
469
-
470
- it('handles location with query id', () => {
471
- renderWithIntl({
472
- step: STEPS.CREATE_TEMPLATE_CONTENT,
473
- isShowEmailCreate: true,
474
- location: { query: { id: '123' }, pathname: '/email/create' },
475
- params: {},
476
- });
477
- expect(screen.getByTestId('email-html-editor')).toBeInTheDocument();
478
- });
479
-
480
- it('handles location with params id', () => {
481
- renderWithIntl({
482
- step: STEPS.CREATE_TEMPLATE_CONTENT,
483
- isShowEmailCreate: true,
484
- location: { query: {}, params: { id: '123' }, pathname: '/email/create' },
485
- params: {},
486
- });
487
- expect(screen.getByTestId('email-html-editor')).toBeInTheDocument();
488
- });
489
-
490
- it('handles pathname with /edit/', () => {
491
- renderWithIntl({
492
- step: STEPS.CREATE_TEMPLATE_CONTENT,
493
- isShowEmailCreate: true,
494
- location: { query: {}, pathname: '/email/edit/123' },
495
- params: {},
496
- });
497
- expect(screen.getByTestId('email-html-editor')).toBeInTheDocument();
498
- });
499
-
500
- it('handles empty EmailLayout gracefully', () => {
501
- renderWithIntl({
502
- step: STEPS.MODE_SELECTION,
503
- emailCreateMode: EMAIL_CREATE_MODES.UPLOAD,
504
- EmailLayout: {},
505
- modeContent: {},
506
- });
507
- // Should not crash
508
- });
509
-
510
- it('handles null htmlEditorRef methods gracefully', () => {
511
- // This would require mocking the ref to return null methods
512
- renderWithIntl({
513
- step: STEPS.CREATE_TEMPLATE_CONTENT,
514
- isShowEmailCreate: true,
515
- showTestAndPreviewSlidebox: true,
516
- });
517
- // Should handle gracefully if ref methods don't exist
518
- });
519
- });
520
- });