@coveo/quantic 3.44.1 → 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 (203) 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/quanticTabBar/quanticTabBar.js +148 -125
  4. package/force-app/main/default/staticresources/coveoheadless/case-assist/headless.js +16 -16
  5. package/force-app/main/default/staticresources/coveoheadless/headless.js +17 -17
  6. package/force-app/main/default/staticresources/coveoheadless/insight/headless.js +16 -16
  7. package/force-app/main/default/staticresources/coveoheadless/recommendation/headless.js +16 -16
  8. package/package.json +33 -31
  9. package/force-app/main/default/lwc/quanticAriaLive/__tests__/quanticAriaLive.test.js +0 -106
  10. package/force-app/main/default/lwc/quanticBreadcrumbManager/__tests__/quanticBreadcrumbManager.test.js +0 -752
  11. package/force-app/main/default/lwc/quanticBreadcrumbManager/e2e/data.ts +0 -130
  12. package/force-app/main/default/lwc/quanticBreadcrumbManager/e2e/fixture.ts +0 -87
  13. package/force-app/main/default/lwc/quanticBreadcrumbManager/e2e/pageObject.ts +0 -282
  14. package/force-app/main/default/lwc/quanticBreadcrumbManager/e2e/quanticBreadcrumbManager.e2e.ts +0 -208
  15. package/force-app/main/default/lwc/quanticCarousel/__tests__/quanticCarousel.test.js +0 -262
  16. package/force-app/main/default/lwc/quanticCaseClassification/__tests__/quanticCaseClassification.test.js +0 -819
  17. package/force-app/main/default/lwc/quanticCaseClassification/e2e/data.ts +0 -23
  18. package/force-app/main/default/lwc/quanticCaseClassification/e2e/fixture.ts +0 -51
  19. package/force-app/main/default/lwc/quanticCaseClassification/e2e/pageObject.ts +0 -152
  20. package/force-app/main/default/lwc/quanticCaseClassification/e2e/quanticCaseClassification.e2e.ts +0 -269
  21. package/force-app/main/default/lwc/quanticCategoryFacet/__tests__/quanticCategoryFacet.test.js +0 -1183
  22. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/data.ts +0 -91
  23. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/fixture.ts +0 -79
  24. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/pageObject.ts +0 -55
  25. package/force-app/main/default/lwc/quanticCategoryFacet/e2e/quanticCategoryFacet.e2e.ts +0 -219
  26. package/force-app/main/default/lwc/quanticCitation/__tests__/quanticCitation.test.js +0 -581
  27. package/force-app/main/default/lwc/quanticColoredResultBadge/__tests__/quanticColoredResultBadge.test.js +0 -212
  28. package/force-app/main/default/lwc/quanticDateFacet/__tests__/quanticDateFacet.test.js +0 -688
  29. package/force-app/main/default/lwc/quanticDateFacet/e2e/data.ts +0 -44
  30. package/force-app/main/default/lwc/quanticDateFacet/e2e/fixture.ts +0 -72
  31. package/force-app/main/default/lwc/quanticDateFacet/e2e/pageObject.ts +0 -27
  32. package/force-app/main/default/lwc/quanticDateFacet/e2e/quanticDateFacet.e2e.ts +0 -167
  33. package/force-app/main/default/lwc/quanticDidYouMean/__tests__/quanticDidYouMean.test.js +0 -348
  34. package/force-app/main/default/lwc/quanticDidYouMean/e2e/data.ts +0 -48
  35. package/force-app/main/default/lwc/quanticDidYouMean/e2e/fixture.ts +0 -84
  36. package/force-app/main/default/lwc/quanticDidYouMean/e2e/pageObject.ts +0 -173
  37. package/force-app/main/default/lwc/quanticDidYouMean/e2e/quanticDidYouMean.e2e.ts +0 -219
  38. package/force-app/main/default/lwc/quanticDocumentSuggestion/__tests__/quanticDocumentSuggestion.test.js +0 -404
  39. package/force-app/main/default/lwc/quanticDocumentSuggestion/e2e/fixture.ts +0 -38
  40. package/force-app/main/default/lwc/quanticDocumentSuggestion/e2e/pageObject.ts +0 -52
  41. package/force-app/main/default/lwc/quanticDocumentSuggestion/e2e/quanticDocumentSuggestion.e2e.ts +0 -102
  42. package/force-app/main/default/lwc/quanticFacet/__tests__/quanticFacet.test.js +0 -1105
  43. package/force-app/main/default/lwc/quanticFacet/e2e/data.ts +0 -62
  44. package/force-app/main/default/lwc/quanticFacet/e2e/fixture.ts +0 -78
  45. package/force-app/main/default/lwc/quanticFacet/e2e/pageObject.ts +0 -67
  46. package/force-app/main/default/lwc/quanticFacet/e2e/quanticFacet.e2e.ts +0 -242
  47. package/force-app/main/default/lwc/quanticFacetCaption/__tests__/quanticFacetCaption.test.js +0 -28
  48. package/force-app/main/default/lwc/quanticFacetManager/__tests__/quanticFacetManager.test.js +0 -178
  49. package/force-app/main/default/lwc/quanticFacetManager/e2e/data.ts +0 -59
  50. package/force-app/main/default/lwc/quanticFacetManager/e2e/fixture.ts +0 -75
  51. package/force-app/main/default/lwc/quanticFacetManager/e2e/pageObject.ts +0 -23
  52. package/force-app/main/default/lwc/quanticFacetManager/e2e/quanticFacetManager.e2e.ts +0 -82
  53. package/force-app/main/default/lwc/quanticFeedback/__tests__/quanticFeedback.test.js +0 -403
  54. package/force-app/main/default/lwc/quanticFeedbackModal/__tests__/quanticFeedbackModal.test.js +0 -448
  55. package/force-app/main/default/lwc/quanticFeedbackModalQna/__tests__/quanticFeedbackModalQna.test.js +0 -298
  56. package/force-app/main/default/lwc/quanticFoldedResultList/__tests__/quanticFoldedResultList.test.js +0 -323
  57. package/force-app/main/default/lwc/quanticFoldedResultList/e2e/fixture.ts +0 -74
  58. package/force-app/main/default/lwc/quanticFoldedResultList/e2e/pageObject.ts +0 -81
  59. package/force-app/main/default/lwc/quanticFoldedResultList/e2e/quanticFoldedResultList.e2e.ts +0 -69
  60. package/force-app/main/default/lwc/quanticGeneratedAnswer/__tests__/quanticGeneratedAnswer.test.js +0 -1575
  61. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/agentData.ts +0 -279
  62. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/data.ts +0 -56
  63. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/fixture-agent.ts +0 -77
  64. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/fixture.ts +0 -194
  65. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/pageObject.ts +0 -599
  66. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/quanticGeneratedAnswer.e2e.ts +0 -333
  67. package/force-app/main/default/lwc/quanticGeneratedAnswer/e2e/quanticGeneratedAnswerAgent.e2e.ts +0 -298
  68. package/force-app/main/default/lwc/quanticGeneratedAnswerBody/__tests__/quanticGeneratedAnswerBody.test.js +0 -418
  69. package/force-app/main/default/lwc/quanticGeneratedAnswerContent/__tests__/quanticGeneratedAnswerContent.test.js +0 -447
  70. package/force-app/main/default/lwc/quanticGeneratedAnswerCopyToClipboard/__tests__/quanticGeneratedAnswerCopyToClipboard.test.js +0 -129
  71. package/force-app/main/default/lwc/quanticGeneratedAnswerFollowUpInput/__tests__/quanticGeneratedAnswerFollowUpInput.test.js +0 -466
  72. package/force-app/main/default/lwc/quanticGeneratedAnswerStreamOfThought/__tests__/quanticGeneratedAnswerStreamOfThought.test.js +0 -402
  73. package/force-app/main/default/lwc/quanticGeneratedAnswerStreamOfThought/__tests__/stepsUtils.test.js +0 -118
  74. package/force-app/main/default/lwc/quanticGeneratedAnswerThread/__tests__/quanticGeneratedAnswerThread.test.js +0 -285
  75. package/force-app/main/default/lwc/quanticHeading/__tests__/quanticHeading.test.js +0 -71
  76. package/force-app/main/default/lwc/quanticHeadlessLoader/__tests__/quanticHeadlessLoader.test.js +0 -651
  77. package/force-app/main/default/lwc/quanticInsightInterface/__tests__/quanticInsightInterface.test.js +0 -194
  78. package/force-app/main/default/lwc/quanticInsightSummary/__tests__/quanticInsightSummary.test.js +0 -230
  79. package/force-app/main/default/lwc/quanticModal/__tests__/quanticModal.test.js +0 -205
  80. package/force-app/main/default/lwc/quanticNotifications/__tests__/quanticNotifications.test.js +0 -309
  81. package/force-app/main/default/lwc/quanticNotifications/e2e/fixture.ts +0 -62
  82. package/force-app/main/default/lwc/quanticNotifications/e2e/pageObject.ts +0 -55
  83. package/force-app/main/default/lwc/quanticNotifications/e2e/quanticNotifications.e2e.ts +0 -47
  84. package/force-app/main/default/lwc/quanticNumericFacet/__tests__/quanticNumericFacet.test.js +0 -953
  85. package/force-app/main/default/lwc/quanticNumericFacet/e2e/data.ts +0 -48
  86. package/force-app/main/default/lwc/quanticNumericFacet/e2e/fixture.ts +0 -75
  87. package/force-app/main/default/lwc/quanticNumericFacet/e2e/pageObject.ts +0 -59
  88. package/force-app/main/default/lwc/quanticNumericFacet/e2e/quanticNumericFacet.e2e.ts +0 -186
  89. package/force-app/main/default/lwc/quanticPager/__tests__/quanticPager.test.js +0 -430
  90. package/force-app/main/default/lwc/quanticPager/e2e/fixture.ts +0 -65
  91. package/force-app/main/default/lwc/quanticPager/e2e/pageObject.ts +0 -69
  92. package/force-app/main/default/lwc/quanticPager/e2e/quanticPager.e2e.ts +0 -106
  93. package/force-app/main/default/lwc/quanticPlaceholder/__tests__/quanticPlaceholder.test.js +0 -47
  94. package/force-app/main/default/lwc/quanticQuickviewContent/__tests__/data/defaultTestCase.json +0 -13
  95. package/force-app/main/default/lwc/quanticQuickviewContent/__tests__/data/youtubeTestCase.json +0 -14
  96. package/force-app/main/default/lwc/quanticQuickviewContent/__tests__/quanticQuickviewContent.test.js +0 -82
  97. package/force-app/main/default/lwc/quanticRadioButtonsGroup/__tests__/quanticRadioButtonsGroup.test.js +0 -273
  98. package/force-app/main/default/lwc/quanticRecentQueriesList/__tests__/quanticRecentQueriesList.test.js +0 -448
  99. package/force-app/main/default/lwc/quanticRecentQueriesList/e2e/fixture.ts +0 -43
  100. package/force-app/main/default/lwc/quanticRecentQueriesList/e2e/pageObject.ts +0 -55
  101. package/force-app/main/default/lwc/quanticRecentQueriesList/e2e/quanticRecentQueriesList.e2e.ts +0 -93
  102. package/force-app/main/default/lwc/quanticRecentResultsList/__tests__/quanticRecentResultsList.test.js +0 -516
  103. package/force-app/main/default/lwc/quanticRecentResultsList/e2e/fixture.ts +0 -43
  104. package/force-app/main/default/lwc/quanticRecentResultsList/e2e/pageObject.ts +0 -61
  105. package/force-app/main/default/lwc/quanticRecentResultsList/e2e/quanticRecentResultsList.e2e.ts +0 -48
  106. package/force-app/main/default/lwc/quanticRecommendationList/__tests__/quanticRecommendationList.test.js +0 -491
  107. package/force-app/main/default/lwc/quanticRecommendationList/e2e/fixture.ts +0 -36
  108. package/force-app/main/default/lwc/quanticRecommendationList/e2e/pageObject.ts +0 -52
  109. package/force-app/main/default/lwc/quanticRecommendationList/e2e/quanticRecommendationList.e2e.ts +0 -53
  110. package/force-app/main/default/lwc/quanticRefineModalContent/__tests__/quanticRefineModalContent.test.js +0 -747
  111. package/force-app/main/default/lwc/quanticRefineToggle/__tests__/quanticRefineToggle.test.js +0 -544
  112. package/force-app/main/default/lwc/quanticResultAction/__tests__/quanticResultAction.test.js +0 -262
  113. package/force-app/main/default/lwc/quanticResultActionBar/__tests__/quanticResultActionBar.test.js +0 -141
  114. package/force-app/main/default/lwc/quanticResultChildren/__tests__/quanticResultChildren.test.js +0 -340
  115. package/force-app/main/default/lwc/quanticResultCopyToClipboard/__tests__/quanticResultCopyToClipboard.test.js +0 -300
  116. package/force-app/main/default/lwc/quanticResultCopyToClipboard/e2e/fixture.ts +0 -49
  117. package/force-app/main/default/lwc/quanticResultCopyToClipboard/e2e/pageObject.ts +0 -49
  118. package/force-app/main/default/lwc/quanticResultCopyToClipboard/e2e/quanticResultCopyToClipboard.e2e.ts +0 -40
  119. package/force-app/main/default/lwc/quanticResultDate/__tests__/quanticResultDate.test.js +0 -144
  120. package/force-app/main/default/lwc/quanticResultField/__tests__/quanticResultField.test.js +0 -120
  121. package/force-app/main/default/lwc/quanticResultHighlightedTextField/__tests__/quanticResultHighlightedTextField.test.js +0 -209
  122. package/force-app/main/default/lwc/quanticResultLink/__tests__/quanticResultLink.test.js +0 -302
  123. package/force-app/main/default/lwc/quanticResultList/__tests__/quanticResultList.test.js +0 -342
  124. package/force-app/main/default/lwc/quanticResultList/e2e/fixture.ts +0 -70
  125. package/force-app/main/default/lwc/quanticResultList/e2e/pageObject.ts +0 -81
  126. package/force-app/main/default/lwc/quanticResultList/e2e/quanticResultList.e2e.ts +0 -69
  127. package/force-app/main/default/lwc/quanticResultMultiValueText/__tests__/quanticResultMultiValueText.test.js +0 -235
  128. package/force-app/main/default/lwc/quanticResultNumber/__tests__/quanticResultNumber.test.js +0 -144
  129. package/force-app/main/default/lwc/quanticResultPrintableUri/__tests__/quanticResultPrintableUri.test.js +0 -324
  130. package/force-app/main/default/lwc/quanticResultQuickview/__tests__/quanticResultQuickview.test.js +0 -308
  131. package/force-app/main/default/lwc/quanticResultQuickview/e2e/fixture.ts +0 -85
  132. package/force-app/main/default/lwc/quanticResultQuickview/e2e/pageObject.ts +0 -38
  133. package/force-app/main/default/lwc/quanticResultQuickview/e2e/quanticResultQuickView.e2e.ts +0 -66
  134. package/force-app/main/default/lwc/quanticResultTemplate/__tests__/quanticResultTemplate.test.js +0 -90
  135. package/force-app/main/default/lwc/quanticResultText/__tests__/quanticResultText.test.js +0 -155
  136. package/force-app/main/default/lwc/quanticResultsPerPage/__tests__/quanticResultsPerPage.test.js +0 -464
  137. package/force-app/main/default/lwc/quanticResultsPerPage/e2e/fixture.ts +0 -78
  138. package/force-app/main/default/lwc/quanticResultsPerPage/e2e/pageObject.ts +0 -85
  139. package/force-app/main/default/lwc/quanticResultsPerPage/e2e/quanticResultsPerPage.e2e.ts +0 -97
  140. package/force-app/main/default/lwc/quanticSearchBox/__tests__/quanticSearchBox.test.js +0 -487
  141. package/force-app/main/default/lwc/quanticSearchBox/e2e/fixture.ts +0 -86
  142. package/force-app/main/default/lwc/quanticSearchBox/e2e/pageObject.ts +0 -45
  143. package/force-app/main/default/lwc/quanticSearchBox/e2e/quanticSearchBox.e2e.ts +0 -159
  144. package/force-app/main/default/lwc/quanticSearchBoxInput/__tests__/quanticSearchBoxInput.test.js +0 -743
  145. package/force-app/main/default/lwc/quanticSearchBoxSuggestionsList/__tests__/quanticSearchBoxSuggestionsList.test.js +0 -571
  146. package/force-app/main/default/lwc/quanticSearchBoxSuggestionsList/e2e/fixture.ts +0 -113
  147. package/force-app/main/default/lwc/quanticSearchBoxSuggestionsList/e2e/pageObject.ts +0 -113
  148. package/force-app/main/default/lwc/quanticSearchBoxSuggestionsList/e2e/quanticSearchBoxSuggestionsList.e2e.ts +0 -282
  149. package/force-app/main/default/lwc/quanticSmartSnippet/__tests__/quanticSmartSnippet.test.js +0 -341
  150. package/force-app/main/default/lwc/quanticSmartSnippet/e2e/data.ts +0 -21
  151. package/force-app/main/default/lwc/quanticSmartSnippet/e2e/fixture.ts +0 -93
  152. package/force-app/main/default/lwc/quanticSmartSnippet/e2e/pageObject.ts +0 -196
  153. package/force-app/main/default/lwc/quanticSmartSnippet/e2e/quanticSmartSnippet.e2e.ts +0 -168
  154. package/force-app/main/default/lwc/quanticSmartSnippetAnswer/__tests__/quanticSmartSnippetAnswer.test.js +0 -126
  155. package/force-app/main/default/lwc/quanticSmartSnippetSource/__tests__/quanticSmartSnippetSource.test.js +0 -290
  156. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/__tests__/quanticSmartSnippetSuggestions.test.js +0 -329
  157. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/e2e/data.ts +0 -31
  158. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/e2e/fixture.ts +0 -95
  159. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/e2e/pageObject.ts +0 -160
  160. package/force-app/main/default/lwc/quanticSmartSnippetSuggestions/e2e/quanticSmartSnippetSuggestions.e2e.ts +0 -127
  161. package/force-app/main/default/lwc/quanticSort/__tests__/quanticSort.test.js +0 -416
  162. package/force-app/main/default/lwc/quanticSort/e2e/fixture.ts +0 -62
  163. package/force-app/main/default/lwc/quanticSort/e2e/pageObject.ts +0 -100
  164. package/force-app/main/default/lwc/quanticSort/e2e/quanticSort.e2e.ts +0 -86
  165. package/force-app/main/default/lwc/quanticSourceCitations/__tests__/quanticSourceCitations.test.js +0 -156
  166. package/force-app/main/default/lwc/quanticStandaloneSearchBox/__tests__/quanticStandaloneSearchBox.test.js +0 -387
  167. package/force-app/main/default/lwc/quanticStandaloneSearchBox/e2e/fixture.ts +0 -54
  168. package/force-app/main/default/lwc/quanticStandaloneSearchBox/e2e/pageObject.ts +0 -54
  169. package/force-app/main/default/lwc/quanticStandaloneSearchBox/e2e/quanticStandaloneSearchBox.e2e.ts +0 -72
  170. package/force-app/main/default/lwc/quanticStatefulButton/__tests__/quanticStatefulButton.test.js +0 -222
  171. package/force-app/main/default/lwc/quanticSummary/__tests__/quanticSummary.test.js +0 -244
  172. package/force-app/main/default/lwc/quanticTab/__tests__/quanticTab.test.js +0 -333
  173. package/force-app/main/default/lwc/quanticTab/e2e/fixture.ts +0 -60
  174. package/force-app/main/default/lwc/quanticTab/e2e/pageObject.ts +0 -68
  175. package/force-app/main/default/lwc/quanticTab/e2e/quanticTab.e2e.ts +0 -72
  176. package/force-app/main/default/lwc/quanticTabBar/__tests__/quanticTabBar.test.js +0 -331
  177. package/force-app/main/default/lwc/quanticTabBar/e2e/fixture.ts +0 -65
  178. package/force-app/main/default/lwc/quanticTabBar/e2e/pageObject.ts +0 -80
  179. package/force-app/main/default/lwc/quanticTabBar/e2e/quanticTabBar.e2e.ts +0 -172
  180. package/force-app/main/default/lwc/quanticThreadItem/__tests__/quanticThreadItem.test.js +0 -314
  181. package/force-app/main/default/lwc/quanticTimeframeFacet/__tests__/quanticTimeframeFacet.test.js +0 -1059
  182. package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/data.ts +0 -66
  183. package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/fixture.ts +0 -74
  184. package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/pageObject.ts +0 -43
  185. package/force-app/main/default/lwc/quanticTimeframeFacet/e2e/quanticTimeframeFacet.e2e.ts +0 -184
  186. package/force-app/main/default/lwc/quanticTooltip/__tests__/quanticTooltip.test.js +0 -107
  187. package/force-app/main/default/lwc/quanticUserAction/__tests__/quanticUserAction.test.js +0 -427
  188. package/force-app/main/default/lwc/quanticUserActionsSession/__tests__/quanticUserActionsSession.test.js +0 -269
  189. package/force-app/main/default/lwc/quanticUserActionsTimeline/__tests__/data/userActionsState.json +0 -89
  190. package/force-app/main/default/lwc/quanticUserActionsTimeline/__tests__/quanticUserActionsTimeline.test.js +0 -511
  191. package/force-app/main/default/lwc/quanticUserActionsToggle/__tests__/quanticUserActionsToggle.test.js +0 -229
  192. package/force-app/main/default/lwc/quanticUserActionsToggle/e2e/data.ts +0 -32
  193. package/force-app/main/default/lwc/quanticUserActionsToggle/e2e/fixture.ts +0 -32
  194. package/force-app/main/default/lwc/quanticUserActionsToggle/e2e/pageObject.ts +0 -71
  195. package/force-app/main/default/lwc/quanticUserActionsToggle/e2e/quanticUserActionsToggle.e2e.ts +0 -39
  196. package/force-app/main/default/lwc/quanticUtils/__tests__/accessibilityUtils.test.js +0 -214
  197. package/force-app/main/default/lwc/quanticUtils/__tests__/citationAnchoringUtils.test.js +0 -84
  198. package/force-app/main/default/lwc/quanticUtils/__tests__/facetDependenciesUtils.test.js +0 -92
  199. package/force-app/main/default/lwc/quanticUtils/__tests__/facetStoreUtils.test.js +0 -86
  200. package/force-app/main/default/lwc/quanticUtils/__tests__/markdownUtils.test.js +0 -109
  201. package/force-app/main/default/lwc/quanticUtils/__tests__/quanticUtils.test.js +0 -233
  202. package/force-app/main/default/lwc/quanticUtils/__tests__/timeAndDateUtils.test.js +0 -22
  203. 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
- });