@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,56 @@
1
+ const exampleStreamId = crypto.randomUUID();
2
+ const genQaMarkdownTextPayload = {
3
+ payloadType: 'genqa.messageType',
4
+ payload: JSON.stringify({
5
+ textDelta:
6
+ 'THIS IS SOME LOREM IPSUM: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin accumsan felis vel nulla venenatis, vel volutpat mauris suscipit. Praesent aliquam, ex et dapibus fermentum, ligula metus condimentum nunc, non vehicula magna magna a nulla. Integer efficitur nunc eget semper facilisis. Quisque nec tortor at nunc blandit dictum sit amet vel mauris. Duis at tellus sit amet mi pharetra tincidunt. Nullam id risus eget risus accumsan molestie ac quis velit. Vivamus consectetur nisi vel enim finibus, nec laoreet risus facilisis. Integer a lacinia ligula. Etiam cursus urna nisi, ut tincidunt elit consectetur quis. Pellentesque nec sem vel neque malesuada euismod vitae nec augue. Suspendisse non ligula eu purus posuere dictum quis et magna. Curabitur dignissim, magna non feugiat consectetur, lorem orci fringilla sapien, sit amet vehicula eros nulla eget enim. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin accumsan felis vel nulla venenatis, vel volutpat mauris suscipit. Praesent aliquam, ex et dapibus fermentum, ligula metus condimentum nunc, non vehicula magna magna a nulla. Integer efficitur nunc eget semper facilisis. Quisque nec tortor at nunc blandit dictum sit amet vel mauris. Duis at tellus sit amet mi pharetra tincidunt. Nullam id risus eget risus accumsan molestie ac quis velit. Vivamus consectetur nisi vel enim finibus, nec laoreet risus facilisis. Integer a lacinia ligula. Etiam cursus urna nisi, ut tincidunt elit consectetur quis. Pellentesque nec sem vel neque malesuada euismod vitae nec augue. Suspendisse non ligula eu purus posuere dictum quis et magna. Curabitur dignissim, magna non feugiat consectetur, lorem orci fringilla sapien, sit amet vehicula eros nulla eget enim.',
7
+ }),
8
+ finishReason: 'COMPLETED',
9
+ };
10
+ const genQaMarkdownTypePayload = {
11
+ payloadType: 'genqa.headerMessageType',
12
+ payload: JSON.stringify({
13
+ contentFormat: 'text/markdown',
14
+ }),
15
+ };
16
+ const genQaStreamEndPayload = {
17
+ payloadType: 'genqa.endOfStreamType',
18
+ payload: JSON.stringify({
19
+ answerGenerated: true,
20
+ }),
21
+ };
22
+ const exampleCitation = {
23
+ id: 'some-id-1',
24
+ title: 'Some Title 1',
25
+ uri: 'https://www.coveo.com',
26
+ permanentid: 'some-permanent-id-1',
27
+ clickUri: 'https://www.coveo.com',
28
+ text: 'example text 1',
29
+ source: 'Some source 1',
30
+ };
31
+ const exampleCitations = [exampleCitation];
32
+ const genQaCitationPayload = {
33
+ payloadType: 'genqa.citationsType',
34
+ payload: JSON.stringify({
35
+ citations: exampleCitations,
36
+ }),
37
+ };
38
+
39
+ export type GenQaData = {
40
+ streamId: string;
41
+ streams: Array<{payloadType: string; payload: string; finishReason?: string}>;
42
+ citations: Array<Record<string, any>>;
43
+ };
44
+
45
+ const genQaData: GenQaData = {
46
+ streamId: exampleStreamId,
47
+ streams: [
48
+ genQaMarkdownTypePayload,
49
+ genQaMarkdownTextPayload,
50
+ genQaCitationPayload,
51
+ genQaStreamEndPayload,
52
+ ],
53
+ citations: exampleCitations,
54
+ };
55
+
56
+ export default genQaData;
@@ -0,0 +1,185 @@
1
+ import {quanticBase} from '../../../../../../playwright/fixtures/baseFixture';
2
+ import {SearchObject} from '../../../../../../playwright/page-object/searchObject';
3
+ import {
4
+ searchRequestRegex,
5
+ insightSearchRequestRegex,
6
+ rgaGenerateRequestRegex,
7
+ insightRgaGenerateRequestRegex,
8
+ } from '../../../../../../playwright/utils/requests';
9
+ import {InsightSetupObject} from '../../../../../../playwright/page-object/insightSetupObject';
10
+ import {useCaseEnum} from '../../../../../../playwright/utils/useCase';
11
+ import {GeneratedAnswerObject} from './pageObject';
12
+ import genQaData from './data';
13
+ import type {GenQaData} from './data';
14
+ import {AnalyticsModeEnum} from '../../../../../../playwright/utils/analyticsMode';
15
+ import {BaseFacetObject} from '../../../../../../playwright/page-object/baseFacetObject';
16
+
17
+ const MACHINE_LEARNING_API_URL = '**/machinelearning/streaming';
18
+ const ANSWER_API_URL = '**/answer/v1/configs/**/generate';
19
+ const ANSWER_API_INSIGHT_URL = '**/insight/v1/configs/**/answer/**/generate';
20
+
21
+ const pageUrl = 's/quantic-generated-answer';
22
+
23
+ interface GeneratedAnswerOptions {
24
+ fieldsToIncludeInCitations: string;
25
+ collapsible: boolean;
26
+ withToggle: boolean;
27
+ useCase: string;
28
+ answerConfigurationId: string;
29
+ }
30
+
31
+ type QuanticGeneratedAnswerE2ESearchFixtures = {
32
+ genQaData: GenQaData;
33
+ generatedAnswer: GeneratedAnswerObject;
34
+ search: SearchObject;
35
+ options: Partial<GeneratedAnswerOptions>;
36
+ withFacets: boolean;
37
+ baseFacet: BaseFacetObject;
38
+ };
39
+
40
+ type QuanticGeneratedAnswerE2EInsightFixtures =
41
+ QuanticGeneratedAnswerE2ESearchFixtures & {
42
+ insightSetup: InsightSetupObject;
43
+ };
44
+
45
+ export const exampleQuery = 'test';
46
+
47
+ export const testSearch = quanticBase.extend<QuanticGeneratedAnswerE2ESearchFixtures>({
48
+ pageUrl,
49
+ genQaData,
50
+ options: {},
51
+ analyticsMode: AnalyticsModeEnum.legacy,
52
+ withFacets: false,
53
+ search: async ({page}, use) => {
54
+ await use(new SearchObject(page, searchRequestRegex));
55
+ },
56
+ baseFacet: async ({page}, use) => {
57
+ await use(new BaseFacetObject(page, searchRequestRegex));
58
+ },
59
+ generatedAnswer: async (
60
+ {
61
+ page,
62
+ options,
63
+ configuration,
64
+ search,
65
+ genQaData: data,
66
+ analytics,
67
+ withFacets,
68
+ },
69
+ use
70
+ ) => {
71
+ const generatedAnswerObject = new GeneratedAnswerObject(
72
+ page,
73
+ data.streamId,
74
+ analytics,
75
+ !!options.answerConfigurationId,
76
+ rgaGenerateRequestRegex,
77
+ withFacets,
78
+ );
79
+
80
+ const streamingUrl = options.answerConfigurationId
81
+ ? ANSWER_API_URL
82
+ : `${MACHINE_LEARNING_API_URL}/${data.streamId}`;
83
+ await generatedAnswerObject.mockStreamResponse(
84
+ streamingUrl,
85
+ data.streams,
86
+ data.streamId
87
+ );
88
+
89
+ await page.goto(pageUrl);
90
+ if (withFacets) {
91
+ await generatedAnswerObject.clickAddFacetsButton();
92
+ }
93
+ await configuration.configure(options);
94
+ await search.waitForSearchResponse();
95
+
96
+ generatedAnswerObject.streamEndAnalyticRequestPromise =
97
+ generatedAnswerObject.waitForStreamEndAnalytics();
98
+ if (options.answerConfigurationId) {
99
+ generatedAnswerObject.generateRequestPromise =
100
+ generatedAnswerObject.waitForGenerateRequest();
101
+ }
102
+
103
+ await search.fillSearchInput(exampleQuery);
104
+ await search.mockSearchWithGenerativeQuestionAnsweringId(data.streamId);
105
+ await search.performSearch();
106
+ await search.waitForSearchResponse();
107
+
108
+ await use(generatedAnswerObject);
109
+ },
110
+ });
111
+
112
+ export const testInsight =
113
+ quanticBase.extend<QuanticGeneratedAnswerE2EInsightFixtures>({
114
+ pageUrl,
115
+ genQaData,
116
+ options: {},
117
+ analyticsMode: AnalyticsModeEnum.legacy,
118
+ withFacets: false,
119
+ search: async ({page}, use) => {
120
+ await use(new SearchObject(page, insightSearchRequestRegex));
121
+ },
122
+ baseFacet: async ({page}, use) => {
123
+ await use(new BaseFacetObject(page, insightSearchRequestRegex));
124
+ },
125
+ insightSetup: async ({page}, use) => {
126
+ await use(new InsightSetupObject(page));
127
+ },
128
+ generatedAnswer: async (
129
+ {
130
+ page,
131
+ options,
132
+ search,
133
+ configuration,
134
+ insightSetup,
135
+ genQaData: data,
136
+ analytics,
137
+ withFacets,
138
+ },
139
+ use
140
+ ) => {
141
+ const generatedAnswerObject = new GeneratedAnswerObject(
142
+ page,
143
+ data.streamId,
144
+ analytics,
145
+ !!options.answerConfigurationId,
146
+ insightRgaGenerateRequestRegex,
147
+ withFacets
148
+ );
149
+
150
+ const streamingUrl = options.answerConfigurationId
151
+ ? ANSWER_API_INSIGHT_URL
152
+ : `${MACHINE_LEARNING_API_URL}/${data.streamId}`;
153
+ await generatedAnswerObject.mockStreamResponse(
154
+ streamingUrl,
155
+ data.streams,
156
+ data.streamId
157
+ );
158
+
159
+ await page.goto(pageUrl);
160
+ if (withFacets) {
161
+ await generatedAnswerObject.clickAddFacetsButton();
162
+ }
163
+ configuration.configure({...options, useCase: useCaseEnum.insight});
164
+
165
+ await insightSetup.waitForInsightInterfaceInitialization();
166
+ await search.performSearch();
167
+ await search.waitForSearchResponse();
168
+
169
+ await search.mockSearchWithGenerativeQuestionAnsweringId(data.streamId);
170
+ generatedAnswerObject.streamEndAnalyticRequestPromise =
171
+ generatedAnswerObject.waitForStreamEndAnalytics();
172
+ if (options.answerConfigurationId) {
173
+ generatedAnswerObject.generateRequestPromise =
174
+ generatedAnswerObject.waitForGenerateRequest();
175
+ }
176
+
177
+ await search.fillSearchInput(exampleQuery);
178
+ await search.performSearch();
179
+ await search.waitForSearchResponse();
180
+
181
+ await use(generatedAnswerObject);
182
+ },
183
+ });
184
+
185
+ export {expect} from '@playwright/test';
@@ -0,0 +1,451 @@
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
+ import {isRgaEvaluationRequest} from '../../../../../../playwright/utils/requests';
8
+
9
+ const minimumCitationTooltipDisplayDurationMs = 1500;
10
+ const removeUnknownFields = (object: Record<string, unknown>) => {
11
+ return Object.fromEntries(
12
+ Object.entries(object).filter(([, value]) => value !== 'unknown')
13
+ );
14
+ };
15
+
16
+ const selectors = {
17
+ addFacetsButton: 'c-action-add-facets button',
18
+ };
19
+
20
+ const facetElementsSelectors = {
21
+ timeframeFacet: {
22
+ component: 'c-quantic-timeframe-facet',
23
+ facetValueComponent: 'c-quantic-facet-value',
24
+ },
25
+ };
26
+
27
+ export class GeneratedAnswerObject {
28
+ private analyticsMode: AnalyticsMode;
29
+
30
+ constructor(
31
+ private page: Page,
32
+ private streamId: string,
33
+ private analytics: AnalyticsObject,
34
+ private answerApiEnabled: boolean,
35
+ private generateRequestRegex: RegExp,
36
+ private withFacets: boolean
37
+ ) {
38
+ this.page = page;
39
+ this.streamId = streamId;
40
+ this.analytics = analytics;
41
+ this.analyticsMode = this.analytics.analyticsMode;
42
+ this.answerApiEnabled = answerApiEnabled;
43
+ this.generateRequestRegex = generateRequestRegex;
44
+ this.withFacets = withFacets;
45
+ }
46
+
47
+ get likeButton(): Locator {
48
+ return this.page.getByRole('button', {name: 'This answer was helpful'});
49
+ }
50
+
51
+ get dislikeButton(): Locator {
52
+ return this.page.getByRole('button', {name: 'This answer was not helpful'});
53
+ }
54
+
55
+ get copyToClipboardButton(): Locator {
56
+ return this.page.getByRole('button', {name: 'Copy'});
57
+ }
58
+
59
+ get toggleButton(): Locator {
60
+ return this.page.getByTestId('generated-answer__toggle-button');
61
+ }
62
+
63
+ get firstTimeframeFacet(): Locator {
64
+ return this.page
65
+ .locator(facetElementsSelectors.timeframeFacet.component)
66
+ .first();
67
+ }
68
+
69
+ get firstTimeframeFacetValue(): Promise<string | null> {
70
+ return this.firstTimeframeFacet
71
+ .locator(facetElementsSelectors.timeframeFacet.facetValueComponent)
72
+ .first()
73
+ .locator('.facet__value-text')
74
+ .textContent();
75
+ }
76
+
77
+ get addFacetsButton(): Locator {
78
+ return this.page.locator(selectors.addFacetsButton);
79
+ }
80
+
81
+ async clickAddFacetsButton(): Promise<void> {
82
+ await this.addFacetsButton.click();
83
+ }
84
+
85
+ async clickFirstTimeframeFacetLink(): Promise<void> {
86
+ await this.firstTimeframeFacet.click();
87
+ }
88
+
89
+ questionContainer(questionId: string): Locator {
90
+ return this.page.getByTestId(questionId);
91
+ }
92
+
93
+ answerOption(questionId: string, answerValue: string): Locator {
94
+ return this.questionContainer(questionId).locator('.slds-radio_button', {
95
+ hasText: new RegExp(`^${answerValue}$`),
96
+ });
97
+ }
98
+
99
+ get feedbackDocumentUrlInput(): Locator {
100
+ return this.page.locator(
101
+ '.feedback-modal-qna__body input[name="documentUrl"]'
102
+ );
103
+ }
104
+
105
+ get feedbackDetailsInput(): Locator {
106
+ return this.page
107
+ .locator('.feedback-modal-qna__body [data-name="details"]')
108
+ .getByRole('textbox');
109
+ }
110
+
111
+ get submitFeedbackButton(): Locator {
112
+ return this.page.getByRole('button', {name: /Send feedback/i});
113
+ }
114
+
115
+ get completeFeedbackButton(): Locator {
116
+ return this.page.getByRole('button', {name: /Done/i});
117
+ }
118
+
119
+ get citationLink(): Locator {
120
+ return this.page
121
+ .getByTestId('generated-answer__citations')
122
+ .locator('.citation__link');
123
+ }
124
+
125
+ get showMoreButton(): Locator {
126
+ return this.page.getByTestId('generated-answer__answer-toggle');
127
+ }
128
+
129
+ async hoverOverCitation(index: number): Promise<void> {
130
+ // waiting 500ms to allow the component to render completely, cause any re-rendering abort the hover action.
131
+ await this.page.waitForTimeout(500);
132
+ await this.citationLink.nth(index).hover();
133
+ await this.page.waitForTimeout(minimumCitationTooltipDisplayDurationMs);
134
+ await this.page.mouse.move(0, 0);
135
+ }
136
+
137
+ async clickOnCitation(index: number): Promise<void> {
138
+ await this.citationLink.nth(index).click();
139
+ }
140
+
141
+ async typeInFeedbackDocumentUrlInput(text: string): Promise<void> {
142
+ await this.feedbackDocumentUrlInput.fill(text);
143
+ }
144
+
145
+ async typeInFeedbackDetailsInput(text: string): Promise<void> {
146
+ await this.feedbackDetailsInput.fill(text);
147
+ }
148
+
149
+ async clickSubmitFeedbackButton(): Promise<void> {
150
+ await this.submitFeedbackButton.click();
151
+ }
152
+
153
+ async clickCompleteFeedbackButton(): Promise<void> {
154
+ await this.completeFeedbackButton.click();
155
+ }
156
+
157
+ async fillFeedbackForm(answers: Record<string, string>): Promise<void> {
158
+ for (const [questionId, answerValue] of Object.entries(answers)) {
159
+ const option = this.answerOption(questionId, answerValue);
160
+ // eslint-disable-next-line no-await-in-loop
161
+ await option.click();
162
+ }
163
+ }
164
+
165
+ async clickLikeButton(): Promise<void> {
166
+ await this.likeButton.click();
167
+ }
168
+
169
+ async clickDislikeButton(): Promise<void> {
170
+ await this.dislikeButton.click();
171
+ }
172
+
173
+ async clickCopyToClipboardButton(): Promise<void> {
174
+ await this.copyToClipboardButton.click();
175
+ }
176
+
177
+ async clickToggleButton(): Promise<void> {
178
+ await this.toggleButton.click();
179
+ }
180
+
181
+ async waitForGenerateRequest(): Promise<Request> {
182
+ return this.page.waitForRequest(this.generateRequestRegex);
183
+ }
184
+
185
+ async waitForStreamEndAnalytics(): Promise<Request | boolean> {
186
+ if (this.analyticsMode === AnalyticsModeEnum.legacy) {
187
+ return this.analytics.waitForCustomUaAnalytics(
188
+ {
189
+ eventType: 'generatedAnswer',
190
+ eventValue: 'generatedAnswerStreamEnd',
191
+ },
192
+ (event) =>
193
+ event?.customData?.generativeQuestionAnsweringId === this.streamId
194
+ );
195
+ }
196
+ return this.analytics.waitForEventProtocolAnalytics(
197
+ 'Rga.AnswerReceived',
198
+ (event) => event.answerGenerated === true
199
+ );
200
+ }
201
+
202
+ async waitForLikeGeneratedAnswerAnalytics(): Promise<Request> {
203
+ if (this.analyticsMode === AnalyticsModeEnum.legacy) {
204
+ return this.analytics.waitForCustomUaAnalytics(
205
+ {
206
+ eventType: 'generatedAnswer',
207
+ eventValue: 'likeGeneratedAnswer',
208
+ },
209
+ (event) =>
210
+ event?.customData?.generativeQuestionAnsweringId === this.streamId
211
+ );
212
+ }
213
+ return this.analytics.waitForEventProtocolAnalytics(
214
+ 'Rga.AnswerAction',
215
+ (event) => event.action === 'like'
216
+ );
217
+ }
218
+
219
+ async waitForDislikeGeneratedAnswerAnalytics(): Promise<Request> {
220
+ if (this.analyticsMode === AnalyticsModeEnum.legacy) {
221
+ return this.analytics.waitForCustomUaAnalytics(
222
+ {
223
+ eventType: 'generatedAnswer',
224
+ eventValue: 'dislikeGeneratedAnswer',
225
+ },
226
+ (event) =>
227
+ event?.customData?.generativeQuestionAnsweringId === this.streamId
228
+ );
229
+ }
230
+ return this.analytics.waitForEventProtocolAnalytics(
231
+ 'Rga.AnswerAction',
232
+ (event) => event.action === 'dislike'
233
+ );
234
+ }
235
+
236
+ async waitForCopyToClipboardAnalytics(): Promise<Request> {
237
+ if (this.analyticsMode === AnalyticsModeEnum.legacy) {
238
+ return this.analytics.waitForCustomUaAnalytics(
239
+ {
240
+ eventType: 'generatedAnswer',
241
+ eventValue: 'generatedAnswerCopyToClipboard',
242
+ },
243
+ (event) =>
244
+ event?.customData?.generativeQuestionAnsweringId === this.streamId
245
+ );
246
+ }
247
+ return this.analytics.waitForEventProtocolAnalytics(
248
+ 'Rga.AnswerAction',
249
+ (event) => event.action === 'copyToClipboard'
250
+ );
251
+ }
252
+
253
+ async waitForShowAnswersAnalytics(): Promise<Request> {
254
+ if (this.analyticsMode === AnalyticsModeEnum.legacy) {
255
+ return this.analytics.waitForCustomUaAnalytics(
256
+ {
257
+ eventType: 'generatedAnswer',
258
+ eventValue: 'generatedAnswerShowAnswers',
259
+ },
260
+ (event) =>
261
+ event?.customData?.generativeQuestionAnsweringId === this.streamId
262
+ );
263
+ }
264
+ return this.analytics.waitForEventProtocolAnalytics(
265
+ 'Rga.AnswerAction',
266
+ (event) => event.action === 'show'
267
+ );
268
+ }
269
+
270
+ async waitForHideAnswersAnalytics(): Promise<Request> {
271
+ if (this.analyticsMode === AnalyticsModeEnum.legacy) {
272
+ return this.analytics.waitForCustomUaAnalytics(
273
+ {
274
+ eventType: 'generatedAnswer',
275
+ eventValue: 'generatedAnswerHideAnswers',
276
+ },
277
+ (event) =>
278
+ event?.customData?.generativeQuestionAnsweringId === this.streamId
279
+ );
280
+ }
281
+ return this.analytics.waitForEventProtocolAnalytics(
282
+ 'Rga.AnswerAction',
283
+ (event) => event.action === 'hide'
284
+ );
285
+ }
286
+
287
+ async waitForSourceHoverAnalytics(
288
+ expectedPayload: Record<string, any>
289
+ ): Promise<Request> {
290
+ if (this.analyticsMode === AnalyticsModeEnum.legacy) {
291
+ return this.analytics.waitForCustomUaAnalytics(
292
+ {
293
+ eventType: 'generatedAnswer',
294
+ eventValue: 'generatedAnswerSourceHover',
295
+ },
296
+ (event) =>
297
+ event?.customData?.generativeQuestionAnsweringId === this.streamId &&
298
+ Object.keys(expectedPayload).every(
299
+ (key) => event?.customData?.[key] === expectedPayload[key]
300
+ )
301
+ );
302
+ }
303
+ return this.analytics.waitForEventProtocolAnalytics(
304
+ 'Rga.CitationHover',
305
+ (event) =>
306
+ event.citationId === expectedPayload.citationId &&
307
+ event.itemMetadata?.uniqueFieldName === 'permanentid' &&
308
+ event.itemMetadata?.uniqueFieldValue === expectedPayload.permanentId
309
+ );
310
+ }
311
+
312
+ async waitForEvaluationsRequest(
313
+ expectedPayload: Record<string, any>
314
+ ): Promise<Request> {
315
+ const payloadToMatch = removeUnknownFields(expectedPayload);
316
+
317
+ const evaluationRequest = this.page.waitForRequest((request) => {
318
+ const event = request.postDataJSON?.();
319
+ if (isRgaEvaluationRequest(request)) {
320
+ return AnalyticsObject.isMatchingPayload(
321
+ {
322
+ correctTopic: event.details?.correctTopic ? 'yes' : 'no',
323
+ readable: event.details?.readable ? 'yes' : 'no',
324
+ hallucinationFree: event.details?.hallucinationFree ? 'yes' : 'no',
325
+ documented: event.details?.documented ? 'yes' : 'no',
326
+ helpful: event.helpful,
327
+ details: event.additionalNotes,
328
+ documentUrl: event.correctAnswerUrl,
329
+ },
330
+ payloadToMatch
331
+ );
332
+ }
333
+ return false;
334
+ });
335
+ return evaluationRequest;
336
+ }
337
+
338
+ async waitForFeedbackSubmitRequest(
339
+ expectedPayload: Record<string, any>
340
+ ): Promise<Request> {
341
+ if (this.answerApiEnabled) {
342
+ return this.waitForEvaluationsRequest(expectedPayload);
343
+ }
344
+ if (this.analyticsMode === AnalyticsModeEnum.legacy) {
345
+ return this.analytics.waitForCustomUaAnalytics(
346
+ {
347
+ eventType: 'generatedAnswer',
348
+ eventValue: 'generatedAnswerFeedbackSubmitV2',
349
+ },
350
+ (event) =>
351
+ event?.customData?.generativeQuestionAnsweringId === this.streamId &&
352
+ Object.keys(expectedPayload).every(
353
+ (key) => event?.customData?.[key] === expectedPayload[key]
354
+ )
355
+ );
356
+ }
357
+
358
+ const payloadToMatch = removeUnknownFields(expectedPayload);
359
+
360
+ return this.analytics.waitForEventProtocolAnalytics(
361
+ 'Rga.SubmitFeedback',
362
+ (event) =>
363
+ AnalyticsObject.isMatchingPayload(
364
+ {
365
+ correctTopic: event.details?.correctTopic ? 'yes' : 'no',
366
+ readable: event.details?.readable ? 'yes' : 'no',
367
+ hallucinationFree: event.details?.hallucinationFree ? 'yes' : 'no',
368
+ documented: event.details?.documented ? 'yes' : 'no',
369
+ helpful: event.helpful,
370
+ details: event.additionalNotes,
371
+ documentUrl: event.correctAnswerUrl,
372
+ },
373
+ payloadToMatch
374
+ )
375
+ );
376
+ }
377
+
378
+ async waitForCitationClickAnalytics(
379
+ expectedPayload: Record<string, any>
380
+ ): Promise<Request> {
381
+ if (this.analyticsMode === AnalyticsModeEnum.legacy) {
382
+ return this.analytics.waitForClickUaAnalytics(
383
+ 'generatedAnswerCitationClick',
384
+ (event) =>
385
+ event?.customData?.generativeQuestionAnsweringId === this.streamId &&
386
+ AnalyticsObject.isMatchingPayload(
387
+ {
388
+ documentTitle: event.documentTitle,
389
+ sourceName: event.sourceName,
390
+ documentPosition: event.documentPosition,
391
+ documentUri: event.documentUri,
392
+ documentUrl: event.documentUrl,
393
+ citationId: event.customData?.citationId,
394
+ contentIDKey: event.customData?.documentId?.contentIdKey,
395
+ contentIDValue: event.customData?.documentId?.contentIdValue,
396
+ },
397
+ expectedPayload
398
+ )
399
+ );
400
+ }
401
+ const payloadToMatch = {
402
+ citationId: expectedPayload.citationId,
403
+ uniqueFieldName: expectedPayload.contentIDKey,
404
+ uniqueFieldValue: expectedPayload.contentIDValue,
405
+ title: expectedPayload.documentTitle,
406
+ url: expectedPayload.documentUrl,
407
+ };
408
+ return this.analytics.waitForEventProtocolAnalytics(
409
+ 'Rga.CitationClick',
410
+ (event) =>
411
+ AnalyticsObject.isMatchingPayload(
412
+ {
413
+ citationId: event.citationId,
414
+ uniqueFieldName: event.itemMetadata?.uniqueFieldName,
415
+ uniqueFieldValue: event.itemMetadata?.uniqueFieldValue,
416
+ title: event.itemMetadata?.title,
417
+ url: event.itemMetadata?.url,
418
+ },
419
+ payloadToMatch
420
+ )
421
+ );
422
+ }
423
+
424
+ async mockStreamResponse(
425
+ url: string,
426
+ body: Array<{payloadType: string; payload: string; finishReason?: string}>,
427
+ answerId?: string
428
+ ) {
429
+ await this.page.route(url, (route) => {
430
+ let bodyText = '';
431
+ body.forEach((data) => {
432
+ bodyText += `data: ${JSON.stringify(data)} \n\n`;
433
+ });
434
+
435
+ route.fulfill({
436
+ status: 200,
437
+ body: bodyText,
438
+ headers: {
439
+ 'content-type': 'text/event-stream',
440
+ ...(answerId && {
441
+ 'access-control-expose-headers': 'X-Answer-Id',
442
+ 'x-answer-id': answerId,
443
+ }),
444
+ },
445
+ });
446
+ });
447
+ }
448
+
449
+ streamEndAnalyticRequestPromise!: Promise<boolean | Request>;
450
+ generateRequestPromise!: Promise<Request>;
451
+ }