@coveo/quantic 3.33.0 → 3.33.2

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 (296) hide show
  1. package/README.md +15 -15
  2. package/force-app/main/default/lwc/quanticAriaLive/__tests__/quanticAriaLive.test.js +106 -0
  3. package/force-app/main/default/lwc/quanticBreadcrumbManager/__tests__/quanticBreadcrumbManager.test.js +752 -0
  4. package/force-app/main/default/lwc/quanticBreadcrumbManager/e2e/fixture.ts +76 -0
  5. package/force-app/main/default/lwc/quanticBreadcrumbManager/e2e/pageObject.ts +282 -0
  6. package/force-app/main/default/lwc/quanticBreadcrumbManager/e2e/quanticBreadcrumbManager.e2e.ts +167 -0
  7. package/force-app/main/default/lwc/quanticCarousel/__tests__/quanticCarousel.test.js +262 -0
  8. package/force-app/main/default/lwc/quanticCaseClassification/__tests__/quanticCaseClassification.test.js +819 -0
  9. package/force-app/main/default/lwc/quanticCaseClassification/e2e/data.ts +23 -0
  10. package/force-app/main/default/lwc/quanticCaseClassification/e2e/fixture.ts +51 -0
  11. package/force-app/main/default/lwc/quanticCaseClassification/e2e/pageObject.ts +152 -0
  12. package/force-app/main/default/lwc/quanticCaseClassification/e2e/quanticCaseClassification.e2e.ts +269 -0
  13. package/force-app/main/default/lwc/quanticCategoryFacet/__tests__/quanticCategoryFacet.test.js +1183 -0
  14. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/data.ts +27 -0
  15. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/fixture.ts +75 -0
  16. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/pageObject.ts +55 -0
  17. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/quanticCategoryFacet.e2e.ts +199 -0
  18. package/force-app/main/default/lwc/quanticCitation/__tests__/quanticCitation.test.js +371 -0
  19. package/force-app/main/default/lwc/quanticColoredResultBadge/__tests__/quanticColoredResultBadge.test.js +212 -0
  20. package/force-app/main/default/lwc/quanticDateFacet/__tests__/quanticDateFacet.test.js +688 -0
  21. package/force-app/main/default/lwc/quanticDateFacet/e2e/data.ts +24 -0
  22. package/force-app/main/default/lwc/quanticDateFacet/e2e/fixture.ts +68 -0
  23. package/force-app/main/default/lwc/quanticDateFacet/e2e/pageObject.ts +27 -0
  24. package/force-app/main/default/lwc/quanticDateFacet/e2e/quanticDateFacet.e2e.ts +145 -0
  25. package/force-app/main/default/lwc/quanticDidYouMean/__tests__/quanticDidYouMean.test.js +348 -0
  26. package/force-app/main/default/lwc/quanticDidYouMean/e2e/data.ts +48 -0
  27. package/force-app/main/default/lwc/quanticDidYouMean/e2e/fixture.ts +80 -0
  28. package/force-app/main/default/lwc/quanticDidYouMean/e2e/pageObject.ts +173 -0
  29. package/force-app/main/default/lwc/quanticDidYouMean/e2e/quanticDidYouMean.e2e.ts +219 -0
  30. package/force-app/main/default/lwc/quanticDocumentSuggestion/__tests__/quanticDocumentSuggestion.test.js +404 -0
  31. package/force-app/main/default/lwc/quanticDocumentSuggestion/e2e/fixture.ts +38 -0
  32. package/force-app/main/default/lwc/quanticDocumentSuggestion/e2e/pageObject.ts +52 -0
  33. package/force-app/main/default/lwc/quanticDocumentSuggestion/e2e/quanticDocumentSuggestion.e2e.ts +102 -0
  34. package/force-app/main/default/lwc/quanticFacet/__tests__/quanticFacet.test.js +1105 -0
  35. package/force-app/main/default/lwc/quanticFacet/e2e/data.ts +21 -0
  36. package/force-app/main/default/lwc/quanticFacet/e2e/fixture.ts +73 -0
  37. package/force-app/main/default/lwc/quanticFacet/e2e/pageObject.ts +67 -0
  38. package/force-app/main/default/lwc/quanticFacet/e2e/quanticFacet.e2e.ts +208 -0
  39. package/force-app/main/default/lwc/quanticFacetCaption/__tests__/quanticFacetCaption.test.js +28 -0
  40. package/force-app/main/default/lwc/quanticFacetManager/__tests__/quanticFacetManager.test.js +178 -0
  41. package/force-app/main/default/lwc/quanticFacetManager/e2e/fixture.ts +64 -0
  42. package/force-app/main/default/lwc/quanticFacetManager/e2e/pageObject.ts +23 -0
  43. package/force-app/main/default/lwc/quanticFacetManager/e2e/quanticFacetManager.e2e.ts +82 -0
  44. package/force-app/main/default/lwc/quanticFeedback/__tests__/quanticFeedback.test.js +392 -0
  45. package/force-app/main/default/lwc/quanticFeedbackModal/__tests__/quanticFeedbackModal.test.js +448 -0
  46. package/force-app/main/default/lwc/quanticFeedbackModalQna/__tests__/quanticFeedbackModalQna.test.js +298 -0
  47. package/force-app/main/default/lwc/quanticFoldedResultList/__tests__/quanticFoldedResultList.test.js +323 -0
  48. package/force-app/main/default/lwc/quanticFoldedResultList/e2e/fixture.ts +70 -0
  49. package/force-app/main/default/lwc/quanticFoldedResultList/e2e/pageObject.ts +81 -0
  50. package/force-app/main/default/lwc/quanticFoldedResultList/e2e/quanticFoldedResultList.e2e.ts +69 -0
  51. package/force-app/main/default/lwc/quanticGeneratedAnswer/__tests__/quanticGeneratedAnswer.test.js +1158 -0
  52. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/data.ts +56 -0
  53. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/fixture.ts +185 -0
  54. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/pageObject.ts +451 -0
  55. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/quanticGeneratedAnswer.e2e.ts +337 -0
  56. package/force-app/main/default/lwc/quanticGeneratedAnswerContent/__tests__/quanticGeneratedAnswerContent.test.js +151 -0
  57. package/force-app/main/default/lwc/quanticHeading/__tests__/quanticHeading.test.js +71 -0
  58. package/force-app/main/default/lwc/quanticHeadlessLoader/__tests__/quanticHeadlessLoader.test.js +651 -0
  59. package/force-app/main/default/lwc/quanticInsightInterface/__tests__/quanticInsightInterface.test.js +194 -0
  60. package/force-app/main/default/lwc/quanticInsightSummary/__tests__/quanticInsightSummary.test.js +230 -0
  61. package/force-app/main/default/lwc/quanticModal/__tests__/quanticModal.test.js +205 -0
  62. package/force-app/main/default/lwc/quanticNotifications/__tests__/quanticNotifications.test.js +309 -0
  63. package/force-app/main/default/lwc/quanticNotifications/e2e/fixture.ts +58 -0
  64. package/force-app/main/default/lwc/quanticNotifications/e2e/pageObject.ts +55 -0
  65. package/force-app/main/default/lwc/quanticNotifications/e2e/quanticNotifications.e2e.ts +47 -0
  66. package/force-app/main/default/lwc/quanticNumericFacet/__tests__/quanticNumericFacet.test.js +953 -0
  67. package/force-app/main/default/lwc/quanticNumericFacet/e2e/data.ts +28 -0
  68. package/force-app/main/default/lwc/quanticNumericFacet/e2e/fixture.ts +71 -0
  69. package/force-app/main/default/lwc/quanticNumericFacet/e2e/pageObject.ts +59 -0
  70. package/force-app/main/default/lwc/quanticNumericFacet/e2e/quanticNumericFacet.e2e.ts +164 -0
  71. package/force-app/main/default/lwc/quanticPager/__tests__/quanticPager.test.js +430 -0
  72. package/force-app/main/default/lwc/quanticPager/e2e/fixture.ts +65 -0
  73. package/force-app/main/default/lwc/quanticPager/e2e/pageObject.ts +69 -0
  74. package/force-app/main/default/lwc/quanticPager/e2e/quanticPager.e2e.ts +106 -0
  75. package/force-app/main/default/lwc/quanticPlaceholder/__tests__/quanticPlaceholder.test.js +47 -0
  76. package/force-app/main/default/lwc/quanticQuickviewContent/__tests__/data/defaultTestCase.json +13 -0
  77. package/force-app/main/default/lwc/quanticQuickviewContent/__tests__/data/youtubeTestCase.json +14 -0
  78. package/force-app/main/default/lwc/quanticQuickviewContent/__tests__/quanticQuickviewContent.test.js +82 -0
  79. package/force-app/main/default/lwc/quanticRadioButtonsGroup/__tests__/quanticRadioButtonsGroup.test.js +273 -0
  80. package/force-app/main/default/lwc/quanticRecentQueriesList/__tests__/quanticRecentQueriesList.test.js +448 -0
  81. package/force-app/main/default/lwc/quanticRecentQueriesList/e2e/fixture.ts +42 -0
  82. package/force-app/main/default/lwc/quanticRecentQueriesList/e2e/pageObject.ts +55 -0
  83. package/force-app/main/default/lwc/quanticRecentQueriesList/e2e/quanticRecentQueriesList.e2e.ts +93 -0
  84. package/force-app/main/default/lwc/quanticRecentResultsList/__tests__/quanticRecentResultsList.test.js +516 -0
  85. package/force-app/main/default/lwc/quanticRecentResultsList/e2e/fixture.ts +42 -0
  86. package/force-app/main/default/lwc/quanticRecentResultsList/e2e/pageObject.ts +61 -0
  87. package/force-app/main/default/lwc/quanticRecentResultsList/e2e/quanticRecentResultsList.e2e.ts +48 -0
  88. package/force-app/main/default/lwc/quanticRecommendationList/__tests__/quanticRecommendationList.test.js +491 -0
  89. package/force-app/main/default/lwc/quanticRecommendationList/e2e/fixture.ts +35 -0
  90. package/force-app/main/default/lwc/quanticRecommendationList/e2e/pageObject.ts +52 -0
  91. package/force-app/main/default/lwc/quanticRecommendationList/e2e/quanticRecommendationList.e2e.ts +53 -0
  92. package/force-app/main/default/lwc/quanticRefineModalContent/__tests__/quanticRefineModalContent.test.js +747 -0
  93. package/force-app/main/default/lwc/quanticRefineToggle/__tests__/quanticRefineToggle.test.js +542 -0
  94. package/force-app/main/default/lwc/quanticResultAction/__tests__/quanticResultAction.test.js +262 -0
  95. package/force-app/main/default/lwc/quanticResultActionBar/__tests__/quanticResultActionBar.test.js +141 -0
  96. package/force-app/main/default/lwc/quanticResultChildren/__tests__/quanticResultChildren.test.js +340 -0
  97. package/force-app/main/default/lwc/quanticResultCopyToClipboard/__tests__/quanticResultCopyToClipboard.test.js +300 -0
  98. package/force-app/main/default/lwc/quanticResultCopyToClipboard/e2e/fixture.ts +46 -0
  99. package/force-app/main/default/lwc/quanticResultCopyToClipboard/e2e/pageObject.ts +49 -0
  100. package/force-app/main/default/lwc/quanticResultCopyToClipboard/e2e/quanticResultCopyToClipboard.e2e.ts +40 -0
  101. package/force-app/main/default/lwc/quanticResultDate/__tests__/quanticResultDate.test.js +144 -0
  102. package/force-app/main/default/lwc/quanticResultField/__tests__/quanticResultField.test.js +120 -0
  103. package/force-app/main/default/lwc/quanticResultHighlightedTextField/__tests__/quanticResultHighlightedTextField.test.js +209 -0
  104. package/force-app/main/default/lwc/quanticResultLink/__tests__/quanticResultLink.test.js +261 -0
  105. package/force-app/main/default/lwc/quanticResultList/__tests__/quanticResultList.test.js +342 -0
  106. package/force-app/main/default/lwc/quanticResultList/e2e/fixture.ts +66 -0
  107. package/force-app/main/default/lwc/quanticResultList/e2e/pageObject.ts +81 -0
  108. package/force-app/main/default/lwc/quanticResultList/e2e/quanticResultList.e2e.ts +69 -0
  109. package/force-app/main/default/lwc/quanticResultMultiValueText/__tests__/quanticResultMultiValueText.test.js +235 -0
  110. package/force-app/main/default/lwc/quanticResultNumber/__tests__/quanticResultNumber.test.js +144 -0
  111. package/force-app/main/default/lwc/quanticResultPrintableUri/__tests__/quanticResultPrintableUri.test.js +324 -0
  112. package/force-app/main/default/lwc/quanticResultQuickview/__tests__/quanticResultQuickview.test.js +301 -0
  113. package/force-app/main/default/lwc/quanticResultQuickview/e2e/fixture.ts +81 -0
  114. package/force-app/main/default/lwc/quanticResultQuickview/e2e/pageObject.ts +38 -0
  115. package/force-app/main/default/lwc/quanticResultQuickview/e2e/quanticResultQuickView.e2e.ts +66 -0
  116. package/force-app/main/default/lwc/quanticResultTemplate/__tests__/quanticResultTemplate.test.js +90 -0
  117. package/force-app/main/default/lwc/quanticResultText/__tests__/quanticResultText.test.js +155 -0
  118. package/force-app/main/default/lwc/quanticResultsPerPage/__tests__/quanticResultsPerPage.test.js +464 -0
  119. package/force-app/main/default/lwc/quanticResultsPerPage/e2e/fixture.ts +74 -0
  120. package/force-app/main/default/lwc/quanticResultsPerPage/e2e/pageObject.ts +85 -0
  121. package/force-app/main/default/lwc/quanticResultsPerPage/e2e/quanticResultsPerPage.e2e.ts +97 -0
  122. package/force-app/main/default/lwc/quanticSearchBox/__tests__/quanticSearchBox.test.js +487 -0
  123. package/force-app/main/default/lwc/quanticSearchBox/e2e/fixture.ts +84 -0
  124. package/force-app/main/default/lwc/quanticSearchBox/e2e/pageObject.ts +45 -0
  125. package/force-app/main/default/lwc/quanticSearchBox/e2e/quanticSearchBox.e2e.ts +159 -0
  126. package/force-app/main/default/lwc/quanticSearchBoxInput/__tests__/quanticSearchBoxInput.test.js +743 -0
  127. package/force-app/main/default/lwc/quanticSearchBoxSuggestionsList/__tests__/quanticSearchBoxSuggestionsList.test.js +571 -0
  128. package/force-app/main/default/lwc/quanticSearchBoxSuggestionsList/e2e/fixture.ts +110 -0
  129. package/force-app/main/default/lwc/quanticSearchBoxSuggestionsList/e2e/pageObject.ts +113 -0
  130. package/force-app/main/default/lwc/quanticSearchBoxSuggestionsList/e2e/quanticSearchBoxSuggestionsList.e2e.ts +299 -0
  131. package/force-app/main/default/lwc/quanticSmartSnippet/__tests__/quanticSmartSnippet.test.js +341 -0
  132. package/force-app/main/default/lwc/quanticSmartSnippet/e2e/data.ts +21 -0
  133. package/force-app/main/default/lwc/quanticSmartSnippet/e2e/fixture.ts +91 -0
  134. package/force-app/main/default/lwc/quanticSmartSnippet/e2e/pageObject.ts +196 -0
  135. package/force-app/main/default/lwc/quanticSmartSnippet/e2e/quanticSmartSnippet.e2e.ts +192 -0
  136. package/force-app/main/default/lwc/quanticSmartSnippetAnswer/__tests__/quanticSmartSnippetAnswer.test.js +126 -0
  137. package/force-app/main/default/lwc/quanticSmartSnippetSource/__tests__/quanticSmartSnippetSource.test.js +290 -0
  138. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/__tests__/quanticSmartSnippetSuggestions.test.js +329 -0
  139. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/e2e/data.ts +31 -0
  140. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/e2e/fixture.ts +93 -0
  141. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/e2e/pageObject.ts +160 -0
  142. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/e2e/quanticSmartSnippetSuggestions.e2e.ts +127 -0
  143. package/force-app/main/default/lwc/quanticSort/__tests__/quanticSort.test.js +416 -0
  144. package/force-app/main/default/lwc/quanticSort/e2e/fixture.ts +61 -0
  145. package/force-app/main/default/lwc/quanticSort/e2e/pageObject.ts +89 -0
  146. package/force-app/main/default/lwc/quanticSort/e2e/quanticSort.e2e.ts +91 -0
  147. package/force-app/main/default/lwc/quanticSourceCitations/__tests__/quanticSourceCitations.test.js +136 -0
  148. package/force-app/main/default/lwc/quanticStandaloneSearchBox/__tests__/quanticStandaloneSearchBox.test.js +387 -0
  149. package/force-app/main/default/lwc/quanticStandaloneSearchBox/e2e/fixture.ts +53 -0
  150. package/force-app/main/default/lwc/quanticStandaloneSearchBox/e2e/pageObject.ts +54 -0
  151. package/force-app/main/default/lwc/quanticStandaloneSearchBox/e2e/quanticStandaloneSearchBox.e2e.ts +72 -0
  152. package/force-app/main/default/lwc/quanticStatefulButton/__tests__/quanticStatefulButton.test.js +222 -0
  153. package/force-app/main/default/lwc/quanticSummary/__tests__/quanticSummary.test.js +244 -0
  154. package/force-app/main/default/lwc/quanticTab/__tests__/quanticTab.test.js +333 -0
  155. package/force-app/main/default/lwc/quanticTab/e2e/fixture.ts +56 -0
  156. package/force-app/main/default/lwc/quanticTab/e2e/pageObject.ts +68 -0
  157. package/force-app/main/default/lwc/quanticTab/e2e/quanticTab.e2e.ts +72 -0
  158. package/force-app/main/default/lwc/quanticTabBar/__tests__/quanticTabBar.test.js +331 -0
  159. package/force-app/main/default/lwc/quanticTabBar/e2e/fixture.ts +61 -0
  160. package/force-app/main/default/lwc/quanticTabBar/e2e/pageObject.ts +80 -0
  161. package/force-app/main/default/lwc/quanticTabBar/e2e/quanticTabBar.e2e.ts +171 -0
  162. package/force-app/main/default/lwc/quanticTimeframeFacet/__tests__/quanticTimeframeFacet.test.js +1037 -0
  163. package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/fixture.ts +58 -0
  164. package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/pageObject.ts +43 -0
  165. package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/quanticTimeframeFacet.e2e.ts +160 -0
  166. package/force-app/main/default/lwc/quanticTooltip/__tests__/quanticTooltip.test.js +107 -0
  167. package/force-app/main/default/lwc/quanticUserAction/__tests__/quanticUserAction.test.js +427 -0
  168. package/force-app/main/default/lwc/quanticUserActionsSession/__tests__/quanticUserActionsSession.test.js +269 -0
  169. package/force-app/main/default/lwc/quanticUserActionsTimeline/__tests__/data/userActionsState.json +89 -0
  170. package/force-app/main/default/lwc/quanticUserActionsTimeline/__tests__/quanticUserActionsTimeline.test.js +511 -0
  171. package/force-app/main/default/lwc/quanticUserActionsToggle/__tests__/quanticUserActionsToggle.test.js +229 -0
  172. package/force-app/main/default/lwc/quanticUserActionsToggle/e2e/data.ts +32 -0
  173. package/force-app/main/default/lwc/quanticUserActionsToggle/e2e/fixture.ts +32 -0
  174. package/force-app/main/default/lwc/quanticUserActionsToggle/e2e/pageObject.ts +71 -0
  175. package/force-app/main/default/lwc/quanticUserActionsToggle/e2e/quanticUserActionsToggle.e2e.ts +39 -0
  176. package/force-app/main/default/lwc/quanticUtils/__tests__/citationAnchoringUtils.test.js +84 -0
  177. package/force-app/main/default/lwc/quanticUtils/__tests__/facetDependenciesUtils.test.js +92 -0
  178. package/force-app/main/default/lwc/quanticUtils/__tests__/markdownUtils.test.js +71 -0
  179. package/force-app/main/default/lwc/quanticUtils/__tests__/quanticUtils.test.js +223 -0
  180. package/force-app/main/default/lwc/quanticViewedByCustomerBadge/__tests__/quanticViewedByCustomerBadge.test.js +131 -0
  181. package/force-app/main/default/staticresources/coveoheadless/case-assist/headless.js +2 -2
  182. package/force-app/main/default/staticresources/coveoheadless/definitions/app/case-assist-engine/case-assist-engine.d.ts +3 -3
  183. package/force-app/main/default/staticresources/coveoheadless/definitions/app/commerce-engine/commerce-engine.d.ts +16 -16
  184. package/force-app/main/default/staticresources/coveoheadless/definitions/app/common-reducers.d.ts +1 -1
  185. package/force-app/main/default/staticresources/coveoheadless/definitions/app/insight-engine/insight-engine.d.ts +5 -5
  186. package/force-app/main/default/staticresources/coveoheadless/definitions/app/recommendation-engine/recommendation-engine.d.ts +4 -4
  187. package/force-app/main/default/staticresources/coveoheadless/definitions/app/search-engine/search-engine.d.ts +4 -4
  188. package/force-app/main/default/staticresources/coveoheadless/definitions/app/store.d.ts +2 -2
  189. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/commerce/core/facets/headless-core-commerce-facet.d.ts +1 -1
  190. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/facets/range-facet/headless-core-range-facet.d.ts +1 -1
  191. package/force-app/main/default/staticresources/coveoheadless/definitions/features/actions-history/ipx-actions-history-actions.d.ts +1 -1
  192. package/force-app/main/default/staticresources/coveoheadless/definitions/features/advanced-search-queries/advanced-search-queries-slice.d.ts +1 -1
  193. package/force-app/main/default/staticresources/coveoheadless/definitions/features/attached-results/attached-results-slice.d.ts +1 -1
  194. package/force-app/main/default/staticresources/coveoheadless/definitions/features/case-assist-configuration/case-assist-configuration-slice.d.ts +1 -1
  195. package/force-app/main/default/staticresources/coveoheadless/definitions/features/case-context/case-context-slice.d.ts +1 -1
  196. package/force-app/main/default/staticresources/coveoheadless/definitions/features/case-field/case-field-actions.d.ts +1 -1
  197. package/force-app/main/default/staticresources/coveoheadless/definitions/features/case-field/case-field-slice.d.ts +1 -1
  198. package/force-app/main/default/staticresources/coveoheadless/definitions/features/case-input/case-input-slice.d.ts +1 -1
  199. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/configuration/configuration-slice.d.ts +1 -1
  200. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/context/cart/cart-actions.d.ts +2 -2
  201. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/context/cart/cart-slice.d.ts +1 -1
  202. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/context/context-slice.d.ts +1 -1
  203. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/did-you-mean/did-you-mean-slice.d.ts +1 -1
  204. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/facets/facet-search-set/commerce-facet-search-actions.d.ts +2 -2
  205. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/facets/facet-set/facet-set-slice.d.ts +1 -1
  206. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/facets/field-suggestions-order/field-suggestions-order-slice.d.ts +1 -1
  207. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/facets/numeric-facet/manual-numeric-facet-slice.d.ts +1 -1
  208. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/instant-products/instant-products-slice.d.ts +1 -1
  209. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/pagination/pagination-slice.d.ts +1 -1
  210. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/parameters/parameters-slice.d.ts +1 -1
  211. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/product/product-actions.d.ts +2 -2
  212. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/product-listing/product-listing-actions.d.ts +2 -2
  213. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/product-listing/product-listing-slice.d.ts +1 -1
  214. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/query/query-slice.d.ts +1 -1
  215. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/query-suggest/query-suggest-actions.d.ts +1 -1
  216. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/recent-queries/recent-queries-slice.d.ts +1 -1
  217. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/recommendations/recommendations-actions.d.ts +2 -2
  218. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/recommendations/recommendations-slice.d.ts +1 -1
  219. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/search/search-actions.d.ts +4 -4
  220. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/search/search-slice.d.ts +1 -1
  221. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/sort/sort-slice.d.ts +1 -1
  222. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/standalone-search-box-set/standalone-search-box-set-actions.d.ts +1 -1
  223. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/standalone-search-box-set/standalone-search-box-set-slice.d.ts +1 -1
  224. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/triggers/triggers-slice.d.ts +1 -1
  225. package/force-app/main/default/staticresources/coveoheadless/definitions/features/configuration/configuration-slice.d.ts +1 -1
  226. package/force-app/main/default/staticresources/coveoheadless/definitions/features/context/context-slice.d.ts +1 -1
  227. package/force-app/main/default/staticresources/coveoheadless/definitions/features/debug/debug-slice.d.ts +1 -1
  228. package/force-app/main/default/staticresources/coveoheadless/definitions/features/debug/version-slice.d.ts +1 -1
  229. package/force-app/main/default/staticresources/coveoheadless/definitions/features/dictionary-field-context/dictionary-field-context-slice.d.ts +1 -1
  230. package/force-app/main/default/staticresources/coveoheadless/definitions/features/did-you-mean/did-you-mean-slice.d.ts +1 -1
  231. package/force-app/main/default/staticresources/coveoheadless/definitions/features/document-suggestion/document-suggestion-actions.d.ts +1 -1
  232. package/force-app/main/default/staticresources/coveoheadless/definitions/features/document-suggestion/document-suggestion-slice.d.ts +1 -1
  233. package/force-app/main/default/staticresources/coveoheadless/definitions/features/excerpt-length/excerpt-length-slice.d.ts +1 -1
  234. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facet-options/facet-options-slice.d.ts +1 -1
  235. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/automatic-facet-set/automatic-facet-set-slice.d.ts +1 -1
  236. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/category-facet-set/category-facet-set-slice.d.ts +1 -1
  237. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/facet-order/facet-order-slice.d.ts +1 -1
  238. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/facet-search-set/category/category-facet-search-set-slice.d.ts +1 -1
  239. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/facet-search-set/generic/generic-facet-search-actions.d.ts +2 -2
  240. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/facet-search-set/specific/specific-facet-search-set-slice.d.ts +1 -1
  241. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/facet-set/facet-set-controller-actions.d.ts +2 -2
  242. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/facet-set/facet-set-slice.d.ts +1 -1
  243. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/range-facets/date-facet-set/date-facet-controller-actions.d.ts +2 -2
  244. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/range-facets/date-facet-set/date-facet-set-slice.d.ts +1 -1
  245. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/range-facets/numeric-facet-set/numeric-facet-controller-actions.d.ts +2 -2
  246. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/range-facets/numeric-facet-set/numeric-facet-set-slice.d.ts +1 -1
  247. package/force-app/main/default/staticresources/coveoheadless/definitions/features/fields/fields-actions.d.ts +1 -1
  248. package/force-app/main/default/staticresources/coveoheadless/definitions/features/fields/fields-slice.d.ts +1 -1
  249. package/force-app/main/default/staticresources/coveoheadless/definitions/features/folding/folding-actions.d.ts +1 -1
  250. package/force-app/main/default/staticresources/coveoheadless/definitions/features/folding/folding-slice.d.ts +1 -1
  251. package/force-app/main/default/staticresources/coveoheadless/definitions/features/folding/insight-folding-actions.d.ts +1 -1
  252. package/force-app/main/default/staticresources/coveoheadless/definitions/features/generated-answer/generated-answer-actions.d.ts +2 -2
  253. package/force-app/main/default/staticresources/coveoheadless/definitions/features/generated-answer/generated-answer-slice.d.ts +1 -1
  254. package/force-app/main/default/staticresources/coveoheadless/definitions/features/history/history-actions.d.ts +3 -3
  255. package/force-app/main/default/staticresources/coveoheadless/definitions/features/history/history-slice.d.ts +2 -2
  256. package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-configuration/insight-configuration-slice.d.ts +1 -1
  257. package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-interface/insight-interface-actions.d.ts +1 -1
  258. package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-interface/insight-interface-slice.d.ts +1 -1
  259. package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-search/insight-search-actions.d.ts +5 -5
  260. package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-search/legacy/insight-search-actions.d.ts +4 -4
  261. package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-user-actions/insight-user-actions-actions.d.ts +1 -1
  262. package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-user-actions/insight-user-actions-slice.d.ts +1 -1
  263. package/force-app/main/default/staticresources/coveoheadless/definitions/features/instant-results/instant-results-slice.d.ts +1 -1
  264. package/force-app/main/default/staticresources/coveoheadless/definitions/features/pagination/pagination-slice.d.ts +1 -1
  265. package/force-app/main/default/staticresources/coveoheadless/definitions/features/pipeline/pipeline-slice.d.ts +1 -1
  266. package/force-app/main/default/staticresources/coveoheadless/definitions/features/query/query-slice.d.ts +1 -1
  267. package/force-app/main/default/staticresources/coveoheadless/definitions/features/query-set/query-set-slice.d.ts +1 -1
  268. package/force-app/main/default/staticresources/coveoheadless/definitions/features/query-suggest/query-suggest-actions.d.ts +1 -1
  269. package/force-app/main/default/staticresources/coveoheadless/definitions/features/query-suggest/query-suggest-slice.d.ts +1 -1
  270. package/force-app/main/default/staticresources/coveoheadless/definitions/features/question-answering/question-answering-slice.d.ts +1 -1
  271. package/force-app/main/default/staticresources/coveoheadless/definitions/features/recent-queries/recent-queries-slice.d.ts +1 -1
  272. package/force-app/main/default/staticresources/coveoheadless/definitions/features/recent-results/recent-results-slice.d.ts +1 -1
  273. package/force-app/main/default/staticresources/coveoheadless/definitions/features/recommendation/recommendation-actions.d.ts +1 -1
  274. package/force-app/main/default/staticresources/coveoheadless/definitions/features/recommendation/recommendation-slice.d.ts +1 -1
  275. package/force-app/main/default/staticresources/coveoheadless/definitions/features/result-preview/result-preview-actions.d.ts +2 -2
  276. package/force-app/main/default/staticresources/coveoheadless/definitions/features/result-preview/result-preview-slice.d.ts +1 -1
  277. package/force-app/main/default/staticresources/coveoheadless/definitions/features/search/legacy/search-actions.d.ts +5 -5
  278. package/force-app/main/default/staticresources/coveoheadless/definitions/features/search/search-actions.d.ts +6 -6
  279. package/force-app/main/default/staticresources/coveoheadless/definitions/features/search/search-slice.d.ts +1 -1
  280. package/force-app/main/default/staticresources/coveoheadless/definitions/features/search-hub/search-hub-slice.d.ts +1 -1
  281. package/force-app/main/default/staticresources/coveoheadless/definitions/features/sort-criteria/sort-criteria-slice.d.ts +1 -1
  282. package/force-app/main/default/staticresources/coveoheadless/definitions/features/standalone-search-box-set/standalone-search-box-set-actions.d.ts +1 -1
  283. package/force-app/main/default/staticresources/coveoheadless/definitions/features/standalone-search-box-set/standalone-search-box-set-slice.d.ts +1 -1
  284. package/force-app/main/default/staticresources/coveoheadless/definitions/features/static-filter-set/static-filter-set-slice.d.ts +1 -1
  285. package/force-app/main/default/staticresources/coveoheadless/definitions/features/tab-set/tab-set-slice.d.ts +1 -1
  286. package/force-app/main/default/staticresources/coveoheadless/definitions/features/triggers/triggers-slice.d.ts +1 -1
  287. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr/commerce/factories/build-factory.d.ts +6 -1
  288. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr/common/access-token-manager.d.ts +19 -0
  289. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-next/commerce/types/engine.d.ts +4 -2
  290. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-next/common/access-token-manager.d.ts +19 -0
  291. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-next/search/engine/search-engine.ssr.d.ts +2 -2
  292. package/force-app/main/default/staticresources/coveoheadless/definitions/test/mock-ssr-controller-definitions.d.ts +2 -2
  293. package/force-app/main/default/staticresources/coveoheadless/headless.js +2 -2
  294. package/force-app/main/default/staticresources/coveoheadless/insight/headless.js +2 -2
  295. package/force-app/main/default/staticresources/coveoheadless/recommendation/headless.js +2 -2
  296. package/package.json +46 -44
