@coveo/quantic 3.32.0 → 3.33.1

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 (316) hide show
  1. package/README.md +15 -15
  2. package/docs/out/quantic-docs.json +1 -1
  3. package/force-app/main/default/lwc/quanticAriaLive/__tests__/quanticAriaLive.test.js +106 -0
  4. package/force-app/main/default/lwc/quanticBreadcrumbManager/__tests__/quanticBreadcrumbManager.test.js +752 -0
  5. package/force-app/main/default/lwc/quanticBreadcrumbManager/e2e/fixture.ts +76 -0
  6. package/force-app/main/default/lwc/quanticBreadcrumbManager/e2e/pageObject.ts +282 -0
  7. package/force-app/main/default/lwc/quanticBreadcrumbManager/e2e/quanticBreadcrumbManager.e2e.ts +167 -0
  8. package/force-app/main/default/lwc/quanticCarousel/__tests__/quanticCarousel.test.js +262 -0
  9. package/force-app/main/default/lwc/quanticCaseClassification/__tests__/quanticCaseClassification.test.js +819 -0
  10. package/force-app/main/default/lwc/quanticCaseClassification/e2e/data.ts +23 -0
  11. package/force-app/main/default/lwc/quanticCaseClassification/e2e/fixture.ts +51 -0
  12. package/force-app/main/default/lwc/quanticCaseClassification/e2e/pageObject.ts +152 -0
  13. package/force-app/main/default/lwc/quanticCaseClassification/e2e/quanticCaseClassification.e2e.ts +269 -0
  14. package/force-app/main/default/lwc/quanticCategoryFacet/__tests__/quanticCategoryFacet.test.js +1183 -0
  15. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/data.ts +27 -0
  16. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/fixture.ts +75 -0
  17. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/pageObject.ts +55 -0
  18. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/quanticCategoryFacet.e2e.ts +199 -0
  19. package/force-app/main/default/lwc/quanticCitation/__tests__/quanticCitation.test.js +371 -0
  20. package/force-app/main/default/lwc/quanticColoredResultBadge/__tests__/quanticColoredResultBadge.test.js +212 -0
  21. package/force-app/main/default/lwc/quanticDateFacet/__tests__/quanticDateFacet.test.js +688 -0
  22. package/force-app/main/default/lwc/quanticDateFacet/e2e/data.ts +24 -0
  23. package/force-app/main/default/lwc/quanticDateFacet/e2e/fixture.ts +68 -0
  24. package/force-app/main/default/lwc/quanticDateFacet/e2e/pageObject.ts +27 -0
  25. package/force-app/main/default/lwc/quanticDateFacet/e2e/quanticDateFacet.e2e.ts +145 -0
  26. package/force-app/main/default/lwc/quanticDidYouMean/__tests__/quanticDidYouMean.test.js +348 -0
  27. package/force-app/main/default/lwc/quanticDidYouMean/e2e/data.ts +48 -0
  28. package/force-app/main/default/lwc/quanticDidYouMean/e2e/fixture.ts +80 -0
  29. package/force-app/main/default/lwc/quanticDidYouMean/e2e/pageObject.ts +173 -0
  30. package/force-app/main/default/lwc/quanticDidYouMean/e2e/quanticDidYouMean.e2e.ts +219 -0
  31. package/force-app/main/default/lwc/quanticDocumentSuggestion/__tests__/quanticDocumentSuggestion.test.js +404 -0
  32. package/force-app/main/default/lwc/quanticDocumentSuggestion/e2e/fixture.ts +38 -0
  33. package/force-app/main/default/lwc/quanticDocumentSuggestion/e2e/pageObject.ts +52 -0
  34. package/force-app/main/default/lwc/quanticDocumentSuggestion/e2e/quanticDocumentSuggestion.e2e.ts +102 -0
  35. package/force-app/main/default/lwc/quanticFacet/__tests__/quanticFacet.test.js +1105 -0
  36. package/force-app/main/default/lwc/quanticFacet/e2e/data.ts +21 -0
  37. package/force-app/main/default/lwc/quanticFacet/e2e/fixture.ts +73 -0
  38. package/force-app/main/default/lwc/quanticFacet/e2e/pageObject.ts +67 -0
  39. package/force-app/main/default/lwc/quanticFacet/e2e/quanticFacet.e2e.ts +208 -0
  40. package/force-app/main/default/lwc/quanticFacetCaption/__tests__/quanticFacetCaption.test.js +28 -0
  41. package/force-app/main/default/lwc/quanticFacetManager/__tests__/quanticFacetManager.test.js +178 -0
  42. package/force-app/main/default/lwc/quanticFacetManager/e2e/fixture.ts +64 -0
  43. package/force-app/main/default/lwc/quanticFacetManager/e2e/pageObject.ts +23 -0
  44. package/force-app/main/default/lwc/quanticFacetManager/e2e/quanticFacetManager.e2e.ts +82 -0
  45. package/force-app/main/default/lwc/quanticFeedback/__tests__/quanticFeedback.test.js +392 -0
  46. package/force-app/main/default/lwc/quanticFeedbackModal/__tests__/quanticFeedbackModal.test.js +448 -0
  47. package/force-app/main/default/lwc/quanticFeedbackModalQna/__tests__/quanticFeedbackModalQna.test.js +298 -0
  48. package/force-app/main/default/lwc/quanticFoldedResultList/__tests__/quanticFoldedResultList.test.js +323 -0
  49. package/force-app/main/default/lwc/quanticFoldedResultList/e2e/fixture.ts +70 -0
  50. package/force-app/main/default/lwc/quanticFoldedResultList/e2e/pageObject.ts +81 -0
  51. package/force-app/main/default/lwc/quanticFoldedResultList/e2e/quanticFoldedResultList.e2e.ts +69 -0
  52. package/force-app/main/default/lwc/quanticGeneratedAnswer/__tests__/quanticGeneratedAnswer.test.js +1158 -0
  53. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/data.ts +56 -0
  54. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/fixture.ts +185 -0
  55. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/pageObject.ts +451 -0
  56. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/quanticGeneratedAnswer.e2e.ts +337 -0
  57. package/force-app/main/default/lwc/quanticGeneratedAnswerContent/__tests__/quanticGeneratedAnswerContent.test.js +151 -0
  58. package/force-app/main/default/lwc/quanticHeading/__tests__/quanticHeading.test.js +71 -0
  59. package/force-app/main/default/lwc/quanticHeadlessLoader/__tests__/quanticHeadlessLoader.test.js +651 -0
  60. package/force-app/main/default/lwc/quanticInsightInterface/__tests__/quanticInsightInterface.test.js +194 -0
  61. package/force-app/main/default/lwc/quanticInsightInterface/quanticInsightInterface.js +1 -1
  62. package/force-app/main/default/lwc/quanticInsightSummary/__tests__/quanticInsightSummary.test.js +230 -0
  63. package/force-app/main/default/lwc/quanticModal/__tests__/quanticModal.test.js +205 -0
  64. package/force-app/main/default/lwc/quanticNotifications/__tests__/quanticNotifications.test.js +309 -0
  65. package/force-app/main/default/lwc/quanticNotifications/e2e/fixture.ts +58 -0
  66. package/force-app/main/default/lwc/quanticNotifications/e2e/pageObject.ts +55 -0
  67. package/force-app/main/default/lwc/quanticNotifications/e2e/quanticNotifications.e2e.ts +47 -0
  68. package/force-app/main/default/lwc/quanticNumericFacet/__tests__/quanticNumericFacet.test.js +953 -0
  69. package/force-app/main/default/lwc/quanticNumericFacet/e2e/data.ts +28 -0
  70. package/force-app/main/default/lwc/quanticNumericFacet/e2e/fixture.ts +71 -0
  71. package/force-app/main/default/lwc/quanticNumericFacet/e2e/pageObject.ts +59 -0
  72. package/force-app/main/default/lwc/quanticNumericFacet/e2e/quanticNumericFacet.e2e.ts +164 -0
  73. package/force-app/main/default/lwc/quanticPager/__tests__/quanticPager.test.js +430 -0
  74. package/force-app/main/default/lwc/quanticPager/e2e/fixture.ts +65 -0
  75. package/force-app/main/default/lwc/quanticPager/e2e/pageObject.ts +69 -0
  76. package/force-app/main/default/lwc/quanticPager/e2e/quanticPager.e2e.ts +106 -0
  77. package/force-app/main/default/lwc/quanticPlaceholder/__tests__/quanticPlaceholder.test.js +47 -0
  78. package/force-app/main/default/lwc/quanticQuickviewContent/__tests__/data/defaultTestCase.json +13 -0
  79. package/force-app/main/default/lwc/quanticQuickviewContent/__tests__/data/youtubeTestCase.json +14 -0
  80. package/force-app/main/default/lwc/quanticQuickviewContent/__tests__/quanticQuickviewContent.test.js +82 -0
  81. package/force-app/main/default/lwc/quanticRadioButtonsGroup/__tests__/quanticRadioButtonsGroup.test.js +273 -0
  82. package/force-app/main/default/lwc/quanticRecentQueriesList/__tests__/quanticRecentQueriesList.test.js +448 -0
  83. package/force-app/main/default/lwc/quanticRecentQueriesList/e2e/fixture.ts +42 -0
  84. package/force-app/main/default/lwc/quanticRecentQueriesList/e2e/pageObject.ts +55 -0
  85. package/force-app/main/default/lwc/quanticRecentQueriesList/e2e/quanticRecentQueriesList.e2e.ts +93 -0
  86. package/force-app/main/default/lwc/quanticRecentResultsList/__tests__/quanticRecentResultsList.test.js +516 -0
  87. package/force-app/main/default/lwc/quanticRecentResultsList/e2e/fixture.ts +42 -0
  88. package/force-app/main/default/lwc/quanticRecentResultsList/e2e/pageObject.ts +61 -0
  89. package/force-app/main/default/lwc/quanticRecentResultsList/e2e/quanticRecentResultsList.e2e.ts +48 -0
  90. package/force-app/main/default/lwc/quanticRecommendationList/__tests__/quanticRecommendationList.test.js +491 -0
  91. package/force-app/main/default/lwc/quanticRecommendationList/e2e/fixture.ts +35 -0
  92. package/force-app/main/default/lwc/quanticRecommendationList/e2e/pageObject.ts +52 -0
  93. package/force-app/main/default/lwc/quanticRecommendationList/e2e/quanticRecommendationList.e2e.ts +53 -0
  94. package/force-app/main/default/lwc/quanticRefineModalContent/__tests__/quanticRefineModalContent.test.js +747 -0
  95. package/force-app/main/default/lwc/quanticRefineToggle/__tests__/quanticRefineToggle.test.js +542 -0
  96. package/force-app/main/default/lwc/quanticResultAction/__tests__/quanticResultAction.test.js +262 -0
  97. package/force-app/main/default/lwc/quanticResultActionBar/__tests__/quanticResultActionBar.test.js +141 -0
  98. package/force-app/main/default/lwc/quanticResultChildren/__tests__/quanticResultChildren.test.js +340 -0
  99. package/force-app/main/default/lwc/quanticResultCopyToClipboard/__tests__/quanticResultCopyToClipboard.test.js +300 -0
  100. package/force-app/main/default/lwc/quanticResultCopyToClipboard/e2e/fixture.ts +46 -0
  101. package/force-app/main/default/lwc/quanticResultCopyToClipboard/e2e/pageObject.ts +49 -0
  102. package/force-app/main/default/lwc/quanticResultCopyToClipboard/e2e/quanticResultCopyToClipboard.e2e.ts +40 -0
  103. package/force-app/main/default/lwc/quanticResultDate/__tests__/quanticResultDate.test.js +144 -0
  104. package/force-app/main/default/lwc/quanticResultField/__tests__/quanticResultField.test.js +120 -0
  105. package/force-app/main/default/lwc/quanticResultHighlightedTextField/__tests__/quanticResultHighlightedTextField.test.js +209 -0
  106. package/force-app/main/default/lwc/quanticResultLink/__tests__/quanticResultLink.test.js +261 -0
  107. package/force-app/main/default/lwc/quanticResultList/__tests__/quanticResultList.test.js +342 -0
  108. package/force-app/main/default/lwc/quanticResultList/e2e/fixture.ts +66 -0
  109. package/force-app/main/default/lwc/quanticResultList/e2e/pageObject.ts +81 -0
  110. package/force-app/main/default/lwc/quanticResultList/e2e/quanticResultList.e2e.ts +69 -0
  111. package/force-app/main/default/lwc/quanticResultMultiValueText/__tests__/quanticResultMultiValueText.test.js +235 -0
  112. package/force-app/main/default/lwc/quanticResultNumber/__tests__/quanticResultNumber.test.js +144 -0
  113. package/force-app/main/default/lwc/quanticResultPrintableUri/__tests__/quanticResultPrintableUri.test.js +324 -0
  114. package/force-app/main/default/lwc/quanticResultQuickview/__tests__/quanticResultQuickview.test.js +301 -0
  115. package/force-app/main/default/lwc/quanticResultQuickview/e2e/fixture.ts +81 -0
  116. package/force-app/main/default/lwc/quanticResultQuickview/e2e/pageObject.ts +38 -0
  117. package/force-app/main/default/lwc/quanticResultQuickview/e2e/quanticResultQuickView.e2e.ts +66 -0
  118. package/force-app/main/default/lwc/quanticResultTemplate/__tests__/quanticResultTemplate.test.js +90 -0
  119. package/force-app/main/default/lwc/quanticResultText/__tests__/quanticResultText.test.js +155 -0
  120. package/force-app/main/default/lwc/quanticResultsPerPage/__tests__/quanticResultsPerPage.test.js +464 -0
  121. package/force-app/main/default/lwc/quanticResultsPerPage/e2e/fixture.ts +74 -0
  122. package/force-app/main/default/lwc/quanticResultsPerPage/e2e/pageObject.ts +85 -0
  123. package/force-app/main/default/lwc/quanticResultsPerPage/e2e/quanticResultsPerPage.e2e.ts +97 -0
  124. package/force-app/main/default/lwc/quanticSearchBox/__tests__/quanticSearchBox.test.js +487 -0
  125. package/force-app/main/default/lwc/quanticSearchBox/e2e/fixture.ts +84 -0
  126. package/force-app/main/default/lwc/quanticSearchBox/e2e/pageObject.ts +45 -0
  127. package/force-app/main/default/lwc/quanticSearchBox/e2e/quanticSearchBox.e2e.ts +159 -0
  128. package/force-app/main/default/lwc/quanticSearchBoxInput/__tests__/quanticSearchBoxInput.test.js +743 -0
  129. package/force-app/main/default/lwc/quanticSearchBoxSuggestionsList/__tests__/quanticSearchBoxSuggestionsList.test.js +571 -0
  130. package/force-app/main/default/lwc/quanticSearchBoxSuggestionsList/e2e/fixture.ts +110 -0
  131. package/force-app/main/default/lwc/quanticSearchBoxSuggestionsList/e2e/pageObject.ts +113 -0
  132. package/force-app/main/default/lwc/quanticSearchBoxSuggestionsList/e2e/quanticSearchBoxSuggestionsList.e2e.ts +299 -0
  133. package/force-app/main/default/lwc/quanticSmartSnippet/__tests__/quanticSmartSnippet.test.js +341 -0
  134. package/force-app/main/default/lwc/quanticSmartSnippet/e2e/data.ts +21 -0
  135. package/force-app/main/default/lwc/quanticSmartSnippet/e2e/fixture.ts +91 -0
  136. package/force-app/main/default/lwc/quanticSmartSnippet/e2e/pageObject.ts +196 -0
  137. package/force-app/main/default/lwc/quanticSmartSnippet/e2e/quanticSmartSnippet.e2e.ts +192 -0
  138. package/force-app/main/default/lwc/quanticSmartSnippetAnswer/__tests__/quanticSmartSnippetAnswer.test.js +126 -0
  139. package/force-app/main/default/lwc/quanticSmartSnippetSource/__tests__/quanticSmartSnippetSource.test.js +290 -0
  140. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/__tests__/quanticSmartSnippetSuggestions.test.js +329 -0
  141. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/e2e/data.ts +31 -0
  142. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/e2e/fixture.ts +93 -0
  143. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/e2e/pageObject.ts +160 -0
  144. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/e2e/quanticSmartSnippetSuggestions.e2e.ts +127 -0
  145. package/force-app/main/default/lwc/quanticSort/__tests__/quanticSort.test.js +416 -0
  146. package/force-app/main/default/lwc/quanticSort/e2e/fixture.ts +61 -0
  147. package/force-app/main/default/lwc/quanticSort/e2e/pageObject.ts +89 -0
  148. package/force-app/main/default/lwc/quanticSort/e2e/quanticSort.e2e.ts +91 -0
  149. package/force-app/main/default/lwc/quanticSourceCitations/__tests__/quanticSourceCitations.test.js +136 -0
  150. package/force-app/main/default/lwc/quanticStandaloneSearchBox/__tests__/quanticStandaloneSearchBox.test.js +387 -0
  151. package/force-app/main/default/lwc/quanticStandaloneSearchBox/e2e/fixture.ts +53 -0
  152. package/force-app/main/default/lwc/quanticStandaloneSearchBox/e2e/pageObject.ts +54 -0
  153. package/force-app/main/default/lwc/quanticStandaloneSearchBox/e2e/quanticStandaloneSearchBox.e2e.ts +72 -0
  154. package/force-app/main/default/lwc/quanticStatefulButton/__tests__/quanticStatefulButton.test.js +222 -0
  155. package/force-app/main/default/lwc/quanticSummary/__tests__/quanticSummary.test.js +244 -0
  156. package/force-app/main/default/lwc/quanticTab/__tests__/quanticTab.test.js +333 -0
  157. package/force-app/main/default/lwc/quanticTab/e2e/fixture.ts +56 -0
  158. package/force-app/main/default/lwc/quanticTab/e2e/pageObject.ts +68 -0
  159. package/force-app/main/default/lwc/quanticTab/e2e/quanticTab.e2e.ts +72 -0
  160. package/force-app/main/default/lwc/quanticTabBar/__tests__/quanticTabBar.test.js +331 -0
  161. package/force-app/main/default/lwc/quanticTabBar/e2e/fixture.ts +61 -0
  162. package/force-app/main/default/lwc/quanticTabBar/e2e/pageObject.ts +80 -0
  163. package/force-app/main/default/lwc/quanticTabBar/e2e/quanticTabBar.e2e.ts +171 -0
  164. package/force-app/main/default/lwc/quanticTimeframeFacet/__tests__/quanticTimeframeFacet.test.js +1037 -0
  165. package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/fixture.ts +58 -0
  166. package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/pageObject.ts +43 -0
  167. package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/quanticTimeframeFacet.e2e.ts +160 -0
  168. package/force-app/main/default/lwc/quanticTooltip/__tests__/quanticTooltip.test.js +107 -0
  169. package/force-app/main/default/lwc/quanticUserAction/__tests__/quanticUserAction.test.js +427 -0
  170. package/force-app/main/default/lwc/quanticUserActionsSession/__tests__/quanticUserActionsSession.test.js +269 -0
  171. package/force-app/main/default/lwc/quanticUserActionsTimeline/__tests__/data/userActionsState.json +89 -0
  172. package/force-app/main/default/lwc/quanticUserActionsTimeline/__tests__/quanticUserActionsTimeline.test.js +511 -0
  173. package/force-app/main/default/lwc/quanticUserActionsToggle/__tests__/quanticUserActionsToggle.test.js +229 -0
  174. package/force-app/main/default/lwc/quanticUserActionsToggle/e2e/data.ts +32 -0
  175. package/force-app/main/default/lwc/quanticUserActionsToggle/e2e/fixture.ts +32 -0
  176. package/force-app/main/default/lwc/quanticUserActionsToggle/e2e/pageObject.ts +71 -0
  177. package/force-app/main/default/lwc/quanticUserActionsToggle/e2e/quanticUserActionsToggle.e2e.ts +39 -0
  178. package/force-app/main/default/lwc/quanticUtils/__tests__/citationAnchoringUtils.test.js +84 -0
  179. package/force-app/main/default/lwc/quanticUtils/__tests__/facetDependenciesUtils.test.js +92 -0
  180. package/force-app/main/default/lwc/quanticUtils/__tests__/markdownUtils.test.js +71 -0
  181. package/force-app/main/default/lwc/quanticUtils/__tests__/quanticUtils.test.js +223 -0
  182. package/force-app/main/default/lwc/quanticUtils/recentQueriesUtils.js +20 -12
  183. package/force-app/main/default/lwc/quanticViewedByCustomerBadge/__tests__/quanticViewedByCustomerBadge.test.js +131 -0
  184. package/force-app/main/default/staticresources/coveoheadless/case-assist/headless.js +3 -3
  185. package/force-app/main/default/staticresources/coveoheadless/definitions/app/case-assist-engine/case-assist-engine.d.ts +3 -3
  186. package/force-app/main/default/staticresources/coveoheadless/definitions/app/commerce-engine/commerce-engine.d.ts +16 -16
  187. package/force-app/main/default/staticresources/coveoheadless/definitions/app/common-reducers.d.ts +1 -1
  188. package/force-app/main/default/staticresources/coveoheadless/definitions/app/insight-engine/insight-engine.d.ts +5 -5
  189. package/force-app/main/default/staticresources/coveoheadless/definitions/app/recommendation-engine/recommendation-engine.d.ts +4 -4
  190. package/force-app/main/default/staticresources/coveoheadless/definitions/app/search-engine/search-engine.d.ts +4 -4
  191. package/force-app/main/default/staticresources/coveoheadless/definitions/app/store.d.ts +2 -2
  192. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/commerce/core/facets/headless-core-commerce-facet.d.ts +1 -1
  193. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/facets/range-facet/headless-core-range-facet.d.ts +1 -1
  194. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/core/recent-queries-list/headless-core-recent-queries-list.d.ts +91 -0
  195. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/insight/attach-to-case/headless-attach-to-case.d.ts +2 -0
  196. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/insight/attached-results/headless-attached-results.d.ts +68 -0
  197. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/insight/recent-queries-list/headless-insight-recent-queries-list.d.ts +14 -0
  198. package/force-app/main/default/staticresources/coveoheadless/definitions/controllers/recent-queries-list/headless-recent-queries-list.d.ts +2 -79
  199. package/force-app/main/default/staticresources/coveoheadless/definitions/features/actions-history/ipx-actions-history-actions.d.ts +1 -1
  200. package/force-app/main/default/staticresources/coveoheadless/definitions/features/advanced-search-queries/advanced-search-queries-slice.d.ts +1 -1
  201. package/force-app/main/default/staticresources/coveoheadless/definitions/features/analytics/search-action-cause.d.ts +9 -1
  202. package/force-app/main/default/staticresources/coveoheadless/definitions/features/attached-results/attached-results-slice.d.ts +1 -1
  203. package/force-app/main/default/staticresources/coveoheadless/definitions/features/attached-results/attached-results-state.d.ts +1 -0
  204. package/force-app/main/default/staticresources/coveoheadless/definitions/features/case-assist-configuration/case-assist-configuration-slice.d.ts +1 -1
  205. package/force-app/main/default/staticresources/coveoheadless/definitions/features/case-context/case-context-slice.d.ts +1 -1
  206. package/force-app/main/default/staticresources/coveoheadless/definitions/features/case-field/case-field-actions.d.ts +1 -1
  207. package/force-app/main/default/staticresources/coveoheadless/definitions/features/case-field/case-field-slice.d.ts +1 -1
  208. package/force-app/main/default/staticresources/coveoheadless/definitions/features/case-input/case-input-slice.d.ts +1 -1
  209. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/configuration/configuration-slice.d.ts +1 -1
  210. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/context/cart/cart-actions.d.ts +2 -2
  211. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/context/cart/cart-slice.d.ts +1 -1
  212. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/context/context-slice.d.ts +1 -1
  213. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/did-you-mean/did-you-mean-slice.d.ts +1 -1
  214. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/facets/facet-search-set/commerce-facet-search-actions.d.ts +2 -2
  215. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/facets/facet-set/facet-set-slice.d.ts +1 -1
  216. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/facets/field-suggestions-order/field-suggestions-order-slice.d.ts +1 -1
  217. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/facets/numeric-facet/manual-numeric-facet-slice.d.ts +1 -1
  218. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/instant-products/instant-products-slice.d.ts +1 -1
  219. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/pagination/pagination-slice.d.ts +1 -1
  220. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/parameters/parameters-slice.d.ts +1 -1
  221. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/product/product-actions.d.ts +2 -2
  222. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/product-listing/product-listing-actions.d.ts +2 -2
  223. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/product-listing/product-listing-slice.d.ts +1 -1
  224. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/query/query-slice.d.ts +1 -1
  225. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/query-suggest/query-suggest-actions.d.ts +1 -1
  226. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/recent-queries/recent-queries-slice.d.ts +1 -1
  227. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/recommendations/recommendations-actions.d.ts +2 -2
  228. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/recommendations/recommendations-slice.d.ts +1 -1
  229. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/search/search-actions.d.ts +4 -4
  230. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/search/search-slice.d.ts +1 -1
  231. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/sort/sort-slice.d.ts +1 -1
  232. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/standalone-search-box-set/standalone-search-box-set-actions.d.ts +1 -1
  233. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/standalone-search-box-set/standalone-search-box-set-slice.d.ts +1 -1
  234. package/force-app/main/default/staticresources/coveoheadless/definitions/features/commerce/triggers/triggers-slice.d.ts +1 -1
  235. package/force-app/main/default/staticresources/coveoheadless/definitions/features/configuration/configuration-slice.d.ts +1 -1
  236. package/force-app/main/default/staticresources/coveoheadless/definitions/features/context/context-slice.d.ts +1 -1
  237. package/force-app/main/default/staticresources/coveoheadless/definitions/features/debug/debug-slice.d.ts +1 -1
  238. package/force-app/main/default/staticresources/coveoheadless/definitions/features/debug/version-slice.d.ts +1 -1
  239. package/force-app/main/default/staticresources/coveoheadless/definitions/features/dictionary-field-context/dictionary-field-context-slice.d.ts +1 -1
  240. package/force-app/main/default/staticresources/coveoheadless/definitions/features/did-you-mean/did-you-mean-slice.d.ts +1 -1
  241. package/force-app/main/default/staticresources/coveoheadless/definitions/features/document-suggestion/document-suggestion-actions.d.ts +1 -1
  242. package/force-app/main/default/staticresources/coveoheadless/definitions/features/document-suggestion/document-suggestion-slice.d.ts +1 -1
  243. package/force-app/main/default/staticresources/coveoheadless/definitions/features/excerpt-length/excerpt-length-slice.d.ts +1 -1
  244. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facet-options/facet-options-slice.d.ts +1 -1
  245. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/automatic-facet-set/automatic-facet-set-slice.d.ts +1 -1
  246. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/category-facet-set/category-facet-set-slice.d.ts +1 -1
  247. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/facet-order/facet-order-slice.d.ts +1 -1
  248. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/facet-search-set/category/category-facet-search-set-slice.d.ts +1 -1
  249. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/facet-search-set/generic/generic-facet-search-actions.d.ts +2 -2
  250. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/facet-search-set/specific/specific-facet-search-set-slice.d.ts +1 -1
  251. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/facet-set/facet-set-controller-actions.d.ts +2 -2
  252. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/facet-set/facet-set-slice.d.ts +1 -1
  253. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/range-facets/date-facet-set/date-facet-controller-actions.d.ts +2 -2
  254. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/range-facets/date-facet-set/date-facet-set-slice.d.ts +1 -1
  255. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/range-facets/numeric-facet-set/numeric-facet-controller-actions.d.ts +2 -2
  256. package/force-app/main/default/staticresources/coveoheadless/definitions/features/facets/range-facets/numeric-facet-set/numeric-facet-set-slice.d.ts +1 -1
  257. package/force-app/main/default/staticresources/coveoheadless/definitions/features/fields/fields-actions.d.ts +1 -1
  258. package/force-app/main/default/staticresources/coveoheadless/definitions/features/fields/fields-slice.d.ts +1 -1
  259. package/force-app/main/default/staticresources/coveoheadless/definitions/features/folding/folding-actions.d.ts +1 -1
  260. package/force-app/main/default/staticresources/coveoheadless/definitions/features/folding/folding-slice.d.ts +1 -1
  261. package/force-app/main/default/staticresources/coveoheadless/definitions/features/folding/insight-folding-actions.d.ts +1 -1
  262. package/force-app/main/default/staticresources/coveoheadless/definitions/features/generated-answer/generated-answer-actions.d.ts +2 -2
  263. package/force-app/main/default/staticresources/coveoheadless/definitions/features/generated-answer/generated-answer-slice.d.ts +1 -1
  264. package/force-app/main/default/staticresources/coveoheadless/definitions/features/history/history-actions.d.ts +3 -3
  265. package/force-app/main/default/staticresources/coveoheadless/definitions/features/history/history-slice.d.ts +2 -2
  266. package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-configuration/insight-configuration-slice.d.ts +1 -1
  267. package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-interface/insight-interface-actions.d.ts +1 -1
  268. package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-interface/insight-interface-slice.d.ts +1 -1
  269. package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-search/insight-search-actions.d.ts +5 -5
  270. package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-search/legacy/insight-search-actions.d.ts +4 -4
  271. package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-user-actions/insight-user-actions-actions.d.ts +1 -1
  272. package/force-app/main/default/staticresources/coveoheadless/definitions/features/insight-user-actions/insight-user-actions-slice.d.ts +1 -1
  273. package/force-app/main/default/staticresources/coveoheadless/definitions/features/instant-results/instant-results-slice.d.ts +1 -1
  274. package/force-app/main/default/staticresources/coveoheadless/definitions/features/pagination/pagination-slice.d.ts +1 -1
  275. package/force-app/main/default/staticresources/coveoheadless/definitions/features/pipeline/pipeline-slice.d.ts +1 -1
  276. package/force-app/main/default/staticresources/coveoheadless/definitions/features/query/query-slice.d.ts +1 -1
  277. package/force-app/main/default/staticresources/coveoheadless/definitions/features/query-set/query-set-slice.d.ts +1 -1
  278. package/force-app/main/default/staticresources/coveoheadless/definitions/features/query-suggest/query-suggest-actions.d.ts +1 -1
  279. package/force-app/main/default/staticresources/coveoheadless/definitions/features/query-suggest/query-suggest-slice.d.ts +1 -1
  280. package/force-app/main/default/staticresources/coveoheadless/definitions/features/question-answering/question-answering-slice.d.ts +1 -1
  281. package/force-app/main/default/staticresources/coveoheadless/definitions/features/recent-queries/recent-queries-insight-analytics-actions.d.ts +3 -0
  282. package/force-app/main/default/staticresources/coveoheadless/definitions/features/recent-queries/recent-queries-slice.d.ts +1 -1
  283. package/force-app/main/default/staticresources/coveoheadless/definitions/features/recent-results/recent-results-slice.d.ts +1 -1
  284. package/force-app/main/default/staticresources/coveoheadless/definitions/features/recommendation/recommendation-actions.d.ts +1 -1
  285. package/force-app/main/default/staticresources/coveoheadless/definitions/features/recommendation/recommendation-slice.d.ts +1 -1
  286. package/force-app/main/default/staticresources/coveoheadless/definitions/features/result-preview/result-preview-actions.d.ts +2 -2
  287. package/force-app/main/default/staticresources/coveoheadless/definitions/features/result-preview/result-preview-slice.d.ts +1 -1
  288. package/force-app/main/default/staticresources/coveoheadless/definitions/features/search/legacy/search-actions.d.ts +5 -5
  289. package/force-app/main/default/staticresources/coveoheadless/definitions/features/search/search-actions.d.ts +6 -6
  290. package/force-app/main/default/staticresources/coveoheadless/definitions/features/search/search-slice.d.ts +1 -1
  291. package/force-app/main/default/staticresources/coveoheadless/definitions/features/search-hub/search-hub-slice.d.ts +1 -1
  292. package/force-app/main/default/staticresources/coveoheadless/definitions/features/sort-criteria/sort-criteria-slice.d.ts +1 -1
  293. package/force-app/main/default/staticresources/coveoheadless/definitions/features/standalone-search-box-set/standalone-search-box-set-actions.d.ts +1 -1
  294. package/force-app/main/default/staticresources/coveoheadless/definitions/features/standalone-search-box-set/standalone-search-box-set-slice.d.ts +1 -1
  295. package/force-app/main/default/staticresources/coveoheadless/definitions/features/static-filter-set/static-filter-set-slice.d.ts +1 -1
  296. package/force-app/main/default/staticresources/coveoheadless/definitions/features/tab-set/tab-set-slice.d.ts +1 -1
  297. package/force-app/main/default/staticresources/coveoheadless/definitions/features/triggers/triggers-slice.d.ts +1 -1
  298. package/force-app/main/default/staticresources/coveoheadless/definitions/insight.index.d.ts +4 -0
  299. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr/commerce/factories/build-factory.d.ts +6 -1
  300. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr/commerce/types/fetch-static-state.d.ts +3 -0
  301. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr/commerce/types/from-build-result.d.ts +6 -0
  302. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr/commerce/types/hydrate-static-state.d.ts +3 -0
  303. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr/common/access-token-manager.d.ts +19 -0
  304. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr/common/augment-preprocess-request.d.ts +7 -2
  305. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr/common/types/fetch-static-state.d.ts +3 -0
  306. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr/common/types/hydrate-static-state.d.ts +3 -0
  307. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-next/commerce/types/engine.d.ts +4 -2
  308. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-next/common/access-token-manager.d.ts +19 -0
  309. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-next/common/augment-preprocess-request.d.ts +7 -2
  310. package/force-app/main/default/staticresources/coveoheadless/definitions/ssr-next/search/engine/search-engine.ssr.d.ts +2 -2
  311. package/force-app/main/default/staticresources/coveoheadless/definitions/state/insight-app-state.d.ts +2 -2
  312. package/force-app/main/default/staticresources/coveoheadless/definitions/test/mock-ssr-controller-definitions.d.ts +2 -2
  313. package/force-app/main/default/staticresources/coveoheadless/headless.js +10 -10
  314. package/force-app/main/default/staticresources/coveoheadless/insight/headless.js +9 -9
  315. package/force-app/main/default/staticresources/coveoheadless/recommendation/headless.js +3 -3
  316. package/package.json +46 -44
