@capillarytech/creatives-library 8.0.263 → 8.0.265

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 (280) hide show
  1. package/assets/Android.png +0 -0
  2. package/assets/iOS.png +0 -0
  3. package/constants/unified.js +1 -3
  4. package/initialReducer.js +0 -2
  5. package/package.json +1 -1
  6. package/services/api.js +0 -15
  7. package/services/tests/api.test.js +0 -34
  8. package/tests/integration/TemplateCreation/TemplateCreation.integration.test.js +35 -17
  9. package/tests/integration/TemplateCreation/api-response.js +1 -31
  10. package/tests/integration/TemplateCreation/msw-handler.js +0 -2
  11. package/utils/common.js +0 -11
  12. package/utils/commonUtils.js +5 -28
  13. package/utils/tests/commonUtil.test.js +0 -224
  14. package/utils/tests/transformerUtils.test.js +0 -297
  15. package/utils/transformTemplateConfig.js +10 -0
  16. package/utils/transformerUtils.js +0 -40
  17. package/v2Components/CapDeviceContent/index.js +56 -61
  18. package/v2Components/CapImageUpload/constants.js +0 -2
  19. package/v2Components/CapImageUpload/index.js +16 -65
  20. package/v2Components/CapImageUpload/index.scss +1 -4
  21. package/v2Components/CapImageUpload/messages.js +1 -5
  22. package/v2Components/CapTagList/index.js +1 -6
  23. package/v2Components/CapTagListWithInput/index.js +1 -5
  24. package/v2Components/CapTagListWithInput/messages.js +1 -1
  25. package/v2Components/CapWhatsappCTA/tests/index.test.js +0 -5
  26. package/v2Components/ErrorInfoNote/index.js +72 -402
  27. package/v2Components/ErrorInfoNote/messages.js +6 -32
  28. package/v2Components/ErrorInfoNote/style.scss +6 -278
  29. package/v2Components/FormBuilder/tests/index.test.js +4 -13
  30. package/v2Components/HtmlEditor/HTMLEditor.js +99 -418
  31. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1882
  32. package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +16 -27
  33. package/v2Components/HtmlEditor/_htmlEditor.scss +45 -108
  34. package/v2Components/HtmlEditor/_index.lazy.scss +1 -0
  35. package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +102 -23
  36. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +140 -148
  37. package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +1 -2
  38. package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
  39. package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +1 -9
  40. package/v2Components/HtmlEditor/components/EditorToolbar/index.js +6 -31
  41. package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +0 -22
  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 +10 -7
  48. package/v2Components/HtmlEditor/components/PreviewPane/index.js +43 -22
  49. package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
  50. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +152 -0
  51. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/_validationErrorDisplay.scss +0 -18
  52. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +31 -36
  53. package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +34 -46
  54. package/v2Components/HtmlEditor/components/ValidationPanel/index.js +46 -52
  55. package/v2Components/HtmlEditor/constants.js +20 -45
  56. package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +16 -373
  57. package/v2Components/HtmlEditor/hooks/__tests__/useValidation.test.js +16 -351
  58. package/v2Components/HtmlEditor/hooks/useEditorContent.js +2 -5
  59. package/v2Components/HtmlEditor/hooks/useInAppContent.js +146 -88
  60. package/v2Components/HtmlEditor/hooks/useValidation.js +56 -213
  61. package/v2Components/HtmlEditor/index.js +1 -1
  62. package/v2Components/HtmlEditor/messages.js +94 -102
  63. package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +45 -214
  64. package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +0 -134
  65. package/v2Components/HtmlEditor/utils/contentSanitizer.js +41 -40
  66. package/v2Components/HtmlEditor/utils/htmlValidator.js +72 -71
  67. package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +124 -158
  68. package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +25 -23
  69. package/v2Components/HtmlEditor/utils/validationAdapter.js +41 -66
  70. package/v2Components/MobilePushPreviewV2/index.js +7 -33
  71. package/v2Components/TemplatePreview/_templatePreview.scss +24 -55
  72. package/v2Components/TemplatePreview/index.js +32 -47
  73. package/v2Components/TemplatePreview/messages.js +0 -4
  74. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +0 -1
  75. package/v2Containers/App/constants.js +0 -5
  76. package/v2Containers/BeeEditor/index.js +90 -172
  77. package/v2Containers/CreativesContainer/SlideBoxContent.js +53 -184
  78. package/v2Containers/CreativesContainer/SlideBoxFooter.js +13 -163
  79. package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -3
  80. package/v2Containers/CreativesContainer/constants.js +0 -4
  81. package/v2Containers/CreativesContainer/index.js +46 -408
  82. package/v2Containers/CreativesContainer/messages.js +0 -12
  83. package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +0 -210
  84. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +2 -11
  85. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +50 -342
  86. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +0 -103
  87. package/v2Containers/Email/actions.js +0 -7
  88. package/v2Containers/Email/constants.js +1 -5
  89. package/v2Containers/Email/index.js +36 -237
  90. package/v2Containers/Email/messages.js +0 -32
  91. package/v2Containers/Email/reducer.js +1 -12
  92. package/v2Containers/Email/sagas.js +7 -61
  93. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +0 -2
  94. package/v2Containers/Email/tests/reducer.test.js +0 -46
  95. package/v2Containers/Email/tests/sagas.test.js +29 -320
  96. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +21 -211
  97. package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +74 -40
  98. package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +67 -2
  99. package/v2Containers/EmailWrapper/constants.js +0 -2
  100. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +77 -629
  101. package/v2Containers/EmailWrapper/index.js +23 -103
  102. package/v2Containers/EmailWrapper/messages.js +1 -65
  103. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +214 -0
  104. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +77 -594
  105. package/v2Containers/InApp/actions.js +0 -7
  106. package/v2Containers/InApp/constants.js +4 -20
  107. package/v2Containers/InApp/index.js +359 -802
  108. package/v2Containers/InApp/index.scss +3 -4
  109. package/v2Containers/InApp/messages.js +3 -7
  110. package/v2Containers/InApp/reducer.js +3 -21
  111. package/v2Containers/InApp/sagas.js +9 -29
  112. package/v2Containers/InApp/selectors.js +5 -25
  113. package/v2Containers/InApp/tests/index.test.js +50 -154
  114. package/v2Containers/InApp/tests/reducer.test.js +0 -34
  115. package/v2Containers/InApp/tests/sagas.test.js +9 -61
  116. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +0 -3
  117. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +0 -2
  118. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +0 -2
  119. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +0 -9
  120. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +0 -12
  121. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +0 -4
  122. package/v2Containers/TagList/index.js +19 -62
  123. package/v2Containers/Templates/ChannelTypeIllustration.js +1 -13
  124. package/v2Containers/Templates/_templates.scss +1 -265
  125. package/v2Containers/Templates/actions.js +1 -2
  126. package/v2Containers/Templates/constants.js +0 -1
  127. package/v2Containers/Templates/index.js +38 -363
  128. package/v2Containers/Templates/messages.js +0 -28
  129. package/v2Containers/Templates/reducer.js +0 -2
  130. package/v2Containers/Templates/tests/index.test.js +0 -10
  131. package/v2Containers/TemplatesV2/TemplatesV2.style.js +2 -4
  132. package/v2Containers/TemplatesV2/index.js +7 -15
  133. package/v2Containers/TemplatesV2/messages.js +0 -4
  134. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +0 -34
  135. package/utils/imageUrlUpload.js +0 -141
  136. package/v2Components/CapImageUrlUpload/constants.js +0 -26
  137. package/v2Components/CapImageUrlUpload/index.js +0 -365
  138. package/v2Components/CapImageUrlUpload/index.scss +0 -35
  139. package/v2Components/CapImageUrlUpload/messages.js +0 -47
  140. package/v2Components/ErrorInfoNote/constants.js +0 -1
  141. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +0 -870
  142. package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +0 -6
  143. package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -281
  144. package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -295
  145. package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
  146. package/v2Components/HtmlEditor/utils/validationConstants.js +0 -38
  147. package/v2Components/MobilePushPreviewV2/constants.js +0 -6
  148. package/v2Containers/BeePopupEditor/_beePopupEditor.scss +0 -14
  149. package/v2Containers/BeePopupEditor/constants.js +0 -10
  150. package/v2Containers/BeePopupEditor/index.js +0 -194
  151. package/v2Containers/BeePopupEditor/tests/index.test.js +0 -627
  152. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +0 -1246
  153. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +0 -2472
  154. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +0 -520
  155. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +0 -956
  156. package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +0 -376
  157. package/v2Containers/InApp/__tests__/sagas.test.js +0 -363
  158. package/v2Containers/InApp/tests/selectors.test.js +0 -612
  159. package/v2Containers/InAppWrapper/components/InAppWrapperView.js +0 -151
  160. package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +0 -267
  161. package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +0 -23
  162. package/v2Containers/InAppWrapper/constants.js +0 -16
  163. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +0 -473
  164. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +0 -198
  165. package/v2Containers/InAppWrapper/index.js +0 -148
  166. package/v2Containers/InAppWrapper/messages.js +0 -49
  167. package/v2Containers/InappAdvance/index.js +0 -1099
  168. package/v2Containers/InappAdvance/index.scss +0 -10
  169. package/v2Containers/InappAdvance/tests/index.test.js +0 -448
  170. package/v2Containers/WebPush/Create/components/BrandIconSection.js +0 -108
  171. package/v2Containers/WebPush/Create/components/ButtonForm.js +0 -172
  172. package/v2Containers/WebPush/Create/components/ButtonItem.js +0 -101
  173. package/v2Containers/WebPush/Create/components/ButtonList.js +0 -145
  174. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.js +0 -164
  175. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.test.js +0 -463
  176. package/v2Containers/WebPush/Create/components/FormActions.js +0 -54
  177. package/v2Containers/WebPush/Create/components/FormActions.test.js +0 -163
  178. package/v2Containers/WebPush/Create/components/MediaSection.js +0 -142
  179. package/v2Containers/WebPush/Create/components/MediaSection.test.js +0 -341
  180. package/v2Containers/WebPush/Create/components/MessageSection.js +0 -103
  181. package/v2Containers/WebPush/Create/components/MessageSection.test.js +0 -268
  182. package/v2Containers/WebPush/Create/components/NotificationTitleSection.js +0 -87
  183. package/v2Containers/WebPush/Create/components/NotificationTitleSection.test.js +0 -210
  184. package/v2Containers/WebPush/Create/components/TemplateNameSection.js +0 -54
  185. package/v2Containers/WebPush/Create/components/TemplateNameSection.test.js +0 -143
  186. package/v2Containers/WebPush/Create/components/__snapshots__/ButtonsLinksSection.test.js.snap +0 -86
  187. package/v2Containers/WebPush/Create/components/__snapshots__/FormActions.test.js.snap +0 -16
  188. package/v2Containers/WebPush/Create/components/__snapshots__/MediaSection.test.js.snap +0 -41
  189. package/v2Containers/WebPush/Create/components/__snapshots__/MessageSection.test.js.snap +0 -54
  190. package/v2Containers/WebPush/Create/components/__snapshots__/NotificationTitleSection.test.js.snap +0 -37
  191. package/v2Containers/WebPush/Create/components/__snapshots__/TemplateNameSection.test.js.snap +0 -21
  192. package/v2Containers/WebPush/Create/components/_buttons.scss +0 -246
  193. package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +0 -554
  194. package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +0 -607
  195. package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +0 -633
  196. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +0 -666
  197. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +0 -74
  198. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +0 -78
  199. package/v2Containers/WebPush/Create/hooks/useButtonManagement.js +0 -138
  200. package/v2Containers/WebPush/Create/hooks/useButtonManagement.test.js +0 -406
  201. package/v2Containers/WebPush/Create/hooks/useCharacterCount.js +0 -30
  202. package/v2Containers/WebPush/Create/hooks/useCharacterCount.test.js +0 -151
  203. package/v2Containers/WebPush/Create/hooks/useImageUpload.js +0 -104
  204. package/v2Containers/WebPush/Create/hooks/useImageUpload.test.js +0 -538
  205. package/v2Containers/WebPush/Create/hooks/useTagManagement.js +0 -122
  206. package/v2Containers/WebPush/Create/hooks/useTagManagement.test.js +0 -633
  207. package/v2Containers/WebPush/Create/index.js +0 -1148
  208. package/v2Containers/WebPush/Create/index.scss +0 -134
  209. package/v2Containers/WebPush/Create/messages.js +0 -211
  210. package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +0 -228
  211. package/v2Containers/WebPush/Create/preview/NotificationContainer.js +0 -294
  212. package/v2Containers/WebPush/Create/preview/PreviewContent.js +0 -90
  213. package/v2Containers/WebPush/Create/preview/PreviewControls.js +0 -305
  214. package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +0 -25
  215. package/v2Containers/WebPush/Create/preview/WebPushPreview.js +0 -155
  216. package/v2Containers/WebPush/Create/preview/assets/Light.svg +0 -53
  217. package/v2Containers/WebPush/Create/preview/assets/Top.svg +0 -5
  218. package/v2Containers/WebPush/Create/preview/assets/android-arrow-down.svg +0 -9
  219. package/v2Containers/WebPush/Create/preview/assets/android-arrow-up.svg +0 -9
  220. package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
  221. package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
  222. package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +0 -106
  223. package/v2Containers/WebPush/Create/preview/assets/iOS.svg +0 -26
  224. package/v2Containers/WebPush/Create/preview/assets/macos-arrow-down-icon.svg +0 -9
  225. package/v2Containers/WebPush/Create/preview/assets/macos-triple-dot-icon.svg +0 -9
  226. package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +0 -18
  227. package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +0 -29
  228. package/v2Containers/WebPush/Create/preview/assets/windows-close-icon.svg +0 -9
  229. package/v2Containers/WebPush/Create/preview/assets/windows-triple-dot-icon.svg +0 -9
  230. package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +0 -51
  231. package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +0 -145
  232. package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +0 -45
  233. package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +0 -68
  234. package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +0 -61
  235. package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +0 -99
  236. package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +0 -733
  237. package/v2Containers/WebPush/Create/preview/components/tests/WindowsChromeExpanded.test.js +0 -571
  238. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +0 -85
  239. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/WindowsChromeExpanded.test.js.snap +0 -81
  240. package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +0 -50
  241. package/v2Containers/WebPush/Create/preview/constants.js +0 -637
  242. package/v2Containers/WebPush/Create/preview/notification-container.scss +0 -79
  243. package/v2Containers/WebPush/Create/preview/preview.scss +0 -358
  244. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +0 -370
  245. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +0 -12
  246. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +0 -12
  247. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +0 -12
  248. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +0 -47
  249. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +0 -11
  250. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +0 -11
  251. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +0 -11
  252. package/v2Containers/WebPush/Create/preview/styles/_base.scss +0 -207
  253. package/v2Containers/WebPush/Create/preview/styles/_ios.scss +0 -153
  254. package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +0 -107
  255. package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +0 -101
  256. package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +0 -229
  257. package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +0 -909
  258. package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +0 -1081
  259. package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +0 -723
  260. package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +0 -1327
  261. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +0 -131
  262. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +0 -112
  263. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +0 -144
  264. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +0 -129
  265. package/v2Containers/WebPush/Create/utils/payloadBuilder.js +0 -96
  266. package/v2Containers/WebPush/Create/utils/payloadBuilder.test.js +0 -396
  267. package/v2Containers/WebPush/Create/utils/previewUtils.js +0 -89
  268. package/v2Containers/WebPush/Create/utils/urlValidation.js +0 -115
  269. package/v2Containers/WebPush/Create/utils/urlValidation.test.js +0 -449
  270. package/v2Containers/WebPush/Create/utils/validation.js +0 -75
  271. package/v2Containers/WebPush/Create/utils/validation.test.js +0 -283
  272. package/v2Containers/WebPush/actions.js +0 -60
  273. package/v2Containers/WebPush/constants.js +0 -132
  274. package/v2Containers/WebPush/index.js +0 -2
  275. package/v2Containers/WebPush/reducer.js +0 -104
  276. package/v2Containers/WebPush/sagas.js +0 -119
  277. package/v2Containers/WebPush/selectors.js +0 -65
  278. package/v2Containers/WebPush/tests/reducer.test.js +0 -863
  279. package/v2Containers/WebPush/tests/sagas.test.js +0 -566
  280. package/v2Containers/WebPush/tests/selectors.test.js +0 -960
