@coveo/quantic 3.44.0 → 3.44.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 (205) hide show
  1. package/force-app/main/default/classes/OrganizationEndpointsTest.cls +71 -15
  2. package/force-app/main/default/classes/RecommendationsControllerTest.cls +1 -1
  3. package/force-app/main/default/lwc/quanticNumberButton/quanticNumberButton.js +5 -1
  4. package/force-app/main/default/lwc/quanticPager/quanticPager.html +8 -5
  5. package/force-app/main/default/lwc/quanticTabBar/quanticTabBar.js +148 -125
  6. package/force-app/main/default/staticresources/coveoheadless/case-assist/headless.js +16 -16
  7. package/force-app/main/default/staticresources/coveoheadless/headless.js +17 -17
  8. package/force-app/main/default/staticresources/coveoheadless/insight/headless.js +16 -16
  9. package/force-app/main/default/staticresources/coveoheadless/recommendation/headless.js +16 -16
  10. package/package.json +37 -34
  11. package/force-app/main/default/lwc/quanticAriaLive/__tests__/quanticAriaLive.test.js +0 -106
  12. package/force-app/main/default/lwc/quanticBreadcrumbManager/__tests__/quanticBreadcrumbManager.test.js +0 -752
  13. package/force-app/main/default/lwc/quanticBreadcrumbManager/e2e/data.ts +0 -130
  14. package/force-app/main/default/lwc/quanticBreadcrumbManager/e2e/fixture.ts +0 -87
  15. package/force-app/main/default/lwc/quanticBreadcrumbManager/e2e/pageObject.ts +0 -282
  16. package/force-app/main/default/lwc/quanticBreadcrumbManager/e2e/quanticBreadcrumbManager.e2e.ts +0 -208
  17. package/force-app/main/default/lwc/quanticCarousel/__tests__/quanticCarousel.test.js +0 -262
  18. package/force-app/main/default/lwc/quanticCaseClassification/__tests__/quanticCaseClassification.test.js +0 -819
  19. package/force-app/main/default/lwc/quanticCaseClassification/e2e/data.ts +0 -23
  20. package/force-app/main/default/lwc/quanticCaseClassification/e2e/fixture.ts +0 -51
  21. package/force-app/main/default/lwc/quanticCaseClassification/e2e/pageObject.ts +0 -152
  22. package/force-app/main/default/lwc/quanticCaseClassification/e2e/quanticCaseClassification.e2e.ts +0 -269
  23. package/force-app/main/default/lwc/quanticCategoryFacet/__tests__/quanticCategoryFacet.test.js +0 -1183
  24. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/data.ts +0 -91
  25. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/fixture.ts +0 -79
  26. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/pageObject.ts +0 -55
  27. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/quanticCategoryFacet.e2e.ts +0 -219
  28. package/force-app/main/default/lwc/quanticCitation/__tests__/quanticCitation.test.js +0 -581
  29. package/force-app/main/default/lwc/quanticColoredResultBadge/__tests__/quanticColoredResultBadge.test.js +0 -212
  30. package/force-app/main/default/lwc/quanticDateFacet/__tests__/quanticDateFacet.test.js +0 -688
  31. package/force-app/main/default/lwc/quanticDateFacet/e2e/data.ts +0 -44
  32. package/force-app/main/default/lwc/quanticDateFacet/e2e/fixture.ts +0 -72
  33. package/force-app/main/default/lwc/quanticDateFacet/e2e/pageObject.ts +0 -27
  34. package/force-app/main/default/lwc/quanticDateFacet/e2e/quanticDateFacet.e2e.ts +0 -167
  35. package/force-app/main/default/lwc/quanticDidYouMean/__tests__/quanticDidYouMean.test.js +0 -348
  36. package/force-app/main/default/lwc/quanticDidYouMean/e2e/data.ts +0 -48
  37. package/force-app/main/default/lwc/quanticDidYouMean/e2e/fixture.ts +0 -84
  38. package/force-app/main/default/lwc/quanticDidYouMean/e2e/pageObject.ts +0 -173
  39. package/force-app/main/default/lwc/quanticDidYouMean/e2e/quanticDidYouMean.e2e.ts +0 -219
  40. package/force-app/main/default/lwc/quanticDocumentSuggestion/__tests__/quanticDocumentSuggestion.test.js +0 -404
  41. package/force-app/main/default/lwc/quanticDocumentSuggestion/e2e/fixture.ts +0 -38
  42. package/force-app/main/default/lwc/quanticDocumentSuggestion/e2e/pageObject.ts +0 -52
  43. package/force-app/main/default/lwc/quanticDocumentSuggestion/e2e/quanticDocumentSuggestion.e2e.ts +0 -102
  44. package/force-app/main/default/lwc/quanticFacet/__tests__/quanticFacet.test.js +0 -1105
  45. package/force-app/main/default/lwc/quanticFacet/e2e/data.ts +0 -62
  46. package/force-app/main/default/lwc/quanticFacet/e2e/fixture.ts +0 -78
  47. package/force-app/main/default/lwc/quanticFacet/e2e/pageObject.ts +0 -67
  48. package/force-app/main/default/lwc/quanticFacet/e2e/quanticFacet.e2e.ts +0 -242
  49. package/force-app/main/default/lwc/quanticFacetCaption/__tests__/quanticFacetCaption.test.js +0 -28
  50. package/force-app/main/default/lwc/quanticFacetManager/__tests__/quanticFacetManager.test.js +0 -178
  51. package/force-app/main/default/lwc/quanticFacetManager/e2e/data.ts +0 -59
  52. package/force-app/main/default/lwc/quanticFacetManager/e2e/fixture.ts +0 -75
  53. package/force-app/main/default/lwc/quanticFacetManager/e2e/pageObject.ts +0 -23
  54. package/force-app/main/default/lwc/quanticFacetManager/e2e/quanticFacetManager.e2e.ts +0 -82
  55. package/force-app/main/default/lwc/quanticFeedback/__tests__/quanticFeedback.test.js +0 -403
  56. package/force-app/main/default/lwc/quanticFeedbackModal/__tests__/quanticFeedbackModal.test.js +0 -448
  57. package/force-app/main/default/lwc/quanticFeedbackModalQna/__tests__/quanticFeedbackModalQna.test.js +0 -298
  58. package/force-app/main/default/lwc/quanticFoldedResultList/__tests__/quanticFoldedResultList.test.js +0 -323
  59. package/force-app/main/default/lwc/quanticFoldedResultList/e2e/fixture.ts +0 -74
  60. package/force-app/main/default/lwc/quanticFoldedResultList/e2e/pageObject.ts +0 -81
  61. package/force-app/main/default/lwc/quanticFoldedResultList/e2e/quanticFoldedResultList.e2e.ts +0 -69
  62. package/force-app/main/default/lwc/quanticGeneratedAnswer/__tests__/quanticGeneratedAnswer.test.js +0 -1575
  63. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/agentData.ts +0 -279
  64. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/data.ts +0 -56
  65. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/fixture-agent.ts +0 -77
  66. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/fixture.ts +0 -194
  67. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/pageObject.ts +0 -599
  68. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/quanticGeneratedAnswer.e2e.ts +0 -333
  69. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/quanticGeneratedAnswerAgent.e2e.ts +0 -298
  70. package/force-app/main/default/lwc/quanticGeneratedAnswerBody/__tests__/quanticGeneratedAnswerBody.test.js +0 -418
  71. package/force-app/main/default/lwc/quanticGeneratedAnswerContent/__tests__/quanticGeneratedAnswerContent.test.js +0 -447
  72. package/force-app/main/default/lwc/quanticGeneratedAnswerCopyToClipboard/__tests__/quanticGeneratedAnswerCopyToClipboard.test.js +0 -129
  73. package/force-app/main/default/lwc/quanticGeneratedAnswerFollowUpInput/__tests__/quanticGeneratedAnswerFollowUpInput.test.js +0 -466
  74. package/force-app/main/default/lwc/quanticGeneratedAnswerStreamOfThought/__tests__/quanticGeneratedAnswerStreamOfThought.test.js +0 -402
  75. package/force-app/main/default/lwc/quanticGeneratedAnswerStreamOfThought/__tests__/stepsUtils.test.js +0 -118
  76. package/force-app/main/default/lwc/quanticGeneratedAnswerThread/__tests__/quanticGeneratedAnswerThread.test.js +0 -285
  77. package/force-app/main/default/lwc/quanticHeading/__tests__/quanticHeading.test.js +0 -71
  78. package/force-app/main/default/lwc/quanticHeadlessLoader/__tests__/quanticHeadlessLoader.test.js +0 -651
  79. package/force-app/main/default/lwc/quanticInsightInterface/__tests__/quanticInsightInterface.test.js +0 -194
  80. package/force-app/main/default/lwc/quanticInsightSummary/__tests__/quanticInsightSummary.test.js +0 -230
  81. package/force-app/main/default/lwc/quanticModal/__tests__/quanticModal.test.js +0 -205
  82. package/force-app/main/default/lwc/quanticNotifications/__tests__/quanticNotifications.test.js +0 -309
  83. package/force-app/main/default/lwc/quanticNotifications/e2e/fixture.ts +0 -62
  84. package/force-app/main/default/lwc/quanticNotifications/e2e/pageObject.ts +0 -55
  85. package/force-app/main/default/lwc/quanticNotifications/e2e/quanticNotifications.e2e.ts +0 -47
  86. package/force-app/main/default/lwc/quanticNumericFacet/__tests__/quanticNumericFacet.test.js +0 -953
  87. package/force-app/main/default/lwc/quanticNumericFacet/e2e/data.ts +0 -48
  88. package/force-app/main/default/lwc/quanticNumericFacet/e2e/fixture.ts +0 -75
  89. package/force-app/main/default/lwc/quanticNumericFacet/e2e/pageObject.ts +0 -59
  90. package/force-app/main/default/lwc/quanticNumericFacet/e2e/quanticNumericFacet.e2e.ts +0 -186
  91. package/force-app/main/default/lwc/quanticPager/__tests__/quanticPager.test.js +0 -430
  92. package/force-app/main/default/lwc/quanticPager/e2e/fixture.ts +0 -65
  93. package/force-app/main/default/lwc/quanticPager/e2e/pageObject.ts +0 -69
  94. package/force-app/main/default/lwc/quanticPager/e2e/quanticPager.e2e.ts +0 -106
  95. package/force-app/main/default/lwc/quanticPlaceholder/__tests__/quanticPlaceholder.test.js +0 -47
  96. package/force-app/main/default/lwc/quanticQuickviewContent/__tests__/data/defaultTestCase.json +0 -13
  97. package/force-app/main/default/lwc/quanticQuickviewContent/__tests__/data/youtubeTestCase.json +0 -14
  98. package/force-app/main/default/lwc/quanticQuickviewContent/__tests__/quanticQuickviewContent.test.js +0 -82
  99. package/force-app/main/default/lwc/quanticRadioButtonsGroup/__tests__/quanticRadioButtonsGroup.test.js +0 -273
  100. package/force-app/main/default/lwc/quanticRecentQueriesList/__tests__/quanticRecentQueriesList.test.js +0 -448
  101. package/force-app/main/default/lwc/quanticRecentQueriesList/e2e/fixture.ts +0 -43
  102. package/force-app/main/default/lwc/quanticRecentQueriesList/e2e/pageObject.ts +0 -55
  103. package/force-app/main/default/lwc/quanticRecentQueriesList/e2e/quanticRecentQueriesList.e2e.ts +0 -93
  104. package/force-app/main/default/lwc/quanticRecentResultsList/__tests__/quanticRecentResultsList.test.js +0 -516
  105. package/force-app/main/default/lwc/quanticRecentResultsList/e2e/fixture.ts +0 -43
  106. package/force-app/main/default/lwc/quanticRecentResultsList/e2e/pageObject.ts +0 -61
  107. package/force-app/main/default/lwc/quanticRecentResultsList/e2e/quanticRecentResultsList.e2e.ts +0 -48
  108. package/force-app/main/default/lwc/quanticRecommendationList/__tests__/quanticRecommendationList.test.js +0 -491
  109. package/force-app/main/default/lwc/quanticRecommendationList/e2e/fixture.ts +0 -36
  110. package/force-app/main/default/lwc/quanticRecommendationList/e2e/pageObject.ts +0 -52
  111. package/force-app/main/default/lwc/quanticRecommendationList/e2e/quanticRecommendationList.e2e.ts +0 -53
  112. package/force-app/main/default/lwc/quanticRefineModalContent/__tests__/quanticRefineModalContent.test.js +0 -747
  113. package/force-app/main/default/lwc/quanticRefineToggle/__tests__/quanticRefineToggle.test.js +0 -544
  114. package/force-app/main/default/lwc/quanticResultAction/__tests__/quanticResultAction.test.js +0 -262
  115. package/force-app/main/default/lwc/quanticResultActionBar/__tests__/quanticResultActionBar.test.js +0 -141
  116. package/force-app/main/default/lwc/quanticResultChildren/__tests__/quanticResultChildren.test.js +0 -340
  117. package/force-app/main/default/lwc/quanticResultCopyToClipboard/__tests__/quanticResultCopyToClipboard.test.js +0 -300
  118. package/force-app/main/default/lwc/quanticResultCopyToClipboard/e2e/fixture.ts +0 -49
  119. package/force-app/main/default/lwc/quanticResultCopyToClipboard/e2e/pageObject.ts +0 -49
  120. package/force-app/main/default/lwc/quanticResultCopyToClipboard/e2e/quanticResultCopyToClipboard.e2e.ts +0 -40
  121. package/force-app/main/default/lwc/quanticResultDate/__tests__/quanticResultDate.test.js +0 -144
  122. package/force-app/main/default/lwc/quanticResultField/__tests__/quanticResultField.test.js +0 -120
  123. package/force-app/main/default/lwc/quanticResultHighlightedTextField/__tests__/quanticResultHighlightedTextField.test.js +0 -209
  124. package/force-app/main/default/lwc/quanticResultLink/__tests__/quanticResultLink.test.js +0 -302
  125. package/force-app/main/default/lwc/quanticResultList/__tests__/quanticResultList.test.js +0 -342
  126. package/force-app/main/default/lwc/quanticResultList/e2e/fixture.ts +0 -70
  127. package/force-app/main/default/lwc/quanticResultList/e2e/pageObject.ts +0 -81
  128. package/force-app/main/default/lwc/quanticResultList/e2e/quanticResultList.e2e.ts +0 -69
  129. package/force-app/main/default/lwc/quanticResultMultiValueText/__tests__/quanticResultMultiValueText.test.js +0 -235
  130. package/force-app/main/default/lwc/quanticResultNumber/__tests__/quanticResultNumber.test.js +0 -144
  131. package/force-app/main/default/lwc/quanticResultPrintableUri/__tests__/quanticResultPrintableUri.test.js +0 -324
  132. package/force-app/main/default/lwc/quanticResultQuickview/__tests__/quanticResultQuickview.test.js +0 -308
  133. package/force-app/main/default/lwc/quanticResultQuickview/e2e/fixture.ts +0 -85
  134. package/force-app/main/default/lwc/quanticResultQuickview/e2e/pageObject.ts +0 -38
  135. package/force-app/main/default/lwc/quanticResultQuickview/e2e/quanticResultQuickView.e2e.ts +0 -66
  136. package/force-app/main/default/lwc/quanticResultTemplate/__tests__/quanticResultTemplate.test.js +0 -90
  137. package/force-app/main/default/lwc/quanticResultText/__tests__/quanticResultText.test.js +0 -155
  138. package/force-app/main/default/lwc/quanticResultsPerPage/__tests__/quanticResultsPerPage.test.js +0 -464
  139. package/force-app/main/default/lwc/quanticResultsPerPage/e2e/fixture.ts +0 -78
  140. package/force-app/main/default/lwc/quanticResultsPerPage/e2e/pageObject.ts +0 -85
  141. package/force-app/main/default/lwc/quanticResultsPerPage/e2e/quanticResultsPerPage.e2e.ts +0 -97
  142. package/force-app/main/default/lwc/quanticSearchBox/__tests__/quanticSearchBox.test.js +0 -487
  143. package/force-app/main/default/lwc/quanticSearchBox/e2e/fixture.ts +0 -86
  144. package/force-app/main/default/lwc/quanticSearchBox/e2e/pageObject.ts +0 -45
  145. package/force-app/main/default/lwc/quanticSearchBox/e2e/quanticSearchBox.e2e.ts +0 -159
  146. package/force-app/main/default/lwc/quanticSearchBoxInput/__tests__/quanticSearchBoxInput.test.js +0 -743
  147. package/force-app/main/default/lwc/quanticSearchBoxSuggestionsList/__tests__/quanticSearchBoxSuggestionsList.test.js +0 -571
  148. package/force-app/main/default/lwc/quanticSearchBoxSuggestionsList/e2e/fixture.ts +0 -113
  149. package/force-app/main/default/lwc/quanticSearchBoxSuggestionsList/e2e/pageObject.ts +0 -113
  150. package/force-app/main/default/lwc/quanticSearchBoxSuggestionsList/e2e/quanticSearchBoxSuggestionsList.e2e.ts +0 -282
  151. package/force-app/main/default/lwc/quanticSmartSnippet/__tests__/quanticSmartSnippet.test.js +0 -341
  152. package/force-app/main/default/lwc/quanticSmartSnippet/e2e/data.ts +0 -21
  153. package/force-app/main/default/lwc/quanticSmartSnippet/e2e/fixture.ts +0 -93
  154. package/force-app/main/default/lwc/quanticSmartSnippet/e2e/pageObject.ts +0 -196
  155. package/force-app/main/default/lwc/quanticSmartSnippet/e2e/quanticSmartSnippet.e2e.ts +0 -168
  156. package/force-app/main/default/lwc/quanticSmartSnippetAnswer/__tests__/quanticSmartSnippetAnswer.test.js +0 -126
  157. package/force-app/main/default/lwc/quanticSmartSnippetSource/__tests__/quanticSmartSnippetSource.test.js +0 -290
  158. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/__tests__/quanticSmartSnippetSuggestions.test.js +0 -329
  159. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/e2e/data.ts +0 -31
  160. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/e2e/fixture.ts +0 -95
  161. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/e2e/pageObject.ts +0 -160
  162. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/e2e/quanticSmartSnippetSuggestions.e2e.ts +0 -127
  163. package/force-app/main/default/lwc/quanticSort/__tests__/quanticSort.test.js +0 -416
  164. package/force-app/main/default/lwc/quanticSort/e2e/fixture.ts +0 -62
  165. package/force-app/main/default/lwc/quanticSort/e2e/pageObject.ts +0 -100
  166. package/force-app/main/default/lwc/quanticSort/e2e/quanticSort.e2e.ts +0 -86
  167. package/force-app/main/default/lwc/quanticSourceCitations/__tests__/quanticSourceCitations.test.js +0 -156
  168. package/force-app/main/default/lwc/quanticStandaloneSearchBox/__tests__/quanticStandaloneSearchBox.test.js +0 -387
  169. package/force-app/main/default/lwc/quanticStandaloneSearchBox/e2e/fixture.ts +0 -54
  170. package/force-app/main/default/lwc/quanticStandaloneSearchBox/e2e/pageObject.ts +0 -54
  171. package/force-app/main/default/lwc/quanticStandaloneSearchBox/e2e/quanticStandaloneSearchBox.e2e.ts +0 -72
  172. package/force-app/main/default/lwc/quanticStatefulButton/__tests__/quanticStatefulButton.test.js +0 -222
  173. package/force-app/main/default/lwc/quanticSummary/__tests__/quanticSummary.test.js +0 -244
  174. package/force-app/main/default/lwc/quanticTab/__tests__/quanticTab.test.js +0 -333
  175. package/force-app/main/default/lwc/quanticTab/e2e/fixture.ts +0 -60
  176. package/force-app/main/default/lwc/quanticTab/e2e/pageObject.ts +0 -68
  177. package/force-app/main/default/lwc/quanticTab/e2e/quanticTab.e2e.ts +0 -72
  178. package/force-app/main/default/lwc/quanticTabBar/__tests__/quanticTabBar.test.js +0 -331
  179. package/force-app/main/default/lwc/quanticTabBar/e2e/fixture.ts +0 -65
  180. package/force-app/main/default/lwc/quanticTabBar/e2e/pageObject.ts +0 -80
  181. package/force-app/main/default/lwc/quanticTabBar/e2e/quanticTabBar.e2e.ts +0 -172
  182. package/force-app/main/default/lwc/quanticThreadItem/__tests__/quanticThreadItem.test.js +0 -314
  183. package/force-app/main/default/lwc/quanticTimeframeFacet/__tests__/quanticTimeframeFacet.test.js +0 -1059
  184. package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/data.ts +0 -66
  185. package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/fixture.ts +0 -74
  186. package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/pageObject.ts +0 -43
  187. package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/quanticTimeframeFacet.e2e.ts +0 -184
  188. package/force-app/main/default/lwc/quanticTooltip/__tests__/quanticTooltip.test.js +0 -107
  189. package/force-app/main/default/lwc/quanticUserAction/__tests__/quanticUserAction.test.js +0 -427
  190. package/force-app/main/default/lwc/quanticUserActionsSession/__tests__/quanticUserActionsSession.test.js +0 -269
  191. package/force-app/main/default/lwc/quanticUserActionsTimeline/__tests__/data/userActionsState.json +0 -89
  192. package/force-app/main/default/lwc/quanticUserActionsTimeline/__tests__/quanticUserActionsTimeline.test.js +0 -511
  193. package/force-app/main/default/lwc/quanticUserActionsToggle/__tests__/quanticUserActionsToggle.test.js +0 -229
  194. package/force-app/main/default/lwc/quanticUserActionsToggle/e2e/data.ts +0 -32
  195. package/force-app/main/default/lwc/quanticUserActionsToggle/e2e/fixture.ts +0 -32
  196. package/force-app/main/default/lwc/quanticUserActionsToggle/e2e/pageObject.ts +0 -71
  197. package/force-app/main/default/lwc/quanticUserActionsToggle/e2e/quanticUserActionsToggle.e2e.ts +0 -39
  198. package/force-app/main/default/lwc/quanticUtils/__tests__/accessibilityUtils.test.js +0 -214
  199. package/force-app/main/default/lwc/quanticUtils/__tests__/citationAnchoringUtils.test.js +0 -84
  200. package/force-app/main/default/lwc/quanticUtils/__tests__/facetDependenciesUtils.test.js +0 -92
  201. package/force-app/main/default/lwc/quanticUtils/__tests__/facetStoreUtils.test.js +0 -86
  202. package/force-app/main/default/lwc/quanticUtils/__tests__/markdownUtils.test.js +0 -109
  203. package/force-app/main/default/lwc/quanticUtils/__tests__/quanticUtils.test.js +0 -233
  204. package/force-app/main/default/lwc/quanticUtils/__tests__/timeAndDateUtils.test.js +0 -22
  205. package/force-app/main/default/lwc/quanticViewedByCustomerBadge/__tests__/quanticViewedByCustomerBadge.test.js +0 -131