@@ -0,0 +1,404 @@
1
+ jest.mock('c/quanticHeadlessLoader');
2
+
3
+ import QuanticDocumentSuggestion from 'c/quanticDocumentSuggestion';
4
+ import {buildCreateTestComponent, cleanup, flushPromises} from 'c/testUtils';
5
+ import * as quanticHeadlessLoader from 'c/quanticHeadlessLoader';
6
+ const headlessLoaderMock = jest.mocked(quanticHeadlessLoader);
7
+
8
+ const engineMock = {
9
+ id: 'exampleEngineIdMock',
10
+ dispatch: jest.fn(),
11
+ };
12
+ headlessLoaderMock.initializeWithHeadless.mockImplementation(
13
+ async (element, _, initialize) => {
14
+ initialize(engineMock);
15
+ }
16
+ );
17
+ headlessLoaderMock.getHeadlessEnginePromise.mockImplementation(() =>
18
+ Promise.resolve(engineMock.id)
19
+ );
20
+
21
+ let updateSuggestions;
22
+ const documentSuggestionListMock = {
23
+ subscribe: jest.fn((callback) => {
24
+ updateSuggestions = async () => {
25
+ callback();
26
+ await flushPromises();
27
+ };
28
+ return () => {}; // Fake unsubscribe function
29
+ }),
30
+ };
31
+
32
+ const functionsMocks = {
33
+ fetchDocumentSuggestions: jest.fn(),
34
+ logDocumentSuggestionClick: jest.fn(),
35
+ logDocumentSuggestionRating: jest.fn(),
36
+ };
37
+
38
+ const headlessCaseAssistMock = {
39
+ buildDocumentSuggestionList: jest
40
+ .fn()
41
+ .mockReturnValue(documentSuggestionListMock),
42
+ buildQuickview: jest.fn().mockReturnValue(documentSuggestionListMock),
43
+ loadCaseAssistAnalyticsActions: jest.fn().mockReturnValue({
44
+ logDocumentSuggestionClick: functionsMocks.logDocumentSuggestionClick,
45
+ logDocumentSuggestionRating: functionsMocks.logDocumentSuggestionRating,
46
+ }),
47
+ loadDocumentSuggestionActions: jest.fn().mockReturnValue({
48
+ fetchDocumentSuggestions: functionsMocks.fetchDocumentSuggestions,
49
+ }),
50
+ };
51
+
52
+ // @ts-ignore
53
+ global.CoveoHeadlessCaseAssist = headlessCaseAssistMock;
54
+ headlessLoaderMock.getHeadlessBundle.mockReturnValue(headlessCaseAssistMock);
55
+
56
+ const createTestComponent = buildCreateTestComponent(
57
+ QuanticDocumentSuggestion,
58
+ 'c-quantic-document-suggestion',
59
+ {
60
+ engineId: engineMock.id,
61
+ }
62
+ );
63
+
64
+ const selectors = {
65
+ container: '.slds-card',
66
+ accordion: 'lightning-accordion',
67
+ accordionSection: 'lightning-accordion-section',
68
+ noSuggestions: 'slot[name="no-suggestions"]',
69
+ spinner: '.loading-holder lightning-spinner',
70
+ quickview: 'c-quantic-result-quickview',
71
+ componentError: 'c-quantic-component-error',
72
+ };
73
+
74
+ function mockErroneousHeadlessInitialization() {
75
+ headlessLoaderMock.initializeWithHeadless.mockImplementation(
76
+ async (element) => {
77
+ if (element instanceof QuanticDocumentSuggestion) {
78
+ element.setInitializationError();
79
+ }
80
+ }
81
+ );
82
+ }
83
+
84
+ describe('c-quantic-document-suggestion', () => {
85
+ beforeEach(() => {
86
+ documentSuggestionListMock.state = {
87
+ documents: [],
88
+ loading: false,
89
+ };
90
+ });
91
+
92
+ afterEach(() => {
93
+ cleanup();
94
+ });
95
+
96
+ describe('on initialization', () => {
97
+ it('should initialize the component and subscribe to the controller', async () => {
98
+ createTestComponent();
99
+
100
+ expect(headlessLoaderMock.registerComponentForInit).toHaveBeenCalled();
101
+ expect(headlessLoaderMock.initializeWithHeadless).toHaveBeenCalled();
102
+ expect(
103
+ headlessCaseAssistMock.buildDocumentSuggestionList
104
+ ).toHaveBeenCalledTimes(1);
105
+ expect(
106
+ headlessCaseAssistMock.buildDocumentSuggestionList
107
+ ).toHaveBeenCalledWith(engineMock);
108
+ expect(
109
+ headlessCaseAssistMock.loadCaseAssistAnalyticsActions
110
+ ).toHaveBeenCalledTimes(1);
111
+ expect(
112
+ headlessCaseAssistMock.loadDocumentSuggestionActions
113
+ ).toHaveBeenCalledTimes(1);
114
+ expect(engineMock.dispatch).not.toHaveBeenCalled();
115
+ expect(documentSuggestionListMock.subscribe).toHaveBeenCalledTimes(1);
116
+ expect(updateSuggestions).toBeDefined();
117
+ });
118
+ });
119
+
120
+ describe('when loading suggestions', () => {
121
+ it('should render the loading holder only', async () => {
122
+ const element = createTestComponent();
123
+ documentSuggestionListMock.state.loading = true;
124
+ updateSuggestions();
125
+ await flushPromises();
126
+
127
+ const spinner = element.shadowRoot.querySelector(selectors.spinner);
128
+ const container = element.shadowRoot.querySelector(selectors.container);
129
+ const noSuggestions = element.shadowRoot.querySelector(
130
+ selectors.noSuggestions
131
+ );
132
+ expect(spinner).toBeTruthy();
133
+ expect(container).toBeFalsy();
134
+ expect(noSuggestions).toBeFalsy();
135
+ });
136
+ });
137
+
138
+ describe('when there are no suggestions', () => {
139
+ it('should render the no-suggestions message', async () => {
140
+ const element = createTestComponent();
141
+ await updateSuggestions();
142
+
143
+ const accordion = element.shadowRoot.querySelector(selectors.accordion);
144
+ const noSuggestions = element.shadowRoot.querySelector(
145
+ selectors.noSuggestions
146
+ );
147
+ expect(accordion).toBeFalsy();
148
+ expect(noSuggestions).toBeTruthy();
149
+ });
150
+ });
151
+
152
+ describe('when fetchOnInit property is set to true', () => {
153
+ it('should fetch document suggestion on initialization', async () => {
154
+ createTestComponent({
155
+ fetchOnInit: true,
156
+ });
157
+ await flushPromises();
158
+
159
+ expect(functionsMocks.fetchDocumentSuggestions).toHaveBeenCalledTimes(1);
160
+ });
161
+ });
162
+
163
+ describe('with suggestions', () => {
164
+ beforeEach(() => {
165
+ documentSuggestionListMock.state.documents = [
166
+ {
167
+ uniqueId: 'ego',
168
+ fields: {
169
+ uri: 'weed eater',
170
+ },
171
+ },
172
+ {
173
+ uniqueId: 'stihl',
174
+ fields: {
175
+ uri: 'chainsaw',
176
+ },
177
+ },
178
+ ];
179
+ });
180
+
181
+ it('should render the component and all parts with default options', async () => {
182
+ const element = createTestComponent();
183
+ await flushPromises();
184
+ expect(functionsMocks.fetchDocumentSuggestions).not.toHaveBeenCalled();
185
+ expect(headlessLoaderMock.registerComponentForInit).toHaveBeenCalled();
186
+
187
+ const accordion = element.shadowRoot.querySelector(selectors.accordion);
188
+ const noSuggestions = element.shadowRoot.querySelector(
189
+ selectors.noSuggestions
190
+ );
191
+ const componentError = element.shadowRoot.querySelector(
192
+ selectors.componentError
193
+ );
194
+
195
+ expect(accordion).toBeFalsy();
196
+ expect(noSuggestions).toBeTruthy();
197
+ expect(componentError).toBeFalsy();
198
+
199
+ await updateSuggestions();
200
+
201
+ const updatedNoSuggestions = element.shadowRoot.querySelector(
202
+ selectors.noSuggestions
203
+ );
204
+ const container = element.shadowRoot.querySelector(selectors.container);
205
+ const updatedAccordion = element.shadowRoot.querySelector(
206
+ selectors.accordion
207
+ );
208
+
209
+ expect(updatedNoSuggestions).toBeFalsy();
210
+ expect(container).toBeTruthy();
211
+ expect(updatedAccordion).toBeTruthy();
212
+
213
+ const sections = element.shadowRoot.querySelectorAll(
214
+ selectors.accordionSection
215
+ );
216
+ expect(sections.length).toBe(
217
+ documentSuggestionListMock.state.documents.length
218
+ );
219
+
220
+ sections.forEach((section, index) => {
221
+ const {uniqueId, title} =
222
+ documentSuggestionListMock.state.documents[index];
223
+ expect(section.label).toBe(title);
224
+ expect(section.getAttribute('data-id')).toBe(uniqueId);
225
+ expect(section.querySelector(selectors.quickview)).toBeTruthy();
226
+ expect(
227
+ section
228
+ .querySelector('slot[name="actions"]')
229
+ .getAttribute('data-doc-id')
230
+ ).toBe(uniqueId);
231
+ expect(
232
+ section
233
+ .querySelector('slot[name="rating"]')
234
+ .getAttribute('data-doc-id')
235
+ ).toBe(uniqueId);
236
+ });
237
+ });
238
+
239
+ it('should not render quickview button when withoutQuickview is set to true', async () => {
240
+ const element = createTestComponent({
241
+ withoutQuickview: true,
242
+ });
243
+ await updateSuggestions();
244
+
245
+ expect(element.shadowRoot.querySelector(selectors.quickview)).toBeFalsy();
246
+ });
247
+
248
+ it('should log a suggestion click if the suggestion is not opened', async () => {
249
+ const element = createTestComponent();
250
+ await updateSuggestions();
251
+
252
+ const sections = element.shadowRoot.querySelectorAll(
253
+ selectors.accordionSection
254
+ );
255
+ const accordion = element.shadowRoot.querySelector(selectors.accordion);
256
+
257
+ // First document is already opened and will be collapsed, no click event logged.
258
+ sections[0].click();
259
+ expect(functionsMocks.logDocumentSuggestionClick).toHaveBeenCalledTimes(
260
+ 0
261
+ );
262
+ accordion.activeSectionName = sections[1].name;
263
+
264
+ sections[1].click();
265
+ await flushPromises();
266
+ expect(functionsMocks.logDocumentSuggestionClick).toHaveBeenCalledTimes(
267
+ 1
268
+ );
269
+ expect(functionsMocks.logDocumentSuggestionClick).toHaveBeenCalledWith(
270
+ documentSuggestionListMock.state.documents[1].uniqueId
271
+ );
272
+ });
273
+
274
+ it('should log analytics when rating a document', async () => {
275
+ const element = createTestComponent();
276
+ await updateSuggestions();
277
+
278
+ const customEvent = new CustomEvent('quantic__rating', {
279
+ detail: {id: 'mastercraft', score: 2},
280
+ });
281
+ element.shadowRoot.dispatchEvent(customEvent);
282
+ expect(functionsMocks.logDocumentSuggestionRating).toHaveBeenCalledTimes(
283
+ 1
284
+ );
285
+ expect(functionsMocks.logDocumentSuggestionRating).toHaveBeenCalledWith(
286
+ 'mastercraft',
287
+ 2
288
+ );
289
+ });
290
+
291
+ it('should truncate documents to maxDocuments if the state contains more', async () => {
292
+ const element = createTestComponent({
293
+ maxDocuments: 1,
294
+ });
295
+ await updateSuggestions();
296
+
297
+ const sections = element.shadowRoot.querySelectorAll(
298
+ selectors.accordionSection
299
+ );
300
+ expect(sections.length).toBe(1);
301
+ });
302
+
303
+ it('should open the documents depending on numberOfAutoOpenedDocuments', async () => {
304
+ const element = createTestComponent({
305
+ fetchOnInit: true,
306
+ numberOfAutoOpenedDocuments: 2,
307
+ });
308
+ await updateSuggestions();
309
+
310
+ const accordion = element.shadowRoot.querySelector(selectors.accordion);
311
+ const sections = element.shadowRoot.querySelectorAll(
312
+ selectors.accordionSection
313
+ );
314
+ expect(sections.length).toBe(2);
315
+ expect(accordion.activeSectionName).toEqual([
316
+ sections[0].name,
317
+ sections[1].name,
318
+ ]);
319
+ });
320
+ });
321
+
322
+ describe('when two document suggestions have a similar title', () => {
323
+ it('should open the right document suggestion when clicked', async () => {
324
+ documentSuggestionListMock.state.documents = [
325
+ {
326
+ title: 'dewalt',
327
+ uniqueId: 'dw745',
328
+ fields: {
329
+ uri: 'table saw',
330
+ },
331
+ },
332
+ {
333
+ title: 'dewalt',
334
+ uniqueId: 'dw560',
335
+ fields: {
336
+ uri: 'router',
337
+ },
338
+ },
339
+ ];
340
+
341
+ const element = createTestComponent({
342
+ numberOfAutoOpenedDocuments: 0,
343
+ });
344
+ await updateSuggestions();
345
+
346
+ const sectionToClick = element.shadowRoot.querySelectorAll(
347
+ selectors.accordionSection
348
+ )[1];
349
+ const accordion = element.shadowRoot.querySelector(selectors.accordion);
350
+ accordion.activeSectionName = sectionToClick.name;
351
+ sectionToClick.click();
352
+ expect(sectionToClick.name).toBe(
353
+ documentSuggestionListMock.state.documents[1].uniqueId
354
+ );
355
+ expect(functionsMocks.logDocumentSuggestionClick).toHaveBeenCalledTimes(
356
+ 1
357
+ );
358
+ expect(functionsMocks.logDocumentSuggestionClick).toHaveBeenCalledWith(
359
+ sectionToClick.name
360
+ );
361
+ });
362
+ });
363
+
364
+ describe('with invalid options', () => {
365
+ it('should set an error message if maxDocuments is invalid', async () => {
366
+ const element = createTestComponent({
367
+ maxDocuments: 0,
368
+ });
369
+ await flushPromises();
370
+
371
+ const componentError = element.shadowRoot.querySelector(
372
+ selectors.componentError
373
+ );
374
+ expect(componentError).toBeTruthy();
375
+ });
376
+ it('should set an error message if numberOfAutoOpenedDocuments is invalid', async () => {
377
+ const element = createTestComponent({
378
+ numberOfAutoOpenedDocuments: -1,
379
+ });
380
+ await flushPromises();
381
+
382
+ const componentError = element.shadowRoot.querySelector(
383
+ selectors.componentError
384
+ );
385
+ expect(componentError).toBeTruthy();
386
+ });
387
+ });
388
+
389
+ describe('when an initialization error occurs', () => {
390
+ beforeEach(() => {
391
+ mockErroneousHeadlessInitialization();
392
+ });
393
+
394
+ it('should display the initialization error component', async () => {
395
+ const element = createTestComponent();
396
+ await flushPromises();
397
+
398
+ const componentError = element.shadowRoot.querySelector(
399
+ selectors.componentError
400
+ );
401
+ expect(componentError).toBeTruthy();
402
+ });
403
+ });
404
+ });
@@ -0,0 +1,38 @@
1
+ import {DocumentSuggestionObject} from './pageObject';
2
+ import {quanticBase} from '../../../../../../playwright/fixtures/baseFixture';
3
+ import {SearchObject} from '../../../../../../playwright/page-object/searchObject';
4
+ import {CaseAssistObject} from '../../../../../../playwright/page-object/caseAssistObject';
5
+
6
+ const pageUrl = 's/quantic-document-suggestion';
7
+
8
+ interface DocumentSuggestionOptions {
9
+ engineId: string;
10
+ searchEngineId: string;
11
+ maxDocuments: number;
12
+ fetchOnInit: boolean;
13
+ withoutQuickview: boolean;
14
+ numberOfAutoOpenedDocuments: number;
15
+ }
16
+
17
+ type QuanticDocumentSuggestionE2EFixtures = {
18
+ documentSuggestion: DocumentSuggestionObject;
19
+ search: SearchObject;
20
+ caseAssist: CaseAssistObject;
21
+ options: Partial<DocumentSuggestionOptions>;
22
+ urlHash: string;
23
+ };
24
+
25
+ export const test = quanticBase.extend<QuanticDocumentSuggestionE2EFixtures>({
26
+ options: {},
27
+ urlHash: '',
28
+ caseAssist: async ({page}, use) => {
29
+ await use(new CaseAssistObject(page));
30
+ },
31
+ documentSuggestion: async ({page, options, configuration}, use) => {
32
+ await page.goto(pageUrl);
33
+ await configuration.configure(options);
34
+ await use(new DocumentSuggestionObject(page));
35
+ },
36
+ });
37
+
38
+ export {expect} from '@playwright/test';
@@ -0,0 +1,52 @@
1
+ import type {Locator, Page, Request} from '@playwright/test';
2
+ import {
3
+ isUaClickEvent,
4
+ isEventProtocol,
5
+ } from '../../../../../../playwright/utils/requests';
6
+
7
+ export class DocumentSuggestionObject {
8
+ private page: Page;
9
+
10
+ constructor(page: Page) {
11
+ this.page = page;
12
+ }
13
+
14
+ get documentSuggestion() {
15
+ return this.page.locator('c-quantic-document-suggestion');
16
+ }
17
+
18
+ get accordion() {
19
+ return this.page.locator('lightning-accordion');
20
+ }
21
+
22
+ get sections() {
23
+ return this.page.locator('lightning-accordion-section');
24
+ }
25
+
26
+ get noSuggestionsMessage() {
27
+ return this.page.getByText('No suggestions', {exact: true});
28
+ }
29
+
30
+ sectionContent(index: number): Locator {
31
+ return this.sections.nth(index).locator('div.slds-accordion__content');
32
+ }
33
+
34
+ async clickSuggestion(index: number): Promise<void> {
35
+ await this.sections.nth(index).click();
36
+ }
37
+
38
+ async waitForSuggestionClickEvent(mode: string): Promise<Request> {
39
+ return this.page.waitForRequest((request) => {
40
+ if (mode === 'legacy' && isUaClickEvent(request)) {
41
+ const requestBody = request.postDataJSON?.();
42
+ const event = JSON.parse(requestBody.clickEvent);
43
+ return event.actionCause === 'documentSuggestionClick';
44
+ } else if (mode === 'next' && isEventProtocol(request)) {
45
+ const requestBody = request.postDataJSON?.();
46
+ const requestData = requestBody[0];
47
+ return requestData.meta.type === 'CaseAssist.DocumentSuggestionClick';
48
+ }
49
+ return false;
50
+ });
51
+ }
52
+ }
@@ -0,0 +1,102 @@
1
+ /* eslint-disable no-await-in-loop */
2
+ import {test, expect} from './fixture';
3
+
4
+ const fakeTrackingId = 'tracking_id_123';
5
+
6
+ ['legacy', 'next'].forEach((mode) => {
7
+ test.describe(`quantic document suggestion with analytics mode: ${mode}`, () => {
8
+ let analyticsMode = 'legacy';
9
+ test.beforeEach(async ({documentSuggestion, page}) => {
10
+ analyticsMode = mode;
11
+ if (analyticsMode === 'next') {
12
+ await page.context().addCookies([
13
+ {
14
+ name: 'Coveo-Pendragon',
15
+ value: fakeTrackingId,
16
+ domain: '.my.site.com',
17
+ path: '/',
18
+ },
19
+ {
20
+ name: 'LSKey-c$Coveo-Pendragon',
21
+ value: fakeTrackingId,
22
+ domain: '.my.site.com',
23
+ path: '/',
24
+ },
25
+ ]);
26
+ }
27
+
28
+ await expect(documentSuggestion.noSuggestionsMessage).toBeVisible();
29
+ });
30
+
31
+ test('should handle clicking on a document suggestion', async ({
32
+ page,
33
+ documentSuggestion,
34
+ caseAssist,
35
+ }) => {
36
+ const responsePromise = caseAssist.waitForDocumentSuggestionResponse();
37
+ await caseAssist.fetchSuggestions();
38
+ const response = await responsePromise;
39
+ const suggestions = await response.json();
40
+ const clickedPosition = 2;
41
+
42
+ // Hack(?) to have the request payload in the analytics request next.
43
+ await page.route('*analytics*', (route) => {
44
+ route.continue();
45
+ });
46
+
47
+ const analyticsPromise =
48
+ documentSuggestion.waitForSuggestionClickEvent(analyticsMode);
49
+ await documentSuggestion.clickSuggestion(clickedPosition);
50
+ const analyticsRequest = await analyticsPromise;
51
+ const payload = analyticsRequest.postDataJSON?.();
52
+
53
+ if (analyticsMode === 'legacy') {
54
+ expect(payload).toBeDefined();
55
+ const event = JSON.parse(payload.clickEvent);
56
+ expect(event.actionCause).toBe('documentSuggestionClick');
57
+ expect(event.documentPosition).toBe(clickedPosition + 1);
58
+ expect(event.documentTitle).toBe(
59
+ suggestions.documents[clickedPosition].title
60
+ );
61
+ expect(event.documentUrl).toBe(
62
+ suggestions.documents[clickedPosition].clickUri
63
+ );
64
+ } else {
65
+ expect(payload).toBeDefined();
66
+ expect(payload.length).toBe(1);
67
+ expect(payload[0].meta.config.trackingId).toBe(fakeTrackingId);
68
+ expect(payload[0].meta.type).toBe('CaseAssist.DocumentSuggestionClick');
69
+ expect(payload[0].responseId).toBeDefined();
70
+ expect(payload[0].position).toBe(clickedPosition + 1);
71
+ expect(payload[0].itemMetadata.title).toBe(
72
+ suggestions.documents[clickedPosition].title
73
+ );
74
+ expect(payload[0].itemMetadata.uniqueFieldName).toBe('uniqueId');
75
+ expect(payload[0].itemMetadata.uniqueFieldValue).toBe(
76
+ suggestions.documents[clickedPosition].uniqueId
77
+ );
78
+ }
79
+ });
80
+
81
+ test.describe('when numberOfAutoOpenedDocuments is set to the same as maxDocument', () => {
82
+ test.use({
83
+ options: {
84
+ maxDocuments: 6,
85
+ numberOfAutoOpenedDocuments: 6,
86
+ },
87
+ });
88
+
89
+ test('should open all documents', async ({
90
+ documentSuggestion,
91
+ caseAssist,
92
+ }) => {
93
+ await caseAssist.fetchSuggestions();
94
+ await expect(documentSuggestion.accordion).toBeVisible();
95
+ const sections = await documentSuggestion.sections.count();
96
+ for (let index = 0; index < sections; index++) {
97
+ await expect(documentSuggestion.sectionContent(index)).toBeVisible();
98
+ }
99
+ });
100
+ });
101
+ });
102
+ });