@@ -0,0 +1,516 @@
1
+ /* eslint-disable no-import-assign */
2
+ import QuanticRecentResultsList from 'c/quanticRecentResultsList';
3
+ import {cleanup, flushPromises, buildCreateTestComponent} from 'c/testUtils';
4
+ import * as mockHeadlessLoader from 'c/quanticHeadlessLoader';
5
+ import * as utils from 'c/quanticUtils';
6
+
7
+ const exampleEngine = {
8
+ id: 'exampleEngineId',
9
+ };
10
+ const localStorageKey = `${exampleEngine.id}_quantic-recent-results`;
11
+
12
+ jest.mock('c/quanticHeadlessLoader');
13
+ jest.mock(
14
+ '@salesforce/label/c.quantic_RecentResults',
15
+ () => ({default: 'Recent Results'}),
16
+ {
17
+ virtual: true,
18
+ }
19
+ );
20
+ jest.mock(
21
+ '@salesforce/label/c.quantic_Expand',
22
+ () => ({default: 'Expand Recent results'}),
23
+ {
24
+ virtual: true,
25
+ }
26
+ );
27
+ jest.mock(
28
+ '@salesforce/label/c.quantic_Collapse',
29
+ () => ({default: 'Collapse Recent results'}),
30
+ {
31
+ virtual: true,
32
+ }
33
+ );
34
+
35
+ const mockResults = [
36
+ {
37
+ title: 'Result 1',
38
+ clickUri: 'https://example.com/result1',
39
+ uri: 'https://example.com/result1',
40
+ excerpt: 'This is the first result.',
41
+ uniqueId: '1',
42
+ },
43
+ {
44
+ title: 'Result 2',
45
+ clickUri: 'https://example.com/result2',
46
+ uri: 'https://example.com/result2',
47
+ excerpt: 'This is the second result.',
48
+ uniqueId: '2',
49
+ },
50
+ ];
51
+
52
+ const defaultRecentResultsTitle = 'Recent Results';
53
+ const defaultResults = [];
54
+ const defaultMaxLength = 10;
55
+ let isInitialized = false;
56
+ let updateRecentResultsState;
57
+
58
+ const initialRecentResultsListState = {
59
+ results: defaultResults,
60
+ maxLength: defaultMaxLength,
61
+ };
62
+ let recentResultsListState = initialRecentResultsListState;
63
+
64
+ const functionMocks = {
65
+ buildRecentResultsList: jest.fn(() => ({
66
+ state: recentResultsListState,
67
+ subscribe: functionMocks.recentResultsListSubscriber,
68
+ clear: functionMocks.clear,
69
+ })),
70
+ recentResultsListSubscriber: jest.fn((callback) => {
71
+ updateRecentResultsState = async () => {
72
+ callback();
73
+ await flushPromises();
74
+ };
75
+ return () => {};
76
+ }),
77
+ clear: jest.fn(),
78
+ buildInteractiveRecentResult: jest.fn(),
79
+ };
80
+
81
+ const defaultOptions = {
82
+ engineId: exampleEngine.id,
83
+ maxLength: defaultMaxLength,
84
+ label: defaultRecentResultsTitle,
85
+ hideWhenEmpty: false,
86
+ target: '_self',
87
+ isCollapsed: false,
88
+ };
89
+
90
+ const selectors = {
91
+ initializationError: 'c-quantic-component-error',
92
+ placeholder: 'c-quantic-placeholder',
93
+ quanticCardContainer: 'c-quantic-card-container',
94
+ recentResultItem: '[data-testid="recent-result-item"]',
95
+ toggleButton: '[data-testid="action-button"]',
96
+ quanticRecentResultLink: 'c-quantic-recent-result-link',
97
+ };
98
+
99
+ const createTestComponent = buildCreateTestComponent(
100
+ QuanticRecentResultsList,
101
+ 'c-quantic-recent-results-list',
102
+ defaultOptions
103
+ );
104
+
105
+ function prepareHeadlessState() {
106
+ // @ts-ignore
107
+ mockHeadlessLoader.getHeadlessBundle = () => {
108
+ return {
109
+ buildRecentResultsList: functionMocks.buildRecentResultsList,
110
+ };
111
+ };
112
+ }
113
+
114
+ function mockSuccessfulHeadlessInitialization() {
115
+ // @ts-ignore
116
+ mockHeadlessLoader.initializeWithHeadless = (element, _, initialize) => {
117
+ if (element instanceof QuanticRecentResultsList && !isInitialized) {
118
+ isInitialized = true;
119
+ initialize(exampleEngine);
120
+ }
121
+ };
122
+ }
123
+
124
+ function mockErroneousHeadlessInitialization() {
125
+ // @ts-ignore
126
+ mockHeadlessLoader.initializeWithHeadless = (element) => {
127
+ if (element instanceof QuanticRecentResultsList) {
128
+ element.setInitializationError();
129
+ }
130
+ };
131
+ }
132
+
133
+ describe('c-quantic-recent-results-list', () => {
134
+ beforeEach(() => {
135
+ // @ts-ignore
136
+ global.CoveoHeadless = {
137
+ buildInteractiveRecentResult: functionMocks.buildInteractiveRecentResult,
138
+ };
139
+ });
140
+
141
+ afterEach(() => {
142
+ cleanup();
143
+ recentResultsListState = initialRecentResultsListState;
144
+ isInitialized = false;
145
+ });
146
+
147
+ describe('controller initialization', () => {
148
+ beforeEach(() => {
149
+ mockSuccessfulHeadlessInitialization();
150
+ prepareHeadlessState();
151
+ });
152
+
153
+ it('should display the placeholder component', async () => {
154
+ const element = createTestComponent();
155
+ await flushPromises();
156
+
157
+ const placeholder = element.shadowRoot.querySelector(
158
+ selectors.placeholder
159
+ );
160
+
161
+ expect(placeholder).not.toBeNull();
162
+ expect(
163
+ element.shadowRoot.querySelector(selectors.quanticCardContainer)
164
+ ).toBeNull();
165
+ });
166
+
167
+ it('should build the controller and subscribe to its state', async () => {
168
+ createTestComponent();
169
+ await flushPromises();
170
+
171
+ expect(functionMocks.buildRecentResultsList).toHaveBeenCalledTimes(1);
172
+ expect(functionMocks.buildRecentResultsList).toHaveBeenCalledWith(
173
+ exampleEngine,
174
+ {
175
+ initialState: {results: defaultResults},
176
+ options: expect.objectContaining({
177
+ maxLength: defaultMaxLength,
178
+ }),
179
+ }
180
+ );
181
+ expect(functionMocks.recentResultsListSubscriber).toHaveBeenCalledTimes(
182
+ 1
183
+ );
184
+ });
185
+ });
186
+
187
+ describe('when an initialization error occurs', () => {
188
+ beforeEach(() => {
189
+ mockErroneousHeadlessInitialization();
190
+ });
191
+
192
+ it('should display the error component', async () => {
193
+ const element = createTestComponent();
194
+ await flushPromises();
195
+
196
+ const initializationError = element.shadowRoot.querySelector(
197
+ selectors.initializationError
198
+ );
199
+
200
+ expect(initializationError).not.toBeNull();
201
+ });
202
+ });
203
+
204
+ describe('when the component is initialized', () => {
205
+ beforeEach(() => {
206
+ mockSuccessfulHeadlessInitialization();
207
+ prepareHeadlessState();
208
+ jest
209
+ .spyOn(mockHeadlessLoader, 'getHeadlessEnginePromise')
210
+ .mockImplementation(() => Promise.resolve(exampleEngine));
211
+ });
212
+
213
+ describe('when there are recent results', () => {
214
+ const exampleResults = mockResults;
215
+
216
+ beforeEach(() => {
217
+ recentResultsListState = {
218
+ ...recentResultsListState,
219
+ results: exampleResults,
220
+ };
221
+ });
222
+
223
+ it('should display the recent results list with the default options and no longer display the placeholder component', async () => {
224
+ recentResultsListState = {
225
+ results: exampleResults,
226
+ maxLength: defaultMaxLength,
227
+ };
228
+ const element = createTestComponent();
229
+ updateRecentResultsState();
230
+ await flushPromises();
231
+
232
+ const placeholder = element.shadowRoot.querySelector(
233
+ selectors.placeholder
234
+ );
235
+
236
+ expect(placeholder).toBeNull();
237
+
238
+ const recentResultsContainer = element.shadowRoot.querySelector(
239
+ selectors.quanticCardContainer
240
+ );
241
+ expect(recentResultsContainer).not.toBeNull();
242
+ expect(recentResultsContainer.title).toBe(defaultRecentResultsTitle);
243
+
244
+ const recentResultsListItems = element.shadowRoot.querySelectorAll(
245
+ selectors.recentResultItem
246
+ );
247
+
248
+ expect(recentResultsListItems.length).toBe(exampleResults.length);
249
+ recentResultsListItems.forEach((item, index) => {
250
+ const resultLink = item.querySelector(
251
+ selectors.quanticRecentResultLink
252
+ );
253
+ expect(resultLink.result).toEqual(mockResults[index]);
254
+ });
255
+ });
256
+
257
+ it('should use the correct initial state retrieved from the localstorage', async () => {
258
+ const getItemFromLocalStorageSpy = jest
259
+ .spyOn(utils, 'getItemFromLocalStorage')
260
+ .mockReturnValue(exampleResults);
261
+ createTestComponent();
262
+ await flushPromises();
263
+
264
+ expect(functionMocks.buildRecentResultsList).toHaveBeenCalledTimes(1);
265
+ expect(functionMocks.buildRecentResultsList).toHaveBeenCalledWith(
266
+ exampleEngine,
267
+ {
268
+ initialState: {results: exampleResults},
269
+ options: {maxLength: defaultMaxLength},
270
+ }
271
+ );
272
+
273
+ expect(getItemFromLocalStorageSpy).toHaveBeenCalledTimes(1);
274
+ expect(getItemFromLocalStorageSpy).toHaveBeenCalledWith(
275
+ localStorageKey
276
+ );
277
+ });
278
+
279
+ it('should call #setItemInLocalStorage function with the proper parameters when the recent result change in the state', async () => {
280
+ const setItemInLocalStorageSpy = jest.spyOn(
281
+ utils,
282
+ 'setItemInLocalStorage'
283
+ );
284
+ createTestComponent();
285
+ recentResultsListState.results = exampleResults;
286
+ updateRecentResultsState();
287
+ await flushPromises();
288
+
289
+ expect(setItemInLocalStorageSpy).toHaveBeenCalledWith(
290
+ localStorageKey,
291
+ exampleResults
292
+ );
293
+ expect(setItemInLocalStorageSpy).toHaveBeenCalledTimes(1);
294
+ });
295
+ });
296
+
297
+ describe('with a custom #maxLength value', () => {
298
+ it('should set the #maxLength value in the controller', async () => {
299
+ const exampleResults = mockResults;
300
+ const customMaxLength = 5;
301
+ createTestComponent({...defaultOptions, maxLength: customMaxLength});
302
+ updateRecentResultsState();
303
+ await flushPromises();
304
+
305
+ expect(functionMocks.buildRecentResultsList).toHaveBeenCalledTimes(1);
306
+ expect(functionMocks.buildRecentResultsList).toHaveBeenCalledWith(
307
+ exampleEngine,
308
+ {
309
+ initialState: {results: exampleResults},
310
+ options: {maxLength: customMaxLength},
311
+ }
312
+ );
313
+ });
314
+
315
+ it('should not render more results than the #maxLength value', async () => {
316
+ const customMaxLength = 1;
317
+ // The component does not manage the length of the results list, the reducer does. So we need to set the state directly.
318
+ recentResultsListState = {
319
+ ...recentResultsListState,
320
+ results: mockResults.slice(0, customMaxLength),
321
+ };
322
+ const element = createTestComponent({
323
+ ...defaultOptions,
324
+ maxLength: customMaxLength,
325
+ });
326
+ updateRecentResultsState();
327
+ await flushPromises();
328
+
329
+ const recentResultsListItems = element.shadowRoot.querySelectorAll(
330
+ selectors.recentResultItem
331
+ );
332
+
333
+ expect(recentResultsListItems.length).toBe(customMaxLength);
334
+ recentResultsListItems.forEach((item, index) => {
335
+ const resultLink = item.querySelector(
336
+ selectors.quanticRecentResultLink
337
+ );
338
+ expect(resultLink.result).toEqual(mockResults[index]);
339
+ });
340
+ });
341
+ });
342
+
343
+ describe('with a custom #label value', () => {
344
+ it('should display the custom label in the title of the component', async () => {
345
+ const customLabel = 'My Custom Label';
346
+ const element = createTestComponent({
347
+ ...defaultOptions,
348
+ label: customLabel,
349
+ });
350
+ updateRecentResultsState();
351
+ await flushPromises();
352
+
353
+ const recentResultsContainer = element.shadowRoot.querySelector(
354
+ selectors.quanticCardContainer
355
+ );
356
+ expect(recentResultsContainer).not.toBeNull();
357
+ expect(recentResultsContainer.title).toBe(customLabel);
358
+ });
359
+ });
360
+
361
+ describe('the #hideWhenEmpty property', () => {
362
+ describe('when there are recent results', () => {
363
+ it('should display the recent results card when set to true', async () => {
364
+ recentResultsListState = {
365
+ ...recentResultsListState,
366
+ results: mockResults,
367
+ };
368
+ const element = createTestComponent({
369
+ ...defaultOptions,
370
+ hideWhenEmpty: true,
371
+ });
372
+ updateRecentResultsState();
373
+ await flushPromises();
374
+
375
+ const recentResultsContainer = element.shadowRoot.querySelector(
376
+ selectors.quanticCardContainer
377
+ );
378
+ expect(recentResultsContainer).not.toBeNull();
379
+ });
380
+ });
381
+
382
+ describe('when there are no recent results', () => {
383
+ beforeEach(() => {
384
+ recentResultsListState = {
385
+ ...recentResultsListState,
386
+ results: [],
387
+ };
388
+ });
389
+ it('should display an empty list when it is set to false', async () => {
390
+ const element = createTestComponent({
391
+ ...defaultOptions,
392
+ hideWhenEmpty: false,
393
+ });
394
+ updateRecentResultsState();
395
+ await flushPromises();
396
+
397
+ const recentResultsContainer = element.shadowRoot.querySelector(
398
+ selectors.quanticCardContainer
399
+ );
400
+ expect(recentResultsContainer).not.toBeNull();
401
+ expect(recentResultsContainer.title).toBe(defaultRecentResultsTitle);
402
+
403
+ const recentResultsListItems = element.shadowRoot.querySelectorAll(
404
+ selectors.recentResultItem
405
+ );
406
+ expect(recentResultsListItems.length).toBe(0);
407
+ });
408
+
409
+ it('should not display a recent results card when it is set to true', async () => {
410
+ const element = createTestComponent({
411
+ ...defaultOptions,
412
+ hideWhenEmpty: true,
413
+ });
414
+ await flushPromises();
415
+
416
+ const recentResultsContainer = element.shadowRoot.querySelector(
417
+ selectors.quanticCardContainer
418
+ );
419
+ expect(recentResultsContainer).toBeNull();
420
+ });
421
+ });
422
+ });
423
+
424
+ describe('with a custom #target value', () => {
425
+ it('should pass the target property to the result link component', async () => {
426
+ const customTarget = '_blank';
427
+ const exampleResults = mockResults;
428
+ recentResultsListState = {
429
+ ...recentResultsListState,
430
+ results: exampleResults,
431
+ };
432
+ const element = createTestComponent({
433
+ ...defaultOptions,
434
+ target: customTarget,
435
+ });
436
+ await flushPromises();
437
+
438
+ const recentResultLinks = element.shadowRoot.querySelectorAll(
439
+ selectors.recentResultItem
440
+ );
441
+
442
+ recentResultLinks.forEach((link) => {
443
+ expect(link.getAttribute('target')).toBe(customTarget);
444
+ });
445
+ });
446
+ });
447
+
448
+ describe('when the #isCollapsed property is false', () => {
449
+ it('should display the card title, the collapse button icon and the recent results list', async () => {
450
+ const collapseRecentResultsLabel = 'Collapse Recent results';
451
+ const collapseRecentResultsIcon = 'utility:dash';
452
+ const element = createTestComponent({
453
+ ...defaultOptions,
454
+ isCollapsed: false,
455
+ });
456
+ updateRecentResultsState();
457
+ await flushPromises();
458
+
459
+ const recentResultsContainer = element.shadowRoot.querySelector(
460
+ selectors.quanticCardContainer
461
+ );
462
+ expect(recentResultsContainer).not.toBeNull();
463
+ expect(recentResultsContainer.title).toBe(defaultRecentResultsTitle);
464
+
465
+ const toggleButton = element.shadowRoot.querySelector(
466
+ selectors.toggleButton
467
+ );
468
+
469
+ expect(toggleButton).not.toBeNull();
470
+ expect(toggleButton.alternativeText).toBe(collapseRecentResultsLabel);
471
+ expect(toggleButton.iconName).toBe(collapseRecentResultsIcon);
472
+
473
+ const recentResultsListItems = element.shadowRoot.querySelectorAll(
474
+ selectors.recentResultItem
475
+ );
476
+
477
+ expect(recentResultsListItems.length).toBe(
478
+ recentResultsListState.results.length
479
+ );
480
+ });
481
+ });
482
+
483
+ describe('when the #isCollapsed property is true', () => {
484
+ it('should display the card title and the expand button icon but not the recent results list', async () => {
485
+ const expandRecentResultsLabel = 'Expand Recent results';
486
+ const expandRecentResultsIcon = 'utility:add';
487
+ const element = createTestComponent({
488
+ ...defaultOptions,
489
+ isCollapsed: true,
490
+ });
491
+ updateRecentResultsState();
492
+ await flushPromises();
493
+
494
+ const recentResultsContainer = element.shadowRoot.querySelector(
495
+ selectors.quanticCardContainer
496
+ );
497
+ expect(recentResultsContainer).not.toBeNull();
498
+ expect(recentResultsContainer.title).toBe(defaultRecentResultsTitle);
499
+
500
+ const toggleButton = element.shadowRoot.querySelector(
501
+ selectors.toggleButton
502
+ );
503
+
504
+ expect(toggleButton).not.toBeNull();
505
+ expect(toggleButton.alternativeText).toBe(expandRecentResultsLabel);
506
+ expect(toggleButton.iconName).toBe(expandRecentResultsIcon);
507
+
508
+ const recentResultsListItems = element.shadowRoot.querySelectorAll(
509
+ selectors.recentQueryItem
510
+ );
511
+ expect(recentResultsListItems[0]).toBeFalsy();
512
+ expect(recentResultsListItems.length).toBe(0);
513
+ });
514
+ });
515
+ });
516
+ });
@@ -0,0 +1,42 @@
1
+ import {RecentResultsListObject} from './pageObject';
2
+ import {quanticBase} from '../../../../../../playwright/fixtures/baseFixture';
3
+ import {SearchObject} from '../../../../../../playwright/page-object/searchObject';
4
+ import {searchRequestRegex} from '../../../../../../playwright/utils/requests';
5
+ import {AnalyticsModeEnum} from '../../../../../../playwright/utils/analyticsMode';
6
+
7
+ const pageUrl = 's/quantic-recent-results-list';
8
+
9
+ interface RecentResultsListOptions {
10
+ engineId: string;
11
+ }
12
+
13
+ type QuanticRecentResultsListE2ESearchFixtures = {
14
+ recentResultList: RecentResultsListObject;
15
+ search: SearchObject;
16
+ options: Partial<RecentResultsListOptions>;
17
+ urlHash: string;
18
+ };
19
+
20
+ export const testSearch =
21
+ quanticBase.extend<QuanticRecentResultsListE2ESearchFixtures>({
22
+ options: {},
23
+ pageUrl: pageUrl,
24
+ urlHash: '',
25
+ analyticsMode: AnalyticsModeEnum.legacy,
26
+ search: async ({page}, use) => {
27
+ await use(new SearchObject(page, searchRequestRegex));
28
+ },
29
+ recentResultList: async (
30
+ {page, options, configuration, search, urlHash, analytics},
31
+ use
32
+ ) => {
33
+ await page.goto(urlHash ? `${pageUrl}#${urlHash}` : pageUrl);
34
+ const searchResponsePromise = search.waitForSearchResponse();
35
+ await configuration.configure(options);
36
+ await searchResponsePromise;
37
+
38
+ await use(new RecentResultsListObject(page, analytics));
39
+ },
40
+ });
41
+
42
+ export {expect} from '@playwright/test';
@@ -0,0 +1,61 @@
1
+ import type {Locator, Page, Request} from '@playwright/test';
2
+ import {
3
+ AnalyticsMode,
4
+ AnalyticsModeEnum,
5
+ } from '../../../../../../playwright/utils/analyticsMode';
6
+ import {AnalyticsObject} from '../../../../../../playwright/page-object/analytics';
7
+
8
+ export class RecentResultsListObject {
9
+ private analyticsMode: AnalyticsMode;
10
+
11
+ constructor(
12
+ public page: Page,
13
+ private analytics: AnalyticsObject
14
+ ) {
15
+ this.page = page;
16
+ this.analytics = analytics;
17
+ this.analyticsMode = this.analytics.analyticsMode;
18
+ }
19
+
20
+ get recentResultsList(): Locator {
21
+ return this.page.locator('c-quantic-recent-results-list');
22
+ }
23
+
24
+ get recentResultListItemLinks(): Locator {
25
+ return this.page.locator('c-quantic-recent-result-link');
26
+ }
27
+
28
+ get selectResultButton(): Locator {
29
+ return this.page.locator('c-action-select-results button');
30
+ }
31
+
32
+ async clickSelectResultButton(): Promise<void> {
33
+ await this.selectResultButton.click();
34
+ }
35
+
36
+ getRecentResultLinkByIndex(index: number): Locator {
37
+ return this.recentResultListItemLinks.nth(index);
38
+ }
39
+
40
+ async waitForRecentResultClickAnalytics(
41
+ expectedCustomMetadata: Record<string, any>
42
+ ): Promise<Request> {
43
+ if (this.analyticsMode === AnalyticsModeEnum.legacy) {
44
+ return this.analytics.waitForCustomUaAnalytics(
45
+ {
46
+ eventType: 'recentlyClickedDocuments',
47
+ eventValue: 'recentResultClick',
48
+ },
49
+ (event) =>
50
+ Object.keys(expectedCustomMetadata).every(
51
+ (key) =>
52
+ // @ts-ignore
53
+ event?.customData?.info?.[key] === expectedCustomMetadata[key]
54
+ )
55
+ );
56
+ }
57
+ throw new Error(
58
+ `Analytics mode ${this.analyticsMode} is not supported for click recent result analytics`
59
+ );
60
+ }
61
+ }
@@ -0,0 +1,48 @@
1
+ import {testSearch, expect} from './fixture';
2
+ import {
3
+ AnalyticsModeEnum,
4
+ analyticsModeTest,
5
+ } from '../../../../../../playwright/utils/analyticsMode';
6
+
7
+ let test = testSearch;
8
+
9
+ // Next analytics mode not supported in recent results list.
10
+ const supportedAnalyticsModes = analyticsModeTest.filter(
11
+ (analyticsProtocol) => analyticsProtocol.mode === AnalyticsModeEnum.legacy
12
+ );
13
+
14
+ test.describe('quantic recent results list', () => {
15
+ supportedAnalyticsModes.forEach((analytics) => {
16
+ test.describe(analytics.label, () => {
17
+ test.use({
18
+ analyticsMode: analytics.mode,
19
+ });
20
+
21
+ test.describe('when clicking on a recent result', () => {
22
+ test('should log the custom recent result click analytics event', async ({
23
+ recentResultList,
24
+ }) => {
25
+ await recentResultList.clickSelectResultButton();
26
+
27
+ const firstRecentResultItemLink =
28
+ recentResultList.getRecentResultLinkByIndex(0);
29
+ await firstRecentResultItemLink.scrollIntoViewIfNeeded();
30
+ expect(firstRecentResultItemLink).toBeVisible();
31
+ expect(firstRecentResultItemLink).not.toBeNull();
32
+ await firstRecentResultItemLink.evaluate((el) => {
33
+ el.addEventListener('click', (e) => e.preventDefault());
34
+ });
35
+
36
+ const recentResultClickAnalyticsPromise =
37
+ recentResultList.waitForRecentResultClickAnalytics({
38
+ documentTitle: '1',
39
+ documentUrl: 'https://github.com/coveo/ui-kit/',
40
+ });
41
+
42
+ await firstRecentResultItemLink.click();
43
+ await recentResultClickAnalyticsPromise;
44
+ });
45
+ });
46
+ });
47
+ });
48
+ });