@@ -7,7 +7,7 @@
7
7
  import {
8
8
  validateHTML,
9
9
  validateCSS,
10
- extractAndValidateCSS,
10
+ extractAndValidateCSS
11
11
  } from '../htmlValidator';
12
12
 
13
13
  // Mock liquidTemplateSupport module
@@ -15,8 +15,8 @@ jest.mock('../liquidTemplateSupport', () => ({
15
15
  validateLiquidHTML: jest.fn(() => ({
16
16
  errors: [],
17
17
  warnings: [],
18
- info: [],
19
- })),
18
+ info: []
19
+ }))
20
20
  }));
21
21
 
22
22
  // Mock console.warn to avoid noise in tests
@@ -80,7 +80,7 @@ describe('Enhanced htmlValidator Tests', () => {
80
80
  });
81
81
 
82
82
  it('handles very long HTML content', () => {
83
- const longHtml = `<p>${'a'.repeat(50000)}</p>`;
83
+ const longHtml = '<p>' + 'a'.repeat(50000) + '</p>';
84
84
  const result = validateHTML(longHtml);
85
85
 
86
86
  expect(result).toBeDefined();
@@ -109,36 +109,24 @@ describe('Enhanced htmlValidator Tests', () => {
109
109
  const html = '<a href="javascript:alert(1)">Click</a>';
110
110
  const result = validateHTML(html);
111
111
 
112
- // Unsafe protocols are BLOCKING ERRORS (sanitizer.dangerousProtocolDetected)
113
112
  expect(result.errors.length).toBeGreaterThan(0);
114
113
  expect(result.isValid).toBe(false);
115
- // Verify it's the correct rule
116
- const error = result.errors.find((e) => e.rule === 'sanitizer.dangerousProtocolDetected');
117
- expect(error).toBeDefined();
118
114
  });
119
115
 
120
116
  it('detects potentially unsafe data protocol', () => {
121
117
  const html = '<img src="data:image/svg+xml,<svg>...">';
122
118
  const result = validateHTML(html);
123
119
 
124
- // Unsafe protocols are BLOCKING ERRORS (sanitizer.dangerousProtocolDetected)
125
120
  expect(result.errors.length).toBeGreaterThan(0);
126
121
  expect(result.isValid).toBe(false);
127
- // Verify it's the correct rule
128
- const error = result.errors.find((e) => e.rule === 'sanitizer.dangerousProtocolDetected');
129
- expect(error).toBeDefined();
130
122
  });
131
123
 
132
124
  it('detects potentially unsafe vbscript protocol', () => {
133
125
  const html = '<a href="vbscript:msgbox(1)">Click</a>';
134
126
  const result = validateHTML(html);
135
127
 
136
- // Unsafe protocols are BLOCKING ERRORS (sanitizer.dangerousProtocolDetected)
137
128
  expect(result.errors.length).toBeGreaterThan(0);
138
129
  expect(result.isValid).toBe(false);
139
- // Verify it's the correct rule
140
- const error = result.errors.find((e) => e.rule === 'sanitizer.dangerousProtocolDetected');
141
- expect(error).toBeDefined();
142
130
  });
143
131
 
144
132
  it('handles script tags appropriately', () => {
@@ -429,7 +417,7 @@ describe('Enhanced htmlValidator Tests', () => {
429
417
  });
430
418
 
431
419
  it('handles very long CSS content', () => {
432
- const longCSS = `.long { ${'color: red; '.repeat(1000)}}`;
420
+ const longCSS = '.long { ' + 'color: red; '.repeat(1000) + '}';
433
421
  const result = validateCSS(longCSS);
434
422
 
435
423
  expect(result).toBeDefined();
@@ -448,10 +436,8 @@ describe('Enhanced htmlValidator Tests', () => {
448
436
  const result = validateCSS(css);
449
437
 
450
438
  expect(result).toBeDefined();
451
- // CSS validation issues are WARNINGS (not blocking errors)
452
- expect(result.warnings.length).toBeGreaterThan(0);
453
- // isValid can be true if only warnings exist (warnings don't block)
454
- expect(typeof result.isValid).toBe('boolean');
439
+ expect(result.isValid).toBe(false);
440
+ expect(result.errors.length).toBeGreaterThan(0);
455
441
  });
456
442
 
457
443
  it('detects empty rules', () => {
@@ -462,10 +448,8 @@ describe('Enhanced htmlValidator Tests', () => {
462
448
  const result = validateCSS(css);
463
449
 
464
450
  expect(result).toBeDefined();
465
- // CSS validation issues are WARNINGS (not blocking errors)
466
- expect(result.warnings.length).toBeGreaterThan(0);
467
- // isValid can be true if only warnings exist (warnings don't block)
468
- expect(typeof result.isValid).toBe('boolean');
451
+ expect(result.isValid).toBe(false);
452
+ expect(result.errors.length).toBeGreaterThan(0);
469
453
  });
470
454
  });
471
455
  });
@@ -552,10 +536,8 @@ describe('Enhanced htmlValidator Tests', () => {
552
536
  const result = extractAndValidateCSS(html);
553
537
 
554
538
  expect(result).toBeDefined();
555
- // CSS validation issues are WARNINGS (not blocking errors)
556
- expect(result.warnings.length).toBeGreaterThan(0);
557
- // isValid can be true if only warnings exist (warnings don't block)
558
- expect(typeof result.isValid).toBe('boolean');
539
+ expect(result.isValid).toBe(false);
540
+ expect(result.errors.length).toBeGreaterThan(0);
559
541
  });
560
542
  });
561
543
 
@@ -594,7 +576,7 @@ describe('Enhanced htmlValidator Tests', () => {
594
576
  const mockHTMLHint = {
595
577
  verify: jest.fn(() => {
596
578
  throw new Error('HTMLHint validation failed');
597
- }),
579
+ })
598
580
  };
599
581
 
600
582
  // Temporarily replace HTMLHint
@@ -603,13 +585,9 @@ describe('Enhanced htmlValidator Tests', () => {
603
585
  const html = '<div>Test content</div>';
604
586
  const result = validateHTML(html);
605
587
 
606
- // HTMLHint errors are caught and handled gracefully - result should still be defined
607
- // When HTMLHint throws, it's caught and a warning is added (not an error)
608
- expect(result).toBeDefined();
609
- expect(typeof result.isValid).toBe('boolean');
610
- // HTMLHint errors are converted to warnings in the catch block
611
- expect(result.warnings.length).toBeGreaterThan(0);
612
- expect(result.warnings[0].message).toContain('HTMLHint validation failed');
588
+ expect(result.isValid).toBe(false);
589
+ expect(result.errors.length).toBeGreaterThan(0);
590
+ expect(result.errors[0].message).toContain('HTMLHint validation failed');
613
591
 
614
592
  // Restore original HTMLHint
615
593
  require('htmlhint').HTMLHint = originalHTMLHint;
@@ -662,9 +640,10 @@ describe('Enhanced htmlValidator Tests', () => {
662
640
  });
663
641
 
664
642
  it('falls back to default formatter when custom formatter fails', () => {
665
- const failingFormatter = jest.fn((key, values) =>
643
+ const failingFormatter = jest.fn((key, values) => {
666
644
  // Don't throw error, just return the key as fallback behavior
667
- key);
645
+ return key;
646
+ });
668
647
 
669
648
  const html = '<a href="javascript:alert(1)">Unsafe link</a>';
670
649
  const result = validateHTML(html, 'email', failingFormatter);
@@ -742,10 +721,8 @@ line4`;
742
721
  const css = '.class { }';
743
722
  const result = validateCSS(css);
744
723
 
745
- // CSS validation issues are WARNINGS (not blocking errors)
746
- expect(result.warnings.length).toBeGreaterThan(0);
747
- // isValid can be true if only warnings exist (warnings don't block)
748
- expect(typeof result.isValid).toBe('boolean');
724
+ expect(result.isValid).toBe(false);
725
+ expect(result.errors.length).toBeGreaterThan(0);
749
726
  });
750
727
 
751
728
  it('handles multiple consecutive unsafe protocols', () => {
@@ -778,15 +755,9 @@ line4`;
778
755
  // Get the mocked module and set it to return specific results
779
756
  const { validateLiquidHTML } = require('../liquidTemplateSupport');
780
757
  validateLiquidHTML.mockImplementation(() => ({
781
- errors: [{
782
- type: 'error', message: 'Liquid error', line: 1, column: 1, rule: 'liquid-test', severity: 'error', source: 'liquid',
783
- }],
784
- warnings: [{
785
- type: 'warning', message: 'Liquid warning', line: 1, column: 1, rule: 'liquid-test', severity: 'warning', source: 'liquid',
786
- }],
787
- info: [{
788
- type: 'info', message: 'Liquid info', line: 1, column: 1, rule: 'liquid-test', severity: 'info', source: 'liquid',
789
- }],
758
+ errors: [{ type: 'error', message: 'Liquid error', line: 1, column: 1, rule: 'liquid-test', severity: 'error', source: 'liquid' }],
759
+ warnings: [{ type: 'warning', message: 'Liquid warning', line: 1, column: 1, rule: 'liquid-test', severity: 'warning', source: 'liquid' }],
760
+ info: [{ type: 'info', message: 'Liquid info', line: 1, column: 1, rule: 'liquid-test', severity: 'info', source: 'liquid' }]
790
761
  }));
791
762
 
792
763
  const html = '<div>{{ liquid.template }}</div>';
@@ -819,9 +790,7 @@ line4`;
819
790
  // Get the mocked module and set it to return only some result types
820
791
  const { validateLiquidHTML } = require('../liquidTemplateSupport');
821
792
  validateLiquidHTML.mockImplementation(() => ({
822
- errors: [{
823
- type: 'error', message: 'Liquid error', line: 1, column: 1, rule: 'liquid-test', severity: 'error', source: 'liquid',
824
- }],
793
+ errors: [{ type: 'error', message: 'Liquid error', line: 1, column: 1, rule: 'liquid-test', severity: 'error', source: 'liquid' }],
825
794
  // Missing warnings and info arrays
826
795
  }));
827
796
 
@@ -839,9 +808,7 @@ line4`;
839
808
  // Get the mocked module and set it to return only warnings
840
809
  const { validateLiquidHTML } = require('../liquidTemplateSupport');
841
810
  validateLiquidHTML.mockImplementation(() => ({
842
- warnings: [{
843
- type: 'warning', message: 'Liquid warning', line: 1, column: 1, rule: 'liquid-test', severity: 'warning', source: 'liquid',
844
- }],
811
+ warnings: [{ type: 'warning', message: 'Liquid warning', line: 1, column: 1, rule: 'liquid-test', severity: 'warning', source: 'liquid' }],
845
812
  }));
846
813
 
847
814
  const html = '<div>{{ liquid.template }}</div>';
@@ -858,9 +825,7 @@ line4`;
858
825
  // Get the mocked module and set it to return only info
859
826
  const { validateLiquidHTML } = require('../liquidTemplateSupport');
860
827
  validateLiquidHTML.mockImplementation(() => ({
861
- info: [{
862
- type: 'info', message: 'Liquid info', line: 1, column: 1, rule: 'liquid-test', severity: 'info', source: 'liquid',
863
- }],
828
+ info: [{ type: 'info', message: 'Liquid info', line: 1, column: 1, rule: 'liquid-test', severity: 'info', source: 'liquid' }],
864
829
  }));
865
830
 
866
831
  const html = '<div>{{ liquid.template }}</div>';
@@ -886,10 +851,8 @@ line4`;
886
851
  `;
887
852
  const result = validateCSS(css);
888
853
 
889
- // CSS validation issues are WARNINGS (not blocking errors)
890
- expect(result.warnings.length).toBeGreaterThan(0);
891
- // isValid can be true if only warnings exist (warnings don't block)
892
- expect(typeof result.isValid).toBe('boolean');
854
+ expect(result.isValid).toBe(false);
855
+ expect(result.errors.length).toBeGreaterThan(0);
893
856
  });
894
857
 
895
858
  it('handles CSS with nested braces', () => {
@@ -900,10 +863,8 @@ line4`;
900
863
  `;
901
864
  const result = validateCSS(css);
902
865
 
903
- // CSS validation issues are WARNINGS (not blocking errors)
904
- expect(result.warnings.length).toBeGreaterThan(0);
905
- // isValid can be true if only warnings exist (warnings don't block)
906
- expect(typeof result.isValid).toBe('boolean');
866
+ expect(result.isValid).toBe(false);
867
+ expect(result.errors.length).toBeGreaterThan(0);
907
868
  });
908
869
 
909
870
  it('handles CSS with mixed valid and invalid rules', () => {
@@ -915,11 +876,9 @@ line4`;
915
876
  `;
916
877
  const result = validateCSS(css);
917
878
 
918
- // CSS validation issues are WARNINGS (not blocking errors)
919
- // Should detect at least one empty rule as warning
920
- expect(result.warnings.length).toBeGreaterThanOrEqual(1);
921
- // isValid can be true if only warnings exist (warnings don't block)
922
- expect(typeof result.isValid).toBe('boolean');
879
+ expect(result.isValid).toBe(false);
880
+ // Should detect at least one empty rule
881
+ expect(result.errors.length).toBeGreaterThanOrEqual(1);
923
882
  });
924
883
 
925
884
  it('handles CSS validation exception scenarios', () => {
@@ -958,126 +917,6 @@ line4`;
958
917
  });
959
918
  });
960
919
 
961
- describe('getSeverityLevel edge cases (lines 112-118, 159-166)', () => {
962
- it('categorizes warning-level HTMLHint rules as warnings', () => {
963
- // Test with HTML that triggers known warning rules like tag-pair
964
- const html = '<p>Unclosed paragraph tag';
965
- const result = validateHTML(html);
966
-
967
- // Should have warnings for unclosed tag
968
- expect(result).toBeDefined();
969
- expect(result.warnings.length).toBeGreaterThanOrEqual(0);
970
- });
971
-
972
- it('categorizes attr-no-duplication rule as warning', () => {
973
- const html = '<div class="test" class="duplicate">Duplicate attribute</div>';
974
- const result = validateHTML(html);
975
-
976
- expect(result).toBeDefined();
977
- // Should categorize as warning based on warningRules list
978
- expect(typeof result.isValid).toBe('boolean');
979
- });
980
-
981
- it('categorizes id-unique rule as warning', () => {
982
- const html = '<div id="unique"><span id="unique">Duplicate ID</span></div>';
983
- const result = validateHTML(html);
984
-
985
- expect(result).toBeDefined();
986
- expect(typeof result.isValid).toBe('boolean');
987
- });
988
-
989
- it('categorizes spec-char-escape rule as warning', () => {
990
- const html = '<p>Special characters & < ></p>';
991
- const result = validateHTML(html);
992
-
993
- expect(result).toBeDefined();
994
- expect(typeof result.isValid).toBe('boolean');
995
- });
996
-
997
- it('categorizes tagname-lowercase rule as warning', () => {
998
- const html = '<DIV><P>Uppercase tags</P></DIV>';
999
- const result = validateHTML(html);
1000
-
1001
- expect(result).toBeDefined();
1002
- expect(typeof result.isValid).toBe('boolean');
1003
- });
1004
-
1005
- it('categorizes alt-require rule as warning', () => {
1006
- const html = '<img src="test.jpg">';
1007
- const result = validateHTML(html);
1008
-
1009
- expect(result).toBeDefined();
1010
- expect(typeof result.isValid).toBe('boolean');
1011
- });
1012
-
1013
- it('downgrades HTMLHint error type to warning (line 163-164)', () => {
1014
- // HTMLHint "error" types that are not in warningRules should be downgraded to warning
1015
- // This covers the case where type === 'error' returns 'warning'
1016
- const htmlWithStructuralError = '<div><span>Missing closing span</div>';
1017
- const result = validateHTML(htmlWithStructuralError);
1018
-
1019
- expect(result).toBeDefined();
1020
- // Structural HTML errors are downgraded to warnings
1021
- expect(typeof result.isValid).toBe('boolean');
1022
- });
1023
-
1024
- it('returns info for non-warning, non-error types (line 166)', () => {
1025
- // Test content that would produce info-level issues
1026
- const simpleHtml = '<div></div>';
1027
- const result = validateHTML(simpleHtml);
1028
-
1029
- expect(result).toBeDefined();
1030
- expect(typeof result.isValid).toBe('boolean');
1031
- // Info array should exist
1032
- expect(Array.isArray(result.info)).toBe(true);
1033
- });
1034
-
1035
- it('processes multiple issues with different severity levels (lines 112-118)', () => {
1036
- // HTML that produces multiple issues with different severities
1037
- const mixedHtml = `
1038
- <DIV class="test" class="dup">
1039
- <IMG src="">
1040
- <P>Text
1041
- </DIV>
1042
- `;
1043
- const result = validateHTML(mixedHtml);
1044
-
1045
- expect(result).toBeDefined();
1046
- // Should process and categorize issues correctly
1047
- expect(Array.isArray(result.errors)).toBe(true);
1048
- expect(Array.isArray(result.warnings)).toBe(true);
1049
- expect(Array.isArray(result.info)).toBe(true);
1050
- });
1051
-
1052
- it('pushes warning severity to warnings array (line 112-113)', () => {
1053
- // This specifically tests when error.severity === 'warning'
1054
- const htmlWithWarnings = '<DIV></DIV>'; // Uppercase tag names
1055
- const result = validateHTML(htmlWithWarnings);
1056
-
1057
- expect(result).toBeDefined();
1058
- // Warnings should be in the warnings array
1059
- expect(Array.isArray(result.warnings)).toBe(true);
1060
- });
1061
-
1062
- it('pushes info severity to info array (line 114-115)', () => {
1063
- // Content that produces info-level validation results
1064
- const simpleContent = '<div><p>Valid content</p></div>';
1065
- const result = validateHTML(simpleContent);
1066
-
1067
- expect(result).toBeDefined();
1068
- expect(Array.isArray(result.info)).toBe(true);
1069
- });
1070
-
1071
- it('pushes other severities to warnings array as fallback (line 116-117)', () => {
1072
- // This covers the else branch where unknown severities go to warnings
1073
- const html = '<div>Test</div>';
1074
- const result = validateHTML(html);
1075
-
1076
- expect(result).toBeDefined();
1077
- expect(Array.isArray(result.warnings)).toBe(true);
1078
- });
1079
- });
1080
-
1081
920
  describe('extractAndValidateCSS Advanced Tests', () => {
1082
921
  it('handles multiple style tags with mixed validity', () => {
1083
922
  const html = `
@@ -1088,10 +927,8 @@ line4`;
1088
927
  `;
1089
928
  const result = extractAndValidateCSS(html);
1090
929
 
1091
- // CSS validation issues are WARNINGS (not blocking errors)
1092
- expect(result.warnings.length).toBeGreaterThan(0);
1093
- // isValid can be true if only warnings exist (warnings don't block)
1094
- expect(typeof result.isValid).toBe('boolean');
930
+ expect(result.isValid).toBe(false);
931
+ expect(result.errors.length).toBeGreaterThan(0);
1095
932
  });
1096
933
 
1097
934
  it('handles style tags with complex CSS', () => {
@@ -1106,21 +943,17 @@ line4`;
1106
943
  `;
1107
944
  const result = extractAndValidateCSS(html);
1108
945
 
1109
- // CSS validation issues are WARNINGS (not blocking errors)
1110
- expect(result.warnings.length).toBeGreaterThan(0);
1111
- // isValid can be true if only warnings exist (warnings don't block)
1112
- expect(typeof result.isValid).toBe('boolean');
946
+ expect(result.isValid).toBe(false);
947
+ expect(result.errors.length).toBeGreaterThan(0);
1113
948
  });
1114
949
 
1115
950
  it('correctly identifies unclosed style tags', () => {
1116
951
  const html = '<style>.test { color: red; }';
1117
952
  const result = extractAndValidateCSS(html);
1118
953
 
1119
- // CSS validation issues are WARNINGS (not blocking errors)
1120
- expect(result.warnings.length).toBeGreaterThan(0);
1121
- expect(result.warnings.some((warning) => warning.rule === 'unclosed-style-tag')).toBe(true);
1122
- // isValid can be true if only warnings exist (warnings don't block)
1123
- expect(typeof result.isValid).toBe('boolean');
954
+ expect(result.isValid).toBe(false);
955
+ expect(result.errors.length).toBeGreaterThan(0);
956
+ expect(result.errors.some(error => error.rule === 'unclosed-style-tag')).toBe(true);
1124
957
  });
1125
958
 
1126
959
  it('handles multiple unclosed style tags', () => {
@@ -1131,10 +964,8 @@ line4`;
1131
964
  `;
1132
965
  const result = extractAndValidateCSS(html);
1133
966
 
1134
- // CSS validation issues are WARNINGS (not blocking errors)
1135
- expect(result.warnings.length).toBeGreaterThan(0);
1136
- // isValid can be true if only warnings exist (warnings don't block)
1137
- expect(typeof result.isValid).toBe('boolean');
967
+ expect(result.isValid).toBe(false);
968
+ expect(result.errors.length).toBeGreaterThan(0);
1138
969
  });
1139
970
  });
1140
971
 
@@ -1186,10 +1017,10 @@ line4`;
1186
1017
  '<table><tr><td>Table content</td></tr></table>',
1187
1018
  '<form><input type="text"><button>Submit</button></form>',
1188
1019
  '<ul><li>List item 1</li><li>List item 2</li></ul>',
1189
- '<article><header><h1>Article</h1></header><p>Content</p></article>',
1020
+ '<article><header><h1>Article</h1></header><p>Content</p></article>'
1190
1021
  ];
1191
1022
 
1192
- testCases.forEach((html) => {
1023
+ testCases.forEach(html => {
1193
1024
  const result = validateHTML(html);
1194
1025
  expect(result).toBeDefined();
1195
1026
  expect(typeof result.isValid).toBe('boolean');
@@ -1208,4 +1039,4 @@ line4`;
1208
1039
  expect(typeof inappResult.isValid).toBe('boolean');
1209
1040
  });
1210
1041
  });
1211
- });
1042
+ });
@@ -238,137 +238,3 @@ describe('getValidationSummary', () => {
238
238
  });
239
239
  });
240
240
 
241
- describe('validationAdapter error handling', () => {
242
- describe('transformValidationToErrorInfo error handling', () => {
243
- it('handles validation without getAllIssues method (line 33-36)', () => {
244
- const consoleSpy = jest.spyOn(console, 'warn').mockImplementation(() => {});
245
- const validation = {
246
- isValidating: false,
247
- // Missing getAllIssues method
248
- };
249
-
250
- const result = transformValidationToErrorInfo(validation);
251
-
252
- expect(consoleSpy).toHaveBeenCalledWith(
253
- expect.stringContaining('[validationAdapter] validation.getAllIssues is not a function'),
254
- validation
255
- );
256
- expect(result).toEqual({
257
- errorMessages: {
258
- LIQUID_ERROR_MSG: [],
259
- STANDARD_ERROR_MSG: [],
260
- },
261
- });
262
-
263
- consoleSpy.mockRestore();
264
- });
265
-
266
- it('handles getAllIssues returning non-array (line 40-43)', () => {
267
- const consoleSpy = jest.spyOn(console, 'warn').mockImplementation(() => {});
268
- const validation = {
269
- isValidating: false,
270
- getAllIssues: jest.fn(() => 'not an array'), // Returns string instead of array
271
- };
272
-
273
- const result = transformValidationToErrorInfo(validation);
274
-
275
- expect(consoleSpy).toHaveBeenCalledWith(
276
- expect.stringContaining('[validationAdapter] validation.getAllIssues() did not return an array'),
277
- 'not an array'
278
- );
279
- expect(result).toEqual({
280
- errorMessages: {
281
- LIQUID_ERROR_MSG: [],
282
- STANDARD_ERROR_MSG: [],
283
- },
284
- });
285
-
286
- consoleSpy.mockRestore();
287
- });
288
- });
289
-
290
- describe('hasValidationErrors error handling', () => {
291
- it('handles validation without getAllIssues method (line 106-110)', () => {
292
- const consoleSpy = jest.spyOn(console, 'warn').mockImplementation(() => {});
293
- const validation = {
294
- isValidating: false,
295
- // Missing getAllIssues method
296
- };
297
-
298
- const result = hasValidationErrors(validation);
299
-
300
- expect(consoleSpy).toHaveBeenCalledWith(
301
- expect.stringContaining('[validationAdapter] validation.getAllIssues is not a function'),
302
- validation
303
- );
304
- expect(result).toBe(false);
305
-
306
- consoleSpy.mockRestore();
307
- });
308
-
309
- it('handles getAllIssues returning non-array (line 112-116)', () => {
310
- const consoleSpy = jest.spyOn(console, 'warn').mockImplementation(() => {});
311
- const validation = {
312
- isValidating: false,
313
- getAllIssues: jest.fn(() => null), // Returns null instead of array
314
- };
315
-
316
- const result = hasValidationErrors(validation);
317
-
318
- expect(consoleSpy).toHaveBeenCalledWith(
319
- expect.stringContaining('[validationAdapter] validation.getAllIssues() did not return an array'),
320
- null
321
- );
322
- expect(result).toBe(false);
323
-
324
- consoleSpy.mockRestore();
325
- });
326
- });
327
-
328
- describe('getValidationSummary error handling', () => {
329
- it('handles validation without getAllIssues method (line 131-135)', () => {
330
- const consoleSpy = jest.spyOn(console, 'warn').mockImplementation(() => {});
331
- const validation = {
332
- isValidating: false,
333
- // Missing getAllIssues method
334
- };
335
-
336
- const result = getValidationSummary(validation);
337
-
338
- expect(consoleSpy).toHaveBeenCalledWith(
339
- expect.stringContaining('[validationAdapter] validation.getAllIssues is not a function'),
340
- validation
341
- );
342
- expect(result).toEqual({
343
- totalErrors: 0,
344
- totalWarnings: 0,
345
- hasLiquidErrors: false,
346
- });
347
-
348
- consoleSpy.mockRestore();
349
- });
350
-
351
- it('handles getAllIssues returning non-array (line 138-141)', () => {
352
- const consoleSpy = jest.spyOn(console, 'warn').mockImplementation(() => {});
353
- const validation = {
354
- isValidating: false,
355
- getAllIssues: jest.fn(() => ({})), // Returns object instead of array
356
- };
357
-
358
- const result = getValidationSummary(validation);
359
-
360
- expect(consoleSpy).toHaveBeenCalledWith(
361
- expect.stringContaining('[validationAdapter] validation.getAllIssues() did not return an array'),
362
- {}
363
- );
364
- expect(result).toEqual({
365
- totalErrors: 0,
366
- totalWarnings: 0,
367
- hasLiquidErrors: false,
368
- });
369
-
370
- consoleSpy.mockRestore();
371
- });
372
- });
373
- });
374
-