@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,752 @@
1
+ /* eslint-disable no-import-assign */
2
+ // @ts-ignore
3
+ import QuanticBreadcrumbManager from 'c/quanticBreadcrumbManager';
4
+ // @ts-ignore
5
+ import {createElement} from 'lwc';
6
+ import * as mockHeadlessLoader from 'c/quanticHeadlessLoader';
7
+
8
+ jest.mock('@salesforce/label/c.quantic_Colon', () => ({default: ':'}), {
9
+ virtual: true,
10
+ });
11
+
12
+ const initialBreadcrumbManagerState = {
13
+ hasBreadcrumbs: false,
14
+ numericFacetBreadcrumbs: [],
15
+ categoryFacetBreadcrumbs: [],
16
+ dateFacetBreadcrumbs: [],
17
+ facetBreadcrumbs: [],
18
+ };
19
+ let breadcrumbManagerState = initialBreadcrumbManagerState;
20
+
21
+ const initialStoreState = {};
22
+ let storeState = initialStoreState;
23
+
24
+ const functionsMocks = {
25
+ buildBreadcrumbManager: jest.fn(() => ({
26
+ state: breadcrumbManagerState,
27
+ subscribe: functionsMocks.subscribe,
28
+ })),
29
+ subscribe: jest.fn((cb) => {
30
+ cb();
31
+ return functionsMocks.unsubscribe;
32
+ }),
33
+ unsubscribe: jest.fn(() => {}),
34
+ };
35
+
36
+ const selectors = {
37
+ initializationError: 'c-quantic-component-error',
38
+ breadcrumbShowMoreButton: '[data-testid="breadcrumb-manager__more-button"]',
39
+ breadcrumbClearAllFiltersButton:
40
+ '[data-testid="breadcrumb-manager__clear-button"]',
41
+ facetBreadcrumb: '[data-testid="facet-breadcrumb"]',
42
+ facetBreadcrumbValue: '[data-testid="facet-breadcrumb-value"]',
43
+ categoryFacetBreadcrumb: '[data-testid="category-facet-breadcrumb"]',
44
+ categoryFacetBreadcrumbValue:
45
+ '[data-testid="category-facet-breadcrumb-value"]',
46
+ numericFacetBreadcrumb: '[data-testid="numeric-facet-breadcrumb"]',
47
+ numericFacetBreadcrumbValue: '[data-testid="numeric-facet-breadcrumb-value"]',
48
+ numericFacetBreadcrumbFieldName:
49
+ '[data-testid="numeric-facet-breadcrumb-field-name"]',
50
+ dateFacetBreadcrumb: '[data-testid="date-facet-breadcrumb"]',
51
+ dateFacetBreadcrumbValue: '[data-testid="date-facet-breadcrumb-value"]',
52
+ dateFacetBreadcrumbFieldName:
53
+ '[data-testid="date-facet-breadcrumb-field-name"]',
54
+ };
55
+
56
+ const exampleEngine = {
57
+ id: 'dummy engine',
58
+ };
59
+ const defaultCollapseThreshold = 5;
60
+ let isInitialized = false;
61
+
62
+ function createTestComponent(options = {}) {
63
+ const element = createElement('c-quantic-breadcrumb-manager', {
64
+ is: QuanticBreadcrumbManager,
65
+ });
66
+ for (const [key, value] of Object.entries(options)) {
67
+ element[key] = value;
68
+ }
69
+
70
+ document.body.appendChild(element);
71
+ return element;
72
+ }
73
+
74
+ function prepareHeadlessState() {
75
+ // @ts-ignore
76
+ mockHeadlessLoader.getHeadlessBundle = () => {
77
+ return {
78
+ buildBreadcrumbManager: functionsMocks.buildBreadcrumbManager,
79
+ };
80
+ };
81
+ }
82
+
83
+ function mockStoreState() {
84
+ // @ts-ignore
85
+ mockHeadlessLoader.getFromStore = () => {
86
+ return storeState;
87
+ };
88
+ }
89
+
90
+ // Helper function to wait until the microtask queue is empty.
91
+ function flushPromises() {
92
+ // eslint-disable-next-line @lwc/lwc/no-async-operation
93
+ return new Promise((resolve) => setTimeout(resolve, 0));
94
+ }
95
+
96
+ function mockSuccessfulHeadlessInitialization() {
97
+ // @ts-ignore
98
+ mockHeadlessLoader.initializeWithHeadless = (element, _, initialize) => {
99
+ if (element instanceof QuanticBreadcrumbManager && !isInitialized) {
100
+ isInitialized = true;
101
+ initialize(exampleEngine);
102
+ }
103
+ };
104
+ }
105
+
106
+ function mockErroneousHeadlessInitialization() {
107
+ // @ts-ignore
108
+ mockHeadlessLoader.initializeWithHeadless = (element) => {
109
+ if (element instanceof QuanticBreadcrumbManager) {
110
+ element.setInitializationError();
111
+ }
112
+ };
113
+ }
114
+
115
+ function cleanup() {
116
+ // The jsdom instance is shared across test cases in a single file so reset the DOM
117
+ while (document.body.firstChild) {
118
+ document.body.removeChild(document.body.firstChild);
119
+ }
120
+ jest.clearAllMocks();
121
+ isInitialized = false;
122
+ }
123
+
124
+ describe('c-quantic-breadcrumb-manager', () => {
125
+ beforeEach(() => {
126
+ mockSuccessfulHeadlessInitialization();
127
+ prepareHeadlessState();
128
+ mockStoreState();
129
+ });
130
+
131
+ afterEach(() => {
132
+ breadcrumbManagerState = initialBreadcrumbManagerState;
133
+ storeState = initialStoreState;
134
+ cleanup();
135
+ });
136
+
137
+ describe('when an initialization error occurs', () => {
138
+ beforeEach(() => {
139
+ mockErroneousHeadlessInitialization();
140
+ });
141
+
142
+ it('should display the initialization error component', async () => {
143
+ const element = createTestComponent();
144
+ await flushPromises();
145
+
146
+ const errorComponent = element.shadowRoot.querySelector(
147
+ selectors.initializationError
148
+ );
149
+
150
+ expect(errorComponent).not.toBeNull();
151
+ });
152
+ });
153
+
154
+ describe('controller initialization', () => {
155
+ beforeEach(() => {
156
+ mockSuccessfulHeadlessInitialization();
157
+ prepareHeadlessState();
158
+ });
159
+
160
+ it('should build the breadcrumb manager and subscribe to state', async () => {
161
+ createTestComponent();
162
+ await flushPromises();
163
+
164
+ expect(functionsMocks.buildBreadcrumbManager).toHaveBeenCalledTimes(1);
165
+ expect(functionsMocks.buildBreadcrumbManager).toHaveBeenCalledWith(
166
+ exampleEngine
167
+ );
168
+ expect(functionsMocks.subscribe).toHaveBeenCalledTimes(1);
169
+ });
170
+ });
171
+
172
+ describe('facet breadcrumbs rendering', () => {
173
+ const exampleFacetBreadcrumbs = [
174
+ {
175
+ field: 'fieldOne',
176
+ facetId: 'facetIdOne',
177
+ values: [{value: {value: 'one'}}, {value: {value: 'two'}}],
178
+ },
179
+ {
180
+ field: 'fieldTwo',
181
+ facetId: 'facetIdTwo',
182
+ values: [{value: {value: 'three'}}, {value: {value: 'four'}}],
183
+ },
184
+ ];
185
+
186
+ beforeEach(() => {
187
+ breadcrumbManagerState = {
188
+ ...breadcrumbManagerState,
189
+ facetBreadcrumbs: exampleFacetBreadcrumbs,
190
+ hasBreadcrumbs: true,
191
+ };
192
+ storeState = exampleFacetBreadcrumbs.reduce((acc, breadcrumb) => {
193
+ acc[breadcrumb.facetId] = {
194
+ facetId: breadcrumb.facetId,
195
+ format: (value) => value,
196
+ };
197
+ return acc;
198
+ }, {});
199
+ });
200
+
201
+ it('should properly display the breadcrumb values', async () => {
202
+ const element = createTestComponent();
203
+ await flushPromises();
204
+
205
+ const facetBreadcrumbs = element.shadowRoot.querySelectorAll(
206
+ selectors.facetBreadcrumb
207
+ );
208
+
209
+ expect(facetBreadcrumbs.length).toBe(exampleFacetBreadcrumbs.length);
210
+ facetBreadcrumbs.forEach((facetBreadcrumb, index) => {
211
+ const exampleFacetBreadcrumb = exampleFacetBreadcrumbs[index];
212
+ const facetBreadcrumbValues = Array.from(
213
+ facetBreadcrumb.querySelectorAll(selectors.facetBreadcrumbValue)
214
+ );
215
+
216
+ expect(facetBreadcrumbValues.length).toBe(
217
+ exampleFacetBreadcrumb.values.length
218
+ );
219
+
220
+ const labels = facetBreadcrumbValues.map(
221
+ (facetBreadcrumbValue) => facetBreadcrumbValue.label
222
+ );
223
+ const values = exampleFacetBreadcrumb.values.map((item) => item.value);
224
+ expect(labels).toEqual(values);
225
+
226
+ const breadcrumbClearAllFiltersButton =
227
+ element.shadowRoot.querySelector(
228
+ selectors.breadcrumbClearAllFiltersButton
229
+ );
230
+ expect(breadcrumbClearAllFiltersButton).not.toBeNull();
231
+ });
232
+ });
233
+
234
+ describe('when the number of selected values for one facet exceeds the collapse threshold', () => {
235
+ const testManyFacetBreadcrumbs = [
236
+ {
237
+ field: 'fieldOne',
238
+ facetId: 'facetIdOne',
239
+ values: [
240
+ {value: {value: 'one'}},
241
+ {value: {value: 'two'}},
242
+ {value: {value: 'three'}},
243
+ {value: {value: 'four'}},
244
+ {value: {value: 'five'}},
245
+ {value: {value: 'six'}},
246
+ ],
247
+ },
248
+ ];
249
+
250
+ beforeEach(() => {
251
+ breadcrumbManagerState = {
252
+ ...breadcrumbManagerState,
253
+ facetBreadcrumbs: testManyFacetBreadcrumbs,
254
+ hasBreadcrumbs: true,
255
+ };
256
+ storeState = testManyFacetBreadcrumbs.reduce((acc, breadcrumb) => {
257
+ acc[breadcrumb.facetId] = {
258
+ facetId: breadcrumb.facetId,
259
+ format: (value) => value,
260
+ };
261
+ return acc;
262
+ }, {});
263
+ });
264
+
265
+ it('should collapse the values and display a show more button', async () => {
266
+ const element = createTestComponent();
267
+ await flushPromises();
268
+
269
+ const facetBreadcrumbs = element.shadowRoot.querySelectorAll(
270
+ selectors.facetBreadcrumb
271
+ );
272
+ expect(facetBreadcrumbs.length).toBe(testManyFacetBreadcrumbs.length);
273
+
274
+ const firstFacetBreadcrumb = facetBreadcrumbs[0];
275
+ const facetBreadcrumbValues = Array.from(
276
+ firstFacetBreadcrumb.querySelectorAll(selectors.facetBreadcrumbValue)
277
+ );
278
+ expect(facetBreadcrumbValues.length).toBe(defaultCollapseThreshold);
279
+ facetBreadcrumbValues.forEach((facetBreadcrumbValue, index) => {
280
+ const facetValueLabel = facetBreadcrumbValue.label.value;
281
+ expect(facetValueLabel).toBe(
282
+ testManyFacetBreadcrumbs[0].values[index].value.value
283
+ );
284
+ });
285
+
286
+ const breadcrumbShowMoreButton = element.shadowRoot.querySelector(
287
+ selectors.breadcrumbShowMoreButton
288
+ );
289
+ expect(breadcrumbShowMoreButton).not.toBeNull();
290
+ });
291
+
292
+ it('should expand the values when the show more button is clicked', async () => {
293
+ const element = createTestComponent();
294
+ await flushPromises();
295
+
296
+ const facetBreadcrumbs = element.shadowRoot.querySelectorAll(
297
+ selectors.facetBreadcrumb
298
+ );
299
+ const firstFacetBreadcrumb = facetBreadcrumbs[0];
300
+
301
+ const facetBreadcrumbValues = Array.from(
302
+ firstFacetBreadcrumb.querySelectorAll(selectors.facetBreadcrumbValue)
303
+ );
304
+ expect(facetBreadcrumbValues.length).toBe(defaultCollapseThreshold);
305
+
306
+ const breadcrumbShowMoreButton = element.shadowRoot.querySelector(
307
+ selectors.breadcrumbShowMoreButton
308
+ );
309
+ expect(breadcrumbShowMoreButton).not.toBeNull();
310
+
311
+ breadcrumbShowMoreButton.click();
312
+ await flushPromises();
313
+
314
+ const facetBreadcrumbValuesAfterClick = Array.from(
315
+ firstFacetBreadcrumb.querySelectorAll(selectors.facetBreadcrumbValue)
316
+ );
317
+ expect(facetBreadcrumbValuesAfterClick.length).toBe(
318
+ testManyFacetBreadcrumbs[0].values.length
319
+ );
320
+ const breadcrumbShowMoreButtonAfterClick =
321
+ element.shadowRoot.querySelector(selectors.breadcrumbShowMoreButton);
322
+ expect(breadcrumbShowMoreButtonAfterClick).toBeNull();
323
+ });
324
+ });
325
+
326
+ describe('with a custom collapse threshold', () => {
327
+ const customCollapseThreshold = 3;
328
+ const testManyFacetBreadcrumbs = [
329
+ {
330
+ field: 'fieldOne',
331
+ facetId: 'facetIdOne',
332
+ values: [
333
+ {value: {value: 'one'}},
334
+ {value: {value: 'two'}},
335
+ {value: {value: 'three'}},
336
+ {value: {value: 'four'}},
337
+ {value: {value: 'five'}},
338
+ {value: {value: 'six'}},
339
+ ],
340
+ },
341
+ ];
342
+
343
+ beforeEach(() => {
344
+ breadcrumbManagerState = {
345
+ ...breadcrumbManagerState,
346
+ facetBreadcrumbs: testManyFacetBreadcrumbs,
347
+ hasBreadcrumbs: true,
348
+ };
349
+ storeState = testManyFacetBreadcrumbs.reduce((acc, breadcrumb) => {
350
+ acc[breadcrumb.facetId] = {
351
+ facetId: breadcrumb.facetId,
352
+ format: (value) => value,
353
+ };
354
+ return acc;
355
+ }, {});
356
+ });
357
+ it('should collapse the values over the custom collapse threshold and display a show more button', async () => {
358
+ const element = createTestComponent({
359
+ collapseThreshold: customCollapseThreshold,
360
+ });
361
+ await flushPromises();
362
+
363
+ const facetBreadcrumbs = element.shadowRoot.querySelectorAll(
364
+ selectors.facetBreadcrumb
365
+ );
366
+ expect(facetBreadcrumbs.length).toBe(testManyFacetBreadcrumbs.length);
367
+
368
+ const firstFacetBreadcrumb = facetBreadcrumbs[0];
369
+ const facetBreadcrumbValues = Array.from(
370
+ firstFacetBreadcrumb.querySelectorAll(selectors.facetBreadcrumbValue)
371
+ );
372
+ expect(facetBreadcrumbValues.length).toBe(customCollapseThreshold);
373
+ facetBreadcrumbValues.forEach((facetBreadcrumbValue, index) => {
374
+ const facetValueLabel = facetBreadcrumbValue.label.value;
375
+ expect(facetValueLabel).toBe(
376
+ testManyFacetBreadcrumbs[0].values[index].value.value
377
+ );
378
+ });
379
+
380
+ const breadcrumbShowMoreButton = element.shadowRoot.querySelector(
381
+ selectors.breadcrumbShowMoreButton
382
+ );
383
+ expect(breadcrumbShowMoreButton).not.toBeNull();
384
+ });
385
+ });
386
+ });
387
+
388
+ describe('category facet breadcrumbs', () => {
389
+ const testCategoryFacetBreadcrumbs = [
390
+ {
391
+ field: 'fieldOne',
392
+ facetId: 'facetIdOne',
393
+ path: [{value: 'one'}, {value: 'two'}],
394
+ },
395
+ {
396
+ field: 'fieldTwo',
397
+ facetId: 'facetIdTwo',
398
+ path: [{value: 'three'}, {value: 'four'}],
399
+ },
400
+ ];
401
+
402
+ beforeEach(() => {
403
+ breadcrumbManagerState = {
404
+ ...breadcrumbManagerState,
405
+ categoryFacetBreadcrumbs: testCategoryFacetBreadcrumbs,
406
+ hasBreadcrumbs: true,
407
+ };
408
+ storeState = testCategoryFacetBreadcrumbs.reduce((acc, breadcrumb) => {
409
+ acc[breadcrumb.facetId] = {
410
+ facetId: breadcrumb.facetId,
411
+ format: (item) => item.value,
412
+ };
413
+ return acc;
414
+ }, {});
415
+ });
416
+
417
+ it('should properly display the breadcrumb values', async () => {
418
+ const element = createTestComponent();
419
+ await flushPromises();
420
+
421
+ const categoryFacetBreadcrumbs = element.shadowRoot.querySelectorAll(
422
+ selectors.categoryFacetBreadcrumb
423
+ );
424
+
425
+ expect(categoryFacetBreadcrumbs.length).toBe(
426
+ testCategoryFacetBreadcrumbs.length
427
+ );
428
+ categoryFacetBreadcrumbs.forEach((categoryFacetBreadcrumb, index) => {
429
+ const exampleFacetBreadcrumb = testCategoryFacetBreadcrumbs[index];
430
+ const categoryFacetBreadcrumbValues = Array.from(
431
+ categoryFacetBreadcrumb.querySelectorAll(
432
+ selectors.categoryFacetBreadcrumbValue
433
+ )
434
+ );
435
+
436
+ expect(categoryFacetBreadcrumbValues.length).toBe(1);
437
+
438
+ const labels = categoryFacetBreadcrumbValues.map(
439
+ (facetBreadcrumbValue) => facetBreadcrumbValue.label
440
+ );
441
+ const values = exampleFacetBreadcrumb.path.map((item) => item.value);
442
+ expect(labels).toEqual([values.join(' / ')]);
443
+ });
444
+ });
445
+
446
+ describe('with a custom category divider', () => {
447
+ it('should display the breadcrumb values with the custom divider', async () => {
448
+ const customCategoryDivider = '*';
449
+ const element = createTestComponent({
450
+ categoryDivider: customCategoryDivider,
451
+ });
452
+ await flushPromises();
453
+
454
+ const categoryFacetBreadcrumbs = element.shadowRoot.querySelectorAll(
455
+ selectors.categoryFacetBreadcrumb
456
+ );
457
+
458
+ expect(categoryFacetBreadcrumbs.length).toBe(
459
+ testCategoryFacetBreadcrumbs.length
460
+ );
461
+
462
+ categoryFacetBreadcrumbs.forEach((categoryFacetBreadcrumb, index) => {
463
+ const exampleFacetBreadcrumb = testCategoryFacetBreadcrumbs[index];
464
+ const categoryFacetBreadcrumbValues = Array.from(
465
+ categoryFacetBreadcrumb.querySelectorAll(
466
+ selectors.categoryFacetBreadcrumbValue
467
+ )
468
+ );
469
+
470
+ expect(categoryFacetBreadcrumbValues.length).toBe(1);
471
+
472
+ const labels = categoryFacetBreadcrumbValues.map(
473
+ (facetBreadcrumbValue) => facetBreadcrumbValue.label
474
+ );
475
+ const values = exampleFacetBreadcrumb.path.map((item) => item.value);
476
+ expect(labels).toEqual([values.join(` ${customCategoryDivider} `)]);
477
+ });
478
+ });
479
+ });
480
+ });
481
+
482
+ describe('numeric facet breadcrumbs', () => {
483
+ const testNumericFacetBreadcrumbs = [
484
+ {
485
+ field: 'fieldOne',
486
+ facetId: 'facetIdOne',
487
+ values: [{value: {start: 0, end: 1}}, {value: {start: 1, end: 2}}],
488
+ },
489
+ {
490
+ field: 'fieldTwo',
491
+ facetId: 'facetIdTwo',
492
+ values: [{value: {start: 10, end: 11}}, {value: {start: 20, end: 21}}],
493
+ },
494
+ ];
495
+
496
+ beforeAll(() => {
497
+ breadcrumbManagerState = {
498
+ ...breadcrumbManagerState,
499
+ numericFacetBreadcrumbs: testNumericFacetBreadcrumbs,
500
+ hasBreadcrumbs: true,
501
+ };
502
+ storeState = testNumericFacetBreadcrumbs.reduce((acc, breadcrumb) => {
503
+ acc[breadcrumb.facetId] = {
504
+ facetId: breadcrumb.facetId,
505
+ format: (item) => `${item.start} - ${item.end}`,
506
+ };
507
+ return acc;
508
+ }, {});
509
+ });
510
+
511
+ it('should properly display the breadcrumb values', async () => {
512
+ const element = createTestComponent();
513
+ await flushPromises();
514
+
515
+ const numericFacetBreadcrumbs = element.shadowRoot.querySelectorAll(
516
+ selectors.numericFacetBreadcrumb
517
+ );
518
+
519
+ expect(numericFacetBreadcrumbs.length).toBe(
520
+ testNumericFacetBreadcrumbs.length
521
+ );
522
+ numericFacetBreadcrumbs.forEach((numericFacetBreadcrumb, index) => {
523
+ const exampleFacetBreadcrumb = testNumericFacetBreadcrumbs[index];
524
+ const facetBreadcrumbValues = Array.from(
525
+ numericFacetBreadcrumb.querySelectorAll(
526
+ selectors.numericFacetBreadcrumbValue
527
+ )
528
+ );
529
+
530
+ expect(facetBreadcrumbValues.length).toBe(
531
+ exampleFacetBreadcrumb.values.length
532
+ );
533
+
534
+ const labels = facetBreadcrumbValues.map(
535
+ (facetBreadcrumbValue) => facetBreadcrumbValue.label
536
+ );
537
+ const values = exampleFacetBreadcrumb.values.map(
538
+ (item) => `${item.value.start} - ${item.value.end}`
539
+ );
540
+ expect(labels).toEqual(values);
541
+ });
542
+ });
543
+
544
+ describe('when a numeric range is set with a numeric filter', () => {
545
+ const exampleLabel = 'Field one';
546
+ const exampleField = 'fieldOne';
547
+ const testNumericFacetBreadcrumbsWithFilter = [
548
+ {
549
+ field: exampleField,
550
+ facetId: `${exampleField}_input`,
551
+ values: [{value: {start: 10, end: 11}}],
552
+ },
553
+ ];
554
+
555
+ beforeAll(() => {
556
+ breadcrumbManagerState = {
557
+ ...breadcrumbManagerState,
558
+ numericFacetBreadcrumbs: testNumericFacetBreadcrumbsWithFilter,
559
+ hasBreadcrumbs: true,
560
+ };
561
+ storeState = {
562
+ [exampleField]: {
563
+ facetId: exampleField,
564
+ label: exampleLabel,
565
+ format: (item) => `${item.start} - ${item.end}`,
566
+ },
567
+ };
568
+ });
569
+
570
+ it('should display the breadcrumb values with correct labels', async () => {
571
+ const element = createTestComponent();
572
+ await flushPromises();
573
+
574
+ const numericFacetBreadcrumbs = element.shadowRoot.querySelectorAll(
575
+ selectors.numericFacetBreadcrumb
576
+ );
577
+
578
+ expect(numericFacetBreadcrumbs.length).toBe(
579
+ testNumericFacetBreadcrumbsWithFilter.length
580
+ );
581
+ numericFacetBreadcrumbs.forEach((numericFacetBreadcrumb, index) => {
582
+ const exampleFacetBreadcrumb =
583
+ testNumericFacetBreadcrumbsWithFilter[index];
584
+
585
+ const numericFacetBreadcrumbFieldName =
586
+ numericFacetBreadcrumb.querySelector(
587
+ selectors.numericFacetBreadcrumbFieldName
588
+ );
589
+ expect(numericFacetBreadcrumbFieldName.textContent).toBe(
590
+ `${exampleLabel}: `
591
+ );
592
+
593
+ const facetBreadcrumbValues = Array.from(
594
+ numericFacetBreadcrumb.querySelectorAll(
595
+ selectors.numericFacetBreadcrumbValue
596
+ )
597
+ );
598
+
599
+ expect(facetBreadcrumbValues.length).toBe(
600
+ exampleFacetBreadcrumb.values.length
601
+ );
602
+
603
+ const labels = facetBreadcrumbValues.map(
604
+ (facetBreadcrumbValue) => facetBreadcrumbValue.label
605
+ );
606
+ const values = exampleFacetBreadcrumb.values.map(
607
+ (item) => `${item.value.start} - ${item.value.end}`
608
+ );
609
+ expect(labels).toEqual(values);
610
+ });
611
+ });
612
+ });
613
+ });
614
+
615
+ describe('date facet breadcrumbs', () => {
616
+ const testDateFacetBreadcrumbs = [
617
+ {
618
+ field: 'fieldOne',
619
+ facetId: 'facetIdOne',
620
+ values: [
621
+ {value: {start: 'yesterday', end: 'today'}},
622
+ {value: {start: 'today', end: 'tomorrow'}},
623
+ ],
624
+ },
625
+ {
626
+ field: 'fieldTwo',
627
+ facetId: 'facetIdTwo',
628
+ values: [
629
+ {value: {start: 'last week', end: 'today'}},
630
+ {value: {start: 'tomorrow', end: 'next week'}},
631
+ ],
632
+ },
633
+ ];
634
+
635
+ beforeAll(() => {
636
+ breadcrumbManagerState = {
637
+ ...breadcrumbManagerState,
638
+ dateFacetBreadcrumbs: testDateFacetBreadcrumbs,
639
+ hasBreadcrumbs: true,
640
+ };
641
+ storeState = testDateFacetBreadcrumbs.reduce((acc, breadcrumb) => {
642
+ acc[breadcrumb.facetId] = {
643
+ facetId: breadcrumb.facetId,
644
+ format: (item) => `${item.start} - ${item.end}`,
645
+ };
646
+ return acc;
647
+ }, {});
648
+ });
649
+
650
+ it('should properly display the breadcrumb values', async () => {
651
+ const element = createTestComponent();
652
+ await flushPromises();
653
+
654
+ const dateFacetBreadcrumbs = element.shadowRoot.querySelectorAll(
655
+ selectors.dateFacetBreadcrumb
656
+ );
657
+
658
+ expect(dateFacetBreadcrumbs.length).toBe(testDateFacetBreadcrumbs.length);
659
+
660
+ dateFacetBreadcrumbs.forEach((dateFacetBreadcrumb, index) => {
661
+ const exampleFacetBreadcrumb = testDateFacetBreadcrumbs[index];
662
+ const facetBreadcrumbValues = Array.from(
663
+ dateFacetBreadcrumb.querySelectorAll(
664
+ selectors.dateFacetBreadcrumbValue
665
+ )
666
+ );
667
+
668
+ expect(facetBreadcrumbValues.length).toBe(
669
+ exampleFacetBreadcrumb.values.length
670
+ );
671
+
672
+ const labels = facetBreadcrumbValues.map(
673
+ (facetBreadcrumbValue) => facetBreadcrumbValue.label
674
+ );
675
+ const values = exampleFacetBreadcrumb.values.map(
676
+ (item) => `${item.value.start} - ${item.value.end}`
677
+ );
678
+ expect(labels).toEqual(values);
679
+ });
680
+ });
681
+
682
+ describe('when a date range is set with a date filter', () => {
683
+ const exampleLabel = 'Field one';
684
+ const exampleField = 'fieldOne';
685
+ const testDateFacetBreadcrumbsWithFilter = [
686
+ {
687
+ field: exampleField,
688
+ facetId: `${exampleField}_input`,
689
+ values: [{value: {start: 'last week', end: 'today'}}],
690
+ },
691
+ ];
692
+
693
+ beforeAll(() => {
694
+ breadcrumbManagerState = {
695
+ ...breadcrumbManagerState,
696
+ dateFacetBreadcrumbs: testDateFacetBreadcrumbsWithFilter,
697
+ hasBreadcrumbs: true,
698
+ };
699
+ storeState = {
700
+ [exampleField]: {
701
+ facetId: exampleField,
702
+ label: exampleLabel,
703
+ format: (item) => `${item.start} - ${item.end}`,
704
+ },
705
+ };
706
+ });
707
+
708
+ it('should display the breadcrumb values with correct labels', async () => {
709
+ const element = createTestComponent();
710
+ await flushPromises();
711
+
712
+ const dateFacetBreadcrumbs = element.shadowRoot.querySelectorAll(
713
+ selectors.dateFacetBreadcrumb
714
+ );
715
+
716
+ expect(dateFacetBreadcrumbs.length).toBe(
717
+ testDateFacetBreadcrumbsWithFilter.length
718
+ );
719
+ dateFacetBreadcrumbs.forEach((dateFacetBreadcrumb, index) => {
720
+ const exampleFacetBreadcrumb =
721
+ testDateFacetBreadcrumbsWithFilter[index];
722
+
723
+ const dateFacetBreadcrumbFieldName =
724
+ dateFacetBreadcrumb.querySelector(
725
+ selectors.dateFacetBreadcrumbFieldName
726
+ );
727
+ expect(dateFacetBreadcrumbFieldName.textContent).toBe(
728
+ `${exampleLabel}: `
729
+ );
730
+
731
+ const facetBreadcrumbValues = Array.from(
732
+ dateFacetBreadcrumb.querySelectorAll(
733
+ selectors.dateFacetBreadcrumbValue
734
+ )
735
+ );
736
+
737
+ expect(facetBreadcrumbValues.length).toBe(
738
+ exampleFacetBreadcrumb.values.length
739
+ );
740
+
741
+ const labels = facetBreadcrumbValues.map(
742
+ (facetBreadcrumbValue) => facetBreadcrumbValue.label
743
+ );
744
+ const values = exampleFacetBreadcrumb.values.map(
745
+ (item) => `${item.value.start} - ${item.value.end}`
746
+ );
747
+ expect(labels).toEqual(values);
748
+ });
749
+ });
750
+ });
751
+ });
752
+ });