@@ -1,581 +0,0 @@
1
- import {
2
- getNavigateCalledWith,
3
- getGenerateUrlCalledWith,
4
- } from 'lightning/navigation';
5
- // @ts-ignore
6
- import {createElement} from 'lwc';
7
- import QuanticCitation from '../quanticCitation';
8
-
9
- const functionsMocks = {
10
- eventHandler: jest.fn((event) => event),
11
- exampleSelect: jest.fn(() => {}),
12
- exampleBeginDelayedSelect: jest.fn(() => {}),
13
- exampleCancelPendingSelect: jest.fn(() => {}),
14
- };
15
-
16
- const exampleCitation = {
17
- index: '1',
18
- id: '123',
19
- title: 'Example title 1',
20
- uri: 'https://example.com/',
21
- clickUri: 'https://example.com/',
22
- permanentid: '1',
23
- text: 'text 01',
24
- fields: {
25
- filetype: 'html',
26
- },
27
- };
28
-
29
- const exampleSalesforceCitation = {
30
- ...exampleCitation,
31
- fields: {
32
- filetype: 'SalesforceItem',
33
- sfid: '123',
34
- },
35
- };
36
- const exampleSalesforceKnowledgeArticleCitation = {
37
- ...exampleCitation,
38
- fields: {
39
- ...exampleCitation.fields,
40
- sfid: '123',
41
- sfkbid: 'foo',
42
- sfkavid: 'bar',
43
- },
44
- };
45
- const exampleSalesforceLink = 'https://www.example-salesforce.com';
46
- const urlFragment = '#:~:text=text%2001';
47
- const exampleCitationUrl = 'https://example.com/';
48
-
49
- const activeCitationLinkClass = 'citation__link--active';
50
- const activeCitationTitleClass = 'citation__title--active';
51
- const activeCitationIconClass = 'citation__icon--active';
52
- const testIconName = 'utility:attach';
53
-
54
- const defaultOptions = {
55
- citation: exampleCitation,
56
- interactiveCitation: {
57
- select: () => functionsMocks.exampleSelect(),
58
- beginDelayedSelect: () => functionsMocks.exampleBeginDelayedSelect(),
59
- cancelPendingSelect: () => functionsMocks.exampleCancelPendingSelect(),
60
- },
61
- disableCitationAnchoring: false,
62
- };
63
-
64
- const selectors = {
65
- citation: '.citation',
66
- citationLink: '.citation__link',
67
- citationTitle: '.citation__title',
68
- citationTooltip: 'c-quantic-tooltip',
69
- citationTooltipUrl: '[data-testid="citation__tooltip-uri"]',
70
- citationIcon: '.citation__icon',
71
- actionsSlot: 'slot[name="actions"]',
72
- };
73
-
74
- /**
75
- * Mocks the return value of the assignedNodes method.
76
- * @param {Array<Element>} assignedElements
77
- */
78
- function mockSlotAssignedNodes(assignedElements) {
79
- HTMLSlotElement.prototype.assignedNodes = function () {
80
- return assignedElements;
81
- };
82
- }
83
-
84
- function createTestComponent(options = defaultOptions, assignedElements = []) {
85
- mockSlotAssignedNodes(assignedElements);
86
-
87
- const element = createElement('c-quantic-citation', {
88
- is: QuanticCitation,
89
- });
90
-
91
- for (const [key, value] of Object.entries(options)) {
92
- element[key] = value;
93
- }
94
-
95
- document.body.appendChild(element);
96
- return element;
97
- }
98
-
99
- // Helper function to wait until the microtask queue is empty.
100
- async function flushPromises() {
101
- return Promise.resolve();
102
- }
103
-
104
- const bindingsMap = {
105
- contextmenu: functionsMocks.exampleSelect,
106
- click: functionsMocks.exampleSelect,
107
- mouseup: functionsMocks.exampleSelect,
108
- mousedown: functionsMocks.exampleSelect,
109
- touchstart: functionsMocks.exampleBeginDelayedSelect,
110
- touchend: functionsMocks.exampleCancelPendingSelect,
111
- };
112
-
113
- function setupEventDispatchTest(eventName) {
114
- const handler = (event) => {
115
- functionsMocks.eventHandler(event?.detail);
116
- document.removeEventListener(eventName, handler);
117
- };
118
- document.addEventListener(eventName, handler);
119
- }
120
-
121
- describe('c-quantic-citation', () => {
122
- function cleanup() {
123
- // The jsdom instance is shared across test cases in a single file so reset the DOM
124
- while (document.body.firstChild) {
125
- document.body.removeChild(document.body.firstChild);
126
- }
127
- jest.clearAllMocks();
128
- }
129
-
130
- afterEach(() => {
131
- cleanup();
132
- });
133
-
134
- it('should properly display the citation', async () => {
135
- const element = createTestComponent();
136
- await flushPromises();
137
-
138
- const citation = element.shadowRoot.querySelector(selectors.citation);
139
- const citationLink = element.shadowRoot.querySelector(
140
- selectors.citationLink
141
- );
142
- const citationTitle = element.shadowRoot.querySelector(
143
- selectors.citationTitle
144
- );
145
- const citationTooltip = element.shadowRoot.querySelector(
146
- selectors.citationTooltip
147
- );
148
-
149
- expect(citation).not.toBeNull();
150
- expect(citationLink).not.toBeNull();
151
- expect(citationTitle).not.toBeNull();
152
- expect(citationTooltip).not.toBeNull();
153
-
154
- expect(citationLink.href).toBe(`${exampleCitationUrl}${urlFragment}`);
155
- expect(citationLink.target).toBe('_blank');
156
- expect(citationTitle.textContent).toBe(exampleCitation.title);
157
- });
158
-
159
- describe('the analytics bindings of the link within the citation', () => {
160
- for (const [eventName, action] of Object.entries(bindingsMap)) {
161
- it(`should execute the proper action when the ${eventName} is triggered on the link`, async () => {
162
- const element = createTestComponent();
163
- await flushPromises();
164
-
165
- const link = element.shadowRoot.querySelector(selectors.citationLink);
166
- link.dispatchEvent(new CustomEvent(eventName));
167
-
168
- expect(action).toHaveBeenCalledTimes(1);
169
- });
170
- }
171
- });
172
-
173
- describe('hovering over the citation', () => {
174
- beforeAll(() => {
175
- jest.useFakeTimers();
176
- });
177
-
178
- afterAll(() => {
179
- jest.useRealTimers();
180
- });
181
-
182
- it('should display the citation tooltip after 200ms delay', async () => {
183
- const element = createTestComponent();
184
- await flushPromises();
185
-
186
- const citationLink = element.shadowRoot.querySelector(
187
- selectors.citationLink
188
- );
189
- const citationTooltip = element.shadowRoot.querySelector(
190
- selectors.citationTooltip
191
- );
192
-
193
- expect(citationLink).not.toBeNull();
194
- expect(citationTooltip).not.toBeNull();
195
-
196
- const showTooltipSpy = jest.spyOn(citationTooltip, 'showTooltip');
197
-
198
- await citationLink.dispatchEvent(
199
- new CustomEvent('mouseenter', {bubbles: true})
200
- );
201
- expect(showTooltipSpy).toHaveBeenCalledTimes(0);
202
- jest.advanceTimersByTime(200);
203
- expect(showTooltipSpy).toHaveBeenCalledTimes(1);
204
- });
205
-
206
- it('should dispatch a citation hover event after hovering over the the citation for more than 1200ms, 200ms delay before hover + 1000ms minimum hover duration', async () => {
207
- const element = createTestComponent();
208
- await flushPromises();
209
- setupEventDispatchTest('quantic__citationhover');
210
-
211
- const citationLink = element.shadowRoot.querySelector(
212
- selectors.citationLink
213
- );
214
- expect(citationLink).not.toBeNull();
215
-
216
- await citationLink.dispatchEvent(
217
- new CustomEvent('mouseenter', {bubbles: true})
218
- );
219
- // Wait for show delay - this triggers the tooltip to show and sets hoverStartTimestamp
220
- jest.advanceTimersByTime(200);
221
- // Now wait for minimum hover time
222
- jest.advanceTimersByTime(1000);
223
- await citationLink.dispatchEvent(
224
- new CustomEvent('mouseleave', {bubbles: true})
225
- );
226
- // Additional 200ms delay for the hide tooltip logic
227
- jest.advanceTimersByTime(200);
228
-
229
- expect(functionsMocks.eventHandler).toHaveBeenCalledTimes(1);
230
- expect(functionsMocks.eventHandler).toHaveBeenCalledWith({
231
- citationHoverTimeMs: 1100,
232
- });
233
- });
234
-
235
- it('should not dispatch a citation hover event after hovering over the citation for less than 1200ms', async () => {
236
- const element = createTestComponent();
237
- await flushPromises();
238
- setupEventDispatchTest('quantic__citationhover');
239
-
240
- const citationLink = element.shadowRoot.querySelector(
241
- selectors.citationLink
242
- );
243
- expect(citationLink).not.toBeNull();
244
-
245
- await citationLink.dispatchEvent(
246
- new CustomEvent('mouseenter', {bubbles: true})
247
- );
248
- jest.advanceTimersByTime(500);
249
- await citationLink.dispatchEvent(
250
- new CustomEvent('mouseleave', {bubbles: true})
251
- );
252
- // Additional 200ms delay for the new hide tooltip logic
253
- jest.advanceTimersByTime(200);
254
-
255
- expect(functionsMocks.eventHandler).toHaveBeenCalledTimes(0);
256
- });
257
-
258
- describe('when moving the cursor between the citation link and the tooltip', () => {
259
- it('should keep the tooltip displayed', async () => {
260
- const element = createTestComponent();
261
- await flushPromises();
262
-
263
- const citationLink = element.shadowRoot.querySelector(
264
- selectors.citationLink
265
- );
266
- const citationTooltip = element.shadowRoot.querySelector(
267
- selectors.citationTooltip
268
- );
269
-
270
- expect(citationLink).not.toBeNull();
271
- expect(citationTooltip).not.toBeNull();
272
-
273
- const hideTooltipSpy = jest.spyOn(citationTooltip, 'hideTooltip');
274
-
275
- // Hover over the citation - tooltip shows after 200ms delay
276
- await citationLink.dispatchEvent(
277
- new CustomEvent('mouseenter', {bubbles: true})
278
- );
279
- jest.advanceTimersByTime(200);
280
-
281
- // Move cursor to tooltip quickly (before hide delay expires)
282
- await citationLink.dispatchEvent(
283
- new CustomEvent('mouseleave', {bubbles: true})
284
- );
285
-
286
- await citationTooltip.dispatchEvent(
287
- new CustomEvent('mouseenter', {bubbles: true})
288
- );
289
-
290
- // Move cursor back to citation quickly (before hide delay expires)
291
- await citationTooltip.dispatchEvent(
292
- new CustomEvent('mouseleave', {bubbles: true})
293
- );
294
-
295
- await citationLink.dispatchEvent(
296
- new CustomEvent('mouseenter', {bubbles: true})
297
- );
298
-
299
- // Advance time beyond 100ms to see if tooltip is hidden
300
- jest.advanceTimersByTime(200);
301
-
302
- expect(hideTooltipSpy).toHaveBeenCalledTimes(0);
303
- });
304
- });
305
- });
306
-
307
- describe('when citation anchoring is enabled', () => {
308
- describe('when the citation source is of type Salesforce', () => {
309
- it('should not prevent default behavior and not call the navigation mixin to open the link', async () => {
310
- const element = createTestComponent({
311
- ...defaultOptions,
312
- citation: exampleSalesforceCitation,
313
- });
314
- await flushPromises();
315
-
316
- const link = element.shadowRoot.querySelector(selectors.citationLink);
317
- link.click();
318
-
319
- const {pageReference} = getNavigateCalledWith();
320
- expect(pageReference).toBeUndefined();
321
-
322
- expect(link.href).toBe(`${exampleSalesforceLink}/${urlFragment}`);
323
- expect(link.target).toBe('_blank');
324
- });
325
- });
326
-
327
- describe('when the citation filetype is HTML', () => {
328
- it('should generate a text fragment URL', async () => {
329
- const element = createTestComponent({
330
- ...defaultOptions,
331
- citation: {
332
- ...exampleCitation,
333
- fields: {
334
- ...exampleCitation.fields,
335
- filetype: 'html',
336
- },
337
- },
338
- });
339
- await flushPromises();
340
-
341
- const link = element.shadowRoot.querySelector(selectors.citationLink);
342
- expect(link.href).toBe(`${exampleCitationUrl}${urlFragment}`);
343
- });
344
- });
345
-
346
- describe('when the citation filetype is not HTML', () => {
347
- it('should not generate a text fragment URL', async () => {
348
- const element = createTestComponent({
349
- ...defaultOptions,
350
- citation: {
351
- ...exampleCitation,
352
- fields: {
353
- ...exampleCitation.fields,
354
- filetype: 'pdf',
355
- },
356
- },
357
- });
358
- await flushPromises();
359
-
360
- const link = element.shadowRoot.querySelector(selectors.citationLink);
361
- expect(link.href).toBe(exampleCitationUrl);
362
- });
363
- });
364
-
365
- describe('when the citation does not contain text', () => {
366
- it('should not generate a text fragment URL', async () => {
367
- const element = createTestComponent({
368
- ...defaultOptions,
369
- citation: {
370
- ...exampleCitation,
371
- text: '',
372
- },
373
- });
374
- await flushPromises();
375
-
376
- const link = element.shadowRoot.querySelector(selectors.citationLink);
377
- expect(link.href).toBe(exampleCitationUrl);
378
- });
379
- });
380
- });
381
-
382
- describe('when citation anchoring is disabled', () => {
383
- describe('when the citation source is not of type Salesforce', () => {
384
- it('should leave the hrefValue as the citation uri', async () => {
385
- const element = createTestComponent({
386
- ...defaultOptions,
387
- disableCitationAnchoring: true,
388
- });
389
- await flushPromises();
390
-
391
- const link = element.shadowRoot.querySelector(selectors.citationLink);
392
- expect(link.href).toBe(element.citation.uri);
393
- });
394
- });
395
-
396
- describe('when the citation source is of type Salesforce', () => {
397
- it('should call the navigation mixin to get the Salesforce record URL', async () => {
398
- const element = createTestComponent({
399
- ...defaultOptions,
400
- citation: exampleSalesforceCitation,
401
- disableCitationAnchoring: true,
402
- });
403
- await flushPromises();
404
-
405
- const link = element.shadowRoot.querySelector(selectors.citationLink);
406
- const {pageReference} = getGenerateUrlCalledWith();
407
-
408
- expect(pageReference.attributes.recordId).toBe(
409
- exampleSalesforceCitation.fields.sfid
410
- );
411
- expect(link.href).toBe(`${exampleSalesforceLink}/`);
412
- });
413
-
414
- it('should open the citation link inside Salesforce', async () => {
415
- const element = createTestComponent({
416
- ...defaultOptions,
417
- citation: exampleSalesforceCitation,
418
- disableCitationAnchoring: true,
419
- });
420
- await flushPromises();
421
-
422
- const link = element.shadowRoot.querySelector(selectors.citationLink);
423
- link.click();
424
-
425
- const {pageReference} = getNavigateCalledWith();
426
-
427
- expect(pageReference.attributes.recordId).toBe(
428
- exampleSalesforceCitation.fields.sfid
429
- );
430
- });
431
-
432
- it('should display the salesforce link inside the tooltip url', async () => {
433
- const element = createTestComponent({
434
- ...defaultOptions,
435
- citation: exampleSalesforceCitation,
436
- disableCitationAnchoring: true,
437
- });
438
- await flushPromises();
439
-
440
- const citationTooltipUrl = element.shadowRoot.querySelector(
441
- selectors.citationTooltipUrl
442
- );
443
- expect(citationTooltipUrl).not.toBeNull();
444
- expect(citationTooltipUrl.textContent).toBe(exampleSalesforceLink);
445
- });
446
-
447
- describe('when the result is a knowledge article', () => {
448
- it('should open the citation link inside Salesforce', async () => {
449
- const element = createTestComponent({
450
- ...defaultOptions,
451
- citation: exampleSalesforceKnowledgeArticleCitation,
452
- disableCitationAnchoring: true,
453
- });
454
- await flushPromises();
455
-
456
- const link = element.shadowRoot.querySelector(selectors.citationLink);
457
- link.click();
458
-
459
- const {pageReference} = getNavigateCalledWith();
460
-
461
- expect(pageReference.attributes.recordId).toBe(
462
- exampleSalesforceKnowledgeArticleCitation.fields.sfkavid
463
- );
464
- expect(link.href).toBe(`${exampleSalesforceLink}/`);
465
- });
466
- });
467
- });
468
- });
469
-
470
- describe('when the citation is active', () => {
471
- it('should apply the active styles to the citation link, title and icon', async () => {
472
- const element = createTestComponent({
473
- ...defaultOptions,
474
- citation: exampleCitation,
475
- isActive: true,
476
- iconName: testIconName,
477
- });
478
- await flushPromises();
479
-
480
- const citationLink = element.shadowRoot.querySelector(
481
- selectors.citationLink
482
- );
483
- const citationTitle = element.shadowRoot.querySelector(
484
- selectors.citationTitle
485
- );
486
- const citationIcon = element.shadowRoot.querySelector(
487
- selectors.citationIcon
488
- );
489
-
490
- expect(citationLink.classList).toContain(activeCitationLinkClass);
491
- expect(citationTitle.classList).toContain(activeCitationTitleClass);
492
- expect(citationIcon.classList).toContain(activeCitationIconClass);
493
- });
494
- });
495
-
496
- describe('when the citation is not active', () => {
497
- it('should not apply the active styles to the citation link, title and icon', async () => {
498
- const element = createTestComponent({
499
- ...defaultOptions,
500
- citation: exampleCitation,
501
- isActive: false,
502
- iconName: testIconName,
503
- });
504
- await flushPromises();
505
-
506
- const citationLink = element.shadowRoot.querySelector(
507
- selectors.citationLink
508
- );
509
- const citationTitle = element.shadowRoot.querySelector(
510
- selectors.citationTitle
511
- );
512
- const citationIcon = element.shadowRoot.querySelector(
513
- selectors.citationIcon
514
- );
515
-
516
- expect(citationLink.classList).not.toContain(activeCitationLinkClass);
517
- expect(citationTitle.classList).not.toContain(activeCitationTitleClass);
518
- expect(citationIcon.classList).not.toContain(activeCitationIconClass);
519
- });
520
- });
521
-
522
- describe('when an icon name is provided', () => {
523
- it('should set the icon name on the citation icon', async () => {
524
- const element = createTestComponent({
525
- ...defaultOptions,
526
- citation: exampleCitation,
527
- iconName: testIconName,
528
- });
529
- await flushPromises();
530
-
531
- const citationIcon = element.shadowRoot.querySelector('lightning-icon');
532
- expect(citationIcon.iconName).toBe(testIconName);
533
- });
534
- });
535
-
536
- describe('when no icon name is provided', () => {
537
- it('should not display any icon in the citation', async () => {
538
- const element = createTestComponent({
539
- ...defaultOptions,
540
- citation: exampleCitation,
541
- iconName: undefined,
542
- });
543
- await flushPromises();
544
-
545
- const citationIcon = element.shadowRoot.querySelector('lightning-icon');
546
- expect(citationIcon).toBeNull();
547
- });
548
- });
549
-
550
- describe('citation actions slot', () => {
551
- it('should render provided actions in the slot', async () => {
552
- const exampleAction = document.createElement('span');
553
- exampleAction.textContent = 'Test Action';
554
- const exampleAssignedElements = [exampleAction];
555
-
556
- const element = createTestComponent(
557
- defaultOptions,
558
- exampleAssignedElements
559
- );
560
- await flushPromises();
561
-
562
- const slot = element.shadowRoot.querySelector(selectors.actionsSlot);
563
- expect(slot).not.toBeNull();
564
-
565
- const assignedActions = slot.assignedNodes();
566
- expect(assignedActions).toHaveLength(1);
567
- expect(assignedActions[0].textContent).toBe('Test Action');
568
- });
569
-
570
- it('should have no assigned actions when none are provided', async () => {
571
- const element = createTestComponent();
572
- await flushPromises();
573
-
574
- const slot = element.shadowRoot.querySelector(selectors.actionsSlot);
575
- expect(slot).not.toBeNull();
576
-
577
- const assignedActions = element.querySelectorAll('[slot="actions"]');
578
- expect(assignedActions).toHaveLength(0);
579
- });
580
- });
581
- });