@cccsaurora/howler-ui 3.1.0-dev.1655 → 3.1.0-dev.1657

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 (354) hide show
  1. package/api/action/execute.test.d.ts +1 -0
  2. package/api/action/execute.test.js +38 -0
  3. package/api/action/index.test.d.ts +1 -0
  4. package/api/action/index.test.js +59 -0
  5. package/api/action/operations.test.d.ts +1 -0
  6. package/api/action/operations.test.js +23 -0
  7. package/api/analytic/comments/index.test.d.ts +1 -0
  8. package/api/analytic/comments/index.test.js +43 -0
  9. package/api/analytic/comments/react.test.d.ts +1 -0
  10. package/api/analytic/comments/react.test.js +27 -0
  11. package/api/analytic/favourite.test.d.ts +1 -0
  12. package/api/analytic/favourite.test.js +20 -0
  13. package/api/analytic/index.test.d.ts +1 -0
  14. package/api/analytic/index.test.js +54 -0
  15. package/api/analytic/notebooks/index.test.d.ts +1 -0
  16. package/api/analytic/notebooks/index.test.js +31 -0
  17. package/api/analytic/owner.test.d.ts +1 -0
  18. package/api/analytic/owner.test.js +25 -0
  19. package/api/auth/apikey.test.d.ts +1 -0
  20. package/api/auth/apikey.test.js +34 -0
  21. package/api/auth/index.test.d.ts +1 -0
  22. package/api/auth/index.test.js +21 -0
  23. package/api/auth/login.test.d.ts +1 -0
  24. package/api/auth/login.test.js +53 -0
  25. package/api/configs/index.test.d.ts +1 -0
  26. package/api/configs/index.test.js +22 -0
  27. package/api/dossier/index.test.d.ts +1 -0
  28. package/api/dossier/index.test.js +57 -0
  29. package/api/help.test.d.ts +1 -0
  30. package/api/help.test.js +25 -0
  31. package/api/hit/assign.test.d.ts +1 -0
  32. package/api/hit/assign.test.js +22 -0
  33. package/api/hit/comments/index.test.d.ts +1 -0
  34. package/api/hit/comments/index.test.js +47 -0
  35. package/api/hit/comments/react.test.d.ts +1 -0
  36. package/api/hit/comments/react.test.js +27 -0
  37. package/api/hit/index.test.d.ts +1 -0
  38. package/api/hit/index.test.js +49 -0
  39. package/api/hit/labels.test.d.ts +1 -0
  40. package/api/hit/labels.test.js +29 -0
  41. package/api/hit/overwrite.test.d.ts +1 -0
  42. package/api/hit/overwrite.test.js +23 -0
  43. package/api/hit/transition.test.d.ts +1 -0
  44. package/api/hit/transition.test.js +24 -0
  45. package/api/index.test.d.ts +1 -0
  46. package/api/index.test.js +137 -0
  47. package/api/notebook/environments.test.d.ts +1 -0
  48. package/api/notebook/environments.test.js +22 -0
  49. package/api/notebook/index.test.d.ts +1 -0
  50. package/api/notebook/index.test.js +28 -0
  51. package/api/overview/index.test.d.ts +1 -0
  52. package/api/overview/index.test.js +42 -0
  53. package/api/search/fields/index.test.d.ts +1 -0
  54. package/api/search/fields/index.test.js +31 -0
  55. package/api/search/grouped/index.test.d.ts +1 -0
  56. package/api/search/grouped/index.test.js +18 -0
  57. package/api/search/grouped/user.test.d.ts +1 -0
  58. package/api/search/grouped/user.test.js +33 -0
  59. package/api/search/index.test.d.ts +1 -0
  60. package/api/search/index.test.js +41 -0
  61. package/api/search/user.test.d.ts +1 -0
  62. package/api/search/user.test.js +41 -0
  63. package/api/socket/index.test.d.ts +1 -0
  64. package/api/socket/index.test.js +15 -0
  65. package/api/template/index.test.d.ts +1 -0
  66. package/api/template/index.test.js +43 -0
  67. package/api/user/avatar/index.test.d.ts +1 -0
  68. package/api/user/avatar/index.test.js +22 -0
  69. package/api/user/groups.test.d.ts +1 -0
  70. package/api/user/groups.test.js +22 -0
  71. package/api/user/index.test.d.ts +1 -0
  72. package/api/user/index.test.js +37 -0
  73. package/api/user/whoami.test.d.ts +1 -0
  74. package/api/user/whoami.test.js +26 -0
  75. package/api/utils/createPermissionsApi.test.d.ts +1 -0
  76. package/api/utils/createPermissionsApi.test.js +30 -0
  77. package/api/v2/case/index.test.d.ts +1 -0
  78. package/api/v2/case/index.test.js +57 -0
  79. package/api/v2/case/items.test.d.ts +1 -0
  80. package/api/v2/case/items.test.js +37 -0
  81. package/api/v2/case/rules.test.d.ts +1 -0
  82. package/api/v2/case/rules.test.js +33 -0
  83. package/api/v2/fuzzy.test.d.ts +1 -0
  84. package/api/v2/fuzzy.test.js +30 -0
  85. package/api/v2/index.test.d.ts +1 -0
  86. package/api/v2/index.test.js +13 -0
  87. package/api/v2/search/index.test.d.ts +1 -0
  88. package/api/v2/search/index.test.js +42 -0
  89. package/api/view/index.test.d.ts +1 -0
  90. package/api/view/index.test.js +54 -0
  91. package/branding/AppBrand.test.d.ts +1 -0
  92. package/branding/AppBrand.test.js +29 -0
  93. package/components/app/drawers/ApiKeyDrawer.test.d.ts +1 -0
  94. package/components/app/drawers/ApiKeyDrawer.test.js +119 -0
  95. package/components/app/drawers/AssignUserDrawer.test.d.ts +1 -0
  96. package/components/app/drawers/AssignUserDrawer.test.js +75 -0
  97. package/components/app/hooks/useTitle.test.d.ts +1 -0
  98. package/components/app/hooks/useTitle.test.js +103 -0
  99. package/components/app/providers/AnalyticProvider.test.d.ts +1 -0
  100. package/components/app/providers/AnalyticProvider.test.js +58 -0
  101. package/components/app/providers/AppBarProvider.test.d.ts +1 -0
  102. package/components/app/providers/AppBarProvider.test.js +23 -0
  103. package/components/app/providers/AppDrawerProvider.test.d.ts +1 -0
  104. package/components/app/providers/AppDrawerProvider.test.js +42 -0
  105. package/components/app/providers/AvatarProvider.test.d.ts +1 -0
  106. package/components/app/providers/AvatarProvider.test.js +50 -0
  107. package/components/app/providers/CustomPluginProvider.test.d.ts +1 -0
  108. package/components/app/providers/CustomPluginProvider.test.js +29 -0
  109. package/components/app/providers/FavouritesProvider.test.d.ts +1 -0
  110. package/components/app/providers/FavouritesProvider.test.js +115 -0
  111. package/components/app/providers/FieldProvider.test.d.ts +1 -0
  112. package/components/app/providers/FieldProvider.test.js +28 -0
  113. package/components/app/providers/LocalStorageProvider.test.d.ts +1 -0
  114. package/components/app/providers/LocalStorageProvider.test.js +42 -0
  115. package/components/app/providers/ModalProvider.test.d.ts +1 -0
  116. package/components/app/providers/ModalProvider.test.js +35 -0
  117. package/components/app/providers/OverviewProvider.test.d.ts +1 -0
  118. package/components/app/providers/OverviewProvider.test.js +62 -0
  119. package/components/app/providers/RecordProvider.test.d.ts +1 -0
  120. package/components/app/providers/RecordProvider.test.js +66 -0
  121. package/components/app/providers/contextUtils.test.d.ts +1 -0
  122. package/components/app/providers/contextUtils.test.js +8 -0
  123. package/components/elements/Comment.test.d.ts +1 -0
  124. package/components/elements/Comment.test.js +109 -0
  125. package/components/elements/EditRow.test.d.ts +1 -0
  126. package/components/elements/EditRow.test.js +88 -0
  127. package/components/elements/MarkdownEditor.test.d.ts +1 -0
  128. package/components/elements/MarkdownEditor.test.js +75 -0
  129. package/components/elements/ObjectDetails.test.d.ts +1 -0
  130. package/components/elements/ObjectDetails.test.js +70 -0
  131. package/components/elements/PluginChip.d.ts +3 -2
  132. package/components/elements/PluginChip.js +2 -2
  133. package/components/elements/PluginChip.test.d.ts +1 -0
  134. package/components/elements/PluginChip.test.js +30 -0
  135. package/components/elements/ThemedEditor.test.d.ts +1 -0
  136. package/components/elements/ThemedEditor.test.js +66 -0
  137. package/components/elements/addons/layout/FlexPort.test.d.ts +1 -0
  138. package/components/elements/addons/layout/FlexPort.test.js +34 -0
  139. package/components/elements/addons/lists/TuiListBase.test.d.ts +1 -0
  140. package/components/elements/addons/lists/TuiListBase.test.js +44 -0
  141. package/components/elements/addons/lists/TuiListProvider.test.d.ts +1 -0
  142. package/components/elements/addons/lists/TuiListProvider.test.js +50 -0
  143. package/components/elements/addons/search/phrase/Phrase.test.d.ts +1 -0
  144. package/components/elements/addons/search/phrase/Phrase.test.js +77 -0
  145. package/components/elements/addons/search/phrase/PhraseLexer.test.d.ts +1 -0
  146. package/components/elements/addons/search/phrase/PhraseLexer.test.js +92 -0
  147. package/components/elements/addons/search/phrase/index.test.d.ts +1 -0
  148. package/components/elements/addons/search/phrase/index.test.js +20 -0
  149. package/components/elements/case/CaseCard.test.d.ts +1 -0
  150. package/components/elements/case/CaseCard.test.js +107 -0
  151. package/components/elements/display/ClassificationChip.test.d.ts +1 -0
  152. package/components/elements/display/ClassificationChip.test.js +60 -0
  153. package/components/elements/display/HandlebarsMarkdown.test.d.ts +1 -0
  154. package/components/elements/display/HandlebarsMarkdown.test.js +41 -0
  155. package/components/elements/display/HowlerAvatar.test.d.ts +1 -0
  156. package/components/elements/display/HowlerAvatar.test.js +54 -0
  157. package/components/elements/display/ItemManager.test.d.ts +1 -0
  158. package/components/elements/display/ItemManager.test.js +68 -0
  159. package/components/elements/display/UserPageWrapper.test.d.ts +1 -0
  160. package/components/elements/display/UserPageWrapper.test.js +22 -0
  161. package/components/elements/display/handlebars/helpers.test.d.ts +1 -0
  162. package/components/elements/display/handlebars/helpers.test.js +104 -0
  163. package/components/elements/display/icons/SocketBadge.test.d.ts +1 -0
  164. package/components/elements/display/icons/SocketBadge.test.js +49 -0
  165. package/components/elements/display/markdownPlugins/tabs.test.d.ts +1 -0
  166. package/components/elements/display/markdownPlugins/tabs.test.js +50 -0
  167. package/components/elements/hit/HitActions.js +1 -1
  168. package/components/elements/hit/HitActions.test.d.ts +1 -0
  169. package/components/elements/hit/HitActions.test.js +166 -0
  170. package/components/elements/hit/HitLabels.test.js +34 -3
  171. package/components/elements/hit/HitNotebooks.test.d.ts +1 -0
  172. package/components/elements/hit/HitNotebooks.test.js +138 -0
  173. package/components/elements/hit/HitSummary.test.d.ts +1 -0
  174. package/components/elements/hit/HitSummary.test.js +188 -0
  175. package/components/elements/hit/actions/ButtonActions.test.d.ts +1 -0
  176. package/components/elements/hit/actions/ButtonActions.test.js +51 -0
  177. package/components/elements/hit/actions/DropdownActions.test.d.ts +1 -0
  178. package/components/elements/hit/actions/DropdownActions.test.js +60 -0
  179. package/components/elements/hit/grid/AddColumnModal.test.d.ts +1 -0
  180. package/components/elements/hit/grid/AddColumnModal.test.js +88 -0
  181. package/components/elements/hit/grid/RecordTable.test.d.ts +1 -0
  182. package/components/elements/hit/grid/RecordTable.test.js +99 -0
  183. package/components/elements/record/RecordComments.test.d.ts +1 -0
  184. package/components/elements/record/RecordComments.test.js +151 -0
  185. package/components/elements/record/RecordContextMenu.js +3 -3
  186. package/components/elements/record/RecordRelated.test.d.ts +1 -0
  187. package/components/elements/record/RecordRelated.test.js +77 -0
  188. package/components/elements/record/RecordWorklog.test.d.ts +1 -0
  189. package/components/elements/record/RecordWorklog.test.js +77 -0
  190. package/components/hooks/useHitActions.test.d.ts +1 -0
  191. package/components/hooks/useHitActions.test.js +189 -0
  192. package/components/hooks/useMyApi.test.d.ts +1 -0
  193. package/components/hooks/useMyApi.test.js +31 -0
  194. package/components/hooks/useMyChart.test.d.ts +1 -0
  195. package/components/hooks/useMyChart.test.js +62 -0
  196. package/components/hooks/useMySearch.test.d.ts +1 -0
  197. package/components/hooks/useMySearch.test.js +96 -0
  198. package/components/hooks/useMySnackbar.test.d.ts +1 -0
  199. package/components/hooks/useMySnackbar.test.js +36 -0
  200. package/components/hooks/useMyUserFunctions.test.d.ts +1 -0
  201. package/components/hooks/useMyUserFunctions.test.js +142 -0
  202. package/components/hooks/useRecordSelection.test.d.ts +1 -0
  203. package/components/hooks/useRecordSelection.test.js +102 -0
  204. package/components/logins/Login.test.d.ts +1 -0
  205. package/components/logins/Login.test.js +67 -0
  206. package/components/logins/hooks/useLogin.test.d.ts +1 -0
  207. package/components/logins/hooks/useLogin.test.js +142 -0
  208. package/components/routes/action/shared/OperationEntry.test.d.ts +1 -0
  209. package/components/routes/action/shared/OperationEntry.test.js +80 -0
  210. package/components/routes/action/shared/OperationStep.test.d.ts +1 -0
  211. package/components/routes/action/shared/OperationStep.test.js +84 -0
  212. package/components/routes/action/useMyActionFunctions.test.d.ts +1 -0
  213. package/components/routes/action/useMyActionFunctions.test.js +217 -0
  214. package/components/routes/action/view/ActionDetails.test.d.ts +1 -0
  215. package/components/routes/action/view/ActionDetails.test.js +170 -0
  216. package/components/routes/action/view/ActionSearch.test.d.ts +1 -0
  217. package/components/routes/action/view/ActionSearch.test.js +185 -0
  218. package/components/routes/action/view/Integrations.test.d.ts +1 -0
  219. package/components/routes/action/view/Integrations.test.js +62 -0
  220. package/components/routes/admin/users/UserEditor.test.d.ts +1 -0
  221. package/components/routes/admin/users/UserEditor.test.js +74 -0
  222. package/components/routes/admin/users/UserSearch.test.d.ts +1 -0
  223. package/components/routes/admin/users/UserSearch.test.js +146 -0
  224. package/components/routes/advanced/QueryBuilder.test.d.ts +1 -0
  225. package/components/routes/advanced/QueryBuilder.test.js +185 -0
  226. package/components/routes/advanced/QueryEditor.test.d.ts +1 -0
  227. package/components/routes/advanced/QueryEditor.test.js +130 -0
  228. package/components/routes/advanced/completionProviders.test.d.ts +1 -0
  229. package/components/routes/advanced/completionProviders.test.js +144 -0
  230. package/components/routes/analytics/AnalyticComments.test.d.ts +1 -0
  231. package/components/routes/analytics/AnalyticComments.test.js +156 -0
  232. package/components/routes/analytics/AnalyticDetails.test.d.ts +1 -0
  233. package/components/routes/analytics/AnalyticDetails.test.js +161 -0
  234. package/components/routes/analytics/AnalyticNotebooks.test.d.ts +1 -0
  235. package/components/routes/analytics/AnalyticNotebooks.test.js +112 -0
  236. package/components/routes/analytics/AnalyticOverview.test.d.ts +1 -0
  237. package/components/routes/analytics/AnalyticOverview.test.js +97 -0
  238. package/components/routes/analytics/AnalyticOverviews.test.d.ts +1 -0
  239. package/components/routes/analytics/AnalyticOverviews.test.js +70 -0
  240. package/components/routes/analytics/AnalyticSearch.test.d.ts +1 -0
  241. package/components/routes/analytics/AnalyticSearch.test.js +167 -0
  242. package/components/routes/analytics/AnalyticTemplates.test.d.ts +1 -0
  243. package/components/routes/analytics/AnalyticTemplates.test.js +63 -0
  244. package/components/routes/analytics/TriageSettings.test.d.ts +1 -0
  245. package/components/routes/analytics/TriageSettings.test.js +89 -0
  246. package/components/routes/analytics/widgets/Assessment.test.d.ts +1 -0
  247. package/components/routes/analytics/widgets/Assessment.test.js +45 -0
  248. package/components/routes/analytics/widgets/Created.test.d.ts +1 -0
  249. package/components/routes/analytics/widgets/Created.test.js +41 -0
  250. package/components/routes/analytics/widgets/DetectionStatus.test.d.ts +1 -0
  251. package/components/routes/analytics/widgets/DetectionStatus.test.js +21 -0
  252. package/components/routes/analytics/widgets/Stacked.test.d.ts +1 -0
  253. package/components/routes/analytics/widgets/Stacked.test.js +51 -0
  254. package/components/routes/cases/Cases.test.d.ts +1 -0
  255. package/components/routes/cases/Cases.test.js +132 -0
  256. package/components/routes/dossiers/Dossiers.test.d.ts +1 -0
  257. package/components/routes/dossiers/Dossiers.test.js +150 -0
  258. package/components/routes/help/ActionDocumentation.test.d.ts +1 -0
  259. package/components/routes/help/ActionDocumentation.test.js +58 -0
  260. package/components/routes/help/ActionIntroductionDocumentation.test.d.ts +1 -0
  261. package/components/routes/help/ActionIntroductionDocumentation.test.js +68 -0
  262. package/components/routes/help/ApiDocumentation.test.d.ts +1 -0
  263. package/components/routes/help/ApiDocumentation.test.js +79 -0
  264. package/components/routes/help/AuthDocumentation.test.d.ts +1 -0
  265. package/components/routes/help/AuthDocumentation.test.js +34 -0
  266. package/components/routes/help/ClientDocumentation.test.d.ts +1 -0
  267. package/components/routes/help/ClientDocumentation.test.js +34 -0
  268. package/components/routes/help/Help.test.d.ts +1 -0
  269. package/components/routes/help/Help.test.js +57 -0
  270. package/components/routes/help/HitBannerDocumentation.test.d.ts +1 -0
  271. package/components/routes/help/HitBannerDocumentation.test.js +25 -0
  272. package/components/routes/help/HitDocumentation.test.d.ts +1 -0
  273. package/components/routes/help/HitDocumentation.test.js +53 -0
  274. package/components/routes/help/HitLabelsDocumentation.test.d.ts +1 -0
  275. package/components/routes/help/HitLabelsDocumentation.test.js +17 -0
  276. package/components/routes/help/HitLinksDocumentation.test.d.ts +1 -0
  277. package/components/routes/help/HitLinksDocumentation.test.js +27 -0
  278. package/components/routes/help/HitSchemaDocumentation.test.d.ts +1 -0
  279. package/components/routes/help/HitSchemaDocumentation.test.js +67 -0
  280. package/components/routes/help/NotebookDocumentation.test.d.ts +1 -0
  281. package/components/routes/help/NotebookDocumentation.test.js +34 -0
  282. package/components/routes/help/OverviewDocumentation.test.d.ts +1 -0
  283. package/components/routes/help/OverviewDocumentation.test.js +26 -0
  284. package/components/routes/help/RetentionDocumentation.test.d.ts +1 -0
  285. package/components/routes/help/RetentionDocumentation.test.js +61 -0
  286. package/components/routes/help/SearchDocumentation.test.d.ts +1 -0
  287. package/components/routes/help/SearchDocumentation.test.js +65 -0
  288. package/components/routes/help/TemplateDocumentation.test.d.ts +1 -0
  289. package/components/routes/help/TemplateDocumentation.test.js +58 -0
  290. package/components/routes/help/ViewDocumentation.test.d.ts +1 -0
  291. package/components/routes/help/ViewDocumentation.test.js +34 -0
  292. package/components/routes/help/components/HelpTabs.test.d.ts +1 -0
  293. package/components/routes/help/components/HelpTabs.test.js +26 -0
  294. package/components/routes/hits/search/InformationPane.test.d.ts +1 -0
  295. package/components/routes/hits/search/InformationPane.test.js +251 -0
  296. package/components/routes/hits/search/RecordBrowser.test.js +179 -51
  297. package/components/routes/hits/search/RecordQuery.test.d.ts +1 -0
  298. package/components/routes/hits/search/RecordQuery.test.js +117 -0
  299. package/components/routes/hits/search/SearchPane.test.d.ts +1 -0
  300. package/components/routes/hits/search/SearchPane.test.js +178 -0
  301. package/components/routes/hits/search/grid/RecordGrid.test.d.ts +1 -0
  302. package/components/routes/hits/search/grid/RecordGrid.test.js +107 -0
  303. package/components/routes/hits/search/shared/CustomSort.test.d.ts +1 -0
  304. package/components/routes/hits/search/shared/CustomSort.test.js +77 -0
  305. package/components/routes/hits/search/shared/HitFilter.test.d.ts +1 -0
  306. package/components/routes/hits/search/shared/HitFilter.test.js +83 -0
  307. package/components/routes/hits/search/shared/HitSort.test.d.ts +1 -0
  308. package/components/routes/hits/search/shared/HitSort.test.js +61 -0
  309. package/components/routes/hits/search/shared/LayoutSettings.test.d.ts +1 -0
  310. package/components/routes/hits/search/shared/LayoutSettings.test.js +84 -0
  311. package/components/routes/hits/search/shared/SearchSpan.test.d.ts +1 -0
  312. package/components/routes/hits/search/shared/SearchSpan.test.js +84 -0
  313. package/components/routes/home/AnalyticCard.test.d.ts +1 -0
  314. package/components/routes/home/AnalyticCard.test.js +87 -0
  315. package/components/routes/home/index.test.d.ts +1 -0
  316. package/components/routes/home/index.test.js +190 -0
  317. package/components/routes/overviews/OverviewViewer.test.d.ts +1 -0
  318. package/components/routes/overviews/OverviewViewer.test.js +151 -0
  319. package/components/routes/overviews/Overviews.test.d.ts +1 -0
  320. package/components/routes/overviews/Overviews.test.js +154 -0
  321. package/components/routes/settings/AdminSection.test.d.ts +1 -0
  322. package/components/routes/settings/AdminSection.test.js +26 -0
  323. package/components/routes/settings/LocalSection.test.d.ts +1 -0
  324. package/components/routes/settings/LocalSection.test.js +75 -0
  325. package/components/routes/settings/ProfileSection.test.d.ts +1 -0
  326. package/components/routes/settings/ProfileSection.test.js +95 -0
  327. package/components/routes/settings/SecuritySection.test.d.ts +1 -0
  328. package/components/routes/settings/SecuritySection.test.js +90 -0
  329. package/components/routes/settings/Settings.test.d.ts +1 -0
  330. package/components/routes/settings/Settings.test.js +60 -0
  331. package/components/routes/templates/TemplateEditor.test.d.ts +1 -0
  332. package/components/routes/templates/TemplateEditor.test.js +94 -0
  333. package/components/routes/templates/TemplateViewer.test.d.ts +1 -0
  334. package/components/routes/templates/TemplateViewer.test.js +145 -0
  335. package/components/routes/templates/Templates.test.d.ts +1 -0
  336. package/components/routes/templates/Templates.test.js +165 -0
  337. package/components/routes/views/ViewComposer.test.d.ts +1 -0
  338. package/components/routes/views/ViewComposer.test.js +320 -0
  339. package/components/routes/views/Views.test.d.ts +1 -0
  340. package/components/routes/views/Views.test.js +247 -0
  341. package/package.json +1 -1
  342. package/plugins/HowlerPlugin.test.d.ts +1 -0
  343. package/plugins/HowlerPlugin.test.js +103 -0
  344. package/plugins/clue/components/ClueChip.js +2 -2
  345. package/plugins/clue/helpers.test.d.ts +1 -0
  346. package/plugins/clue/helpers.test.js +100 -0
  347. package/plugins/store.test.d.ts +1 -0
  348. package/plugins/store.test.js +53 -0
  349. package/utils/classificationParser.test.d.ts +1 -0
  350. package/utils/classificationParser.test.js +199 -0
  351. package/utils/constants.test.d.ts +1 -0
  352. package/utils/constants.test.js +62 -0
  353. package/utils/typeUtils.test.d.ts +1 -0
  354. package/utils/typeUtils.test.js +22 -0
@@ -0,0 +1,199 @@
1
+ /// <reference types="vitest" />
2
+ import { afterEach, describe, expect, it, vi } from 'vitest';
3
+ import { applyClassificationRules, canSeeGroups, canSeeRequired, defaultClassificationValidator, defaultDisabled, defaultParts, getLevelText, getMaxClassification, getParts, isAccessible, normalizedClassification } from './classificationParser';
4
+ const classificationDefinition = {
5
+ RESTRICTED: 'S//REL TO CAN',
6
+ UNRESTRICTED: 'U',
7
+ access_req_aliases: {
8
+ CEO: ['CEO'],
9
+ OC: ['ORCON'],
10
+ ORCON: ['ORCON']
11
+ },
12
+ access_req_map_lts: {
13
+ 'CANADIAN EYES ONLY': 'CEO',
14
+ 'ORIGINATOR CONTROLLED': 'ORCON'
15
+ },
16
+ access_req_map_stl: {
17
+ CEO: 'CANADIAN EYES ONLY',
18
+ ORCON: 'ORIGINATOR CONTROLLED'
19
+ },
20
+ description: {},
21
+ dynamic_groups: false,
22
+ dynamic_groups_type: 'group',
23
+ enforce: true,
24
+ groups_aliases: {
25
+ 'CANADA ONLY': ['CAN'],
26
+ FVEY: ['CAN', 'USA']
27
+ },
28
+ groups_auto_select: ['FVEY'],
29
+ groups_auto_select_short: ['FVEY'],
30
+ groups_map_lts: {
31
+ CANADA: 'CAN',
32
+ 'FIVE EYES': 'FVEY',
33
+ 'UNITED STATES': 'USA'
34
+ },
35
+ groups_map_stl: {
36
+ CAN: 'CANADA',
37
+ FVEY: 'FIVE EYES',
38
+ USA: 'UNITED STATES'
39
+ },
40
+ invalid_mode: false,
41
+ levels_aliases: {
42
+ PUBLIC: 'U'
43
+ },
44
+ levels_map: {
45
+ '0': 'U',
46
+ '1': 'C',
47
+ '2': 'S',
48
+ C: '1',
49
+ S: '2',
50
+ U: '0'
51
+ },
52
+ levels_map_lts: {
53
+ CONFIDENTIAL: 'C',
54
+ SECRET: 'S',
55
+ UNCLASSIFIED: 'U'
56
+ },
57
+ levels_map_stl: {
58
+ C: 'CONFIDENTIAL',
59
+ S: 'SECRET',
60
+ U: 'UNCLASSIFIED'
61
+ },
62
+ levels_styles_map: {},
63
+ original_definition: {
64
+ dynamic_groups: false,
65
+ dynamic_groups_type: 'group',
66
+ enforce: true,
67
+ groups: [],
68
+ levels: [],
69
+ required: [],
70
+ restricted: 'S//REL TO CAN',
71
+ subgroups: [],
72
+ unrestricted: 'U'
73
+ },
74
+ params_map: {
75
+ ALPHA: {
76
+ require_group: 'CAN'
77
+ },
78
+ BRAVO: {
79
+ limited_to_group: 'USA'
80
+ },
81
+ CAN: {
82
+ solitary_display_name: 'CANADA ONLY'
83
+ },
84
+ CEO: {
85
+ is_required_group: true,
86
+ require_lvl: 2
87
+ }
88
+ },
89
+ subgroups_aliases: {
90
+ ALPHA: ['ALPHA'],
91
+ BRAVO: ['BRAVO']
92
+ },
93
+ subgroups_auto_select: ['ALPHA TEAM'],
94
+ subgroups_auto_select_short: ['ALPHA'],
95
+ subgroups_map_lts: {
96
+ 'ALPHA TEAM': 'ALPHA',
97
+ 'BRAVO TEAM': 'BRAVO'
98
+ },
99
+ subgroups_map_stl: {
100
+ ALPHA: 'ALPHA TEAM',
101
+ BRAVO: 'BRAVO TEAM'
102
+ }
103
+ };
104
+ const cloneParts = (parts) => ({
105
+ lvlIdx: parts.lvlIdx,
106
+ lvl: parts.lvl,
107
+ req: [...parts.req],
108
+ groups: [...parts.groups],
109
+ subgroups: [...parts.subgroups]
110
+ });
111
+ afterEach(() => {
112
+ vi.restoreAllMocks();
113
+ });
114
+ describe('classificationParser', () => {
115
+ it('exposes stable empty defaults for parser state', () => {
116
+ expect(defaultParts).toEqual({ lvlIdx: 0, lvl: '', req: [], groups: [], subgroups: [] });
117
+ expect(defaultDisabled).toEqual({ groups: [], levels: [] });
118
+ expect(defaultClassificationValidator).toEqual({ disabled: defaultDisabled, parts: defaultParts });
119
+ });
120
+ it('returns the short or long level label and reports unknown levels', () => {
121
+ const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => undefined);
122
+ expect(getLevelText(1, classificationDefinition, 'short', false)).toBe('C');
123
+ expect(getLevelText(1, classificationDefinition, 'long', false)).toBe('CONFIDENTIAL');
124
+ expect(getLevelText(99, classificationDefinition, 'short', false)).toBe('INVALID');
125
+ expect(errorSpy).toHaveBeenCalledWith("[classificationParser] Classification level number '99' was not found in your classification definition.");
126
+ });
127
+ it('parses levels, required markings, groups, and subgroups from short classifications', () => {
128
+ const parts = getParts('C//OC/REL TO CAN, USA/ALPHA', classificationDefinition, 'short', false);
129
+ expect(parts).toEqual({
130
+ lvlIdx: 1,
131
+ lvl: 'C',
132
+ req: ['ORCON'],
133
+ groups: ['CAN', 'USA'],
134
+ subgroups: ['ALPHA']
135
+ });
136
+ });
137
+ it('parses long-form classifications into long-form display values', () => {
138
+ const parts = getParts('CONFIDENTIAL//ORIGINATOR CONTROLLED/REL TO CANADA/ALPHA TEAM', classificationDefinition, 'long', false);
139
+ expect(parts).toEqual({
140
+ lvlIdx: 1,
141
+ lvl: 'CONFIDENTIAL',
142
+ req: ['ORIGINATOR CONTROLLED'],
143
+ groups: ['CANADA'],
144
+ subgroups: ['ALPHA TEAM']
145
+ });
146
+ });
147
+ it('checks required and group access using set semantics', () => {
148
+ expect(canSeeRequired(['ORCON', 'CEO'], ['ORCON'])).toBe(true);
149
+ expect(canSeeRequired(['ORCON'], ['ORCON', 'CEO'])).toBe(false);
150
+ expect(canSeeGroups(['CAN', 'USA'], ['USA'])).toBe(true);
151
+ expect(canSeeGroups(['CAN'], ['USA'])).toBe(false);
152
+ });
153
+ it('normalizes classifications with level escalation, solitary group names, and required groups', () => {
154
+ const normalized = normalizedClassification(cloneParts({
155
+ lvlIdx: 1,
156
+ lvl: 'C',
157
+ req: ['CEO'],
158
+ groups: [],
159
+ subgroups: ['ALPHA']
160
+ }), classificationDefinition, 'short', false, true);
161
+ expect(normalized).toBe('S//CEO/CANADA ONLY/ALPHA');
162
+ });
163
+ it('returns the unrestricted label when enforcement is disabled or invalid mode is active', () => {
164
+ expect(normalizedClassification(cloneParts(defaultParts), { ...classificationDefinition, enforce: false }, 'short', false)).toBe('U');
165
+ expect(normalizedClassification(cloneParts(defaultParts), { ...classificationDefinition, invalid_mode: true }, 'short', false)).toBe('U');
166
+ });
167
+ it('applies classification rules to raise levels, add required groups, and disable incompatible options', () => {
168
+ const result = applyClassificationRules(cloneParts({
169
+ lvlIdx: 0,
170
+ lvl: 'U',
171
+ req: ['CEO'],
172
+ groups: ['CAN', 'USA'],
173
+ subgroups: ['BRAVO']
174
+ }), classificationDefinition, 'long', false);
175
+ expect(result.parts.lvlIdx).toBe(2);
176
+ expect(result.parts.lvl).toBe('SECRET');
177
+ expect(result.parts.req).toEqual(['CANADIAN EYES ONLY']);
178
+ expect(result.parts.groups).toEqual(['UNITED STATES']);
179
+ expect(result.parts.subgroups).toEqual(['BRAVO TEAM']);
180
+ expect(result.disabled.levels).toEqual(['CONFIDENTIAL', 'UNCLASSIFIED']);
181
+ expect(result.disabled.groups).toContain('CANADA');
182
+ expect(result.disabled.groups).toContain('FIVE EYES');
183
+ });
184
+ it('returns the most restrictive classification across two inputs', () => {
185
+ const output = getMaxClassification('C//ORCON/REL TO CAN/ALPHA', 'S//REL TO CAN', classificationDefinition, 'short', false);
186
+ expect(output).toBe('S//ORCON//REL CAN, FVEY/ALPHA');
187
+ });
188
+ it('falls back to unrestricted max classification when enforcement is disabled', () => {
189
+ expect(getMaxClassification('C//REL TO CAN', 'S//REL TO USA', { ...classificationDefinition, enforce: false }, 'short', false)).toBe('U');
190
+ });
191
+ it('checks accessibility using level, required, group, and subgroup restrictions', () => {
192
+ expect(isAccessible('S//ORCON/REL TO CAN/ALPHA', 'C//ORCON/REL TO CAN/ALPHA', classificationDefinition, true)).toBe(true);
193
+ expect(isAccessible('C//REL TO CAN', 'S//REL TO CAN', classificationDefinition, true)).toBe(false);
194
+ expect(isAccessible('S//REL TO USA', 'S//REL TO CAN', classificationDefinition, true)).toBe(false);
195
+ expect(isAccessible('C//REL TO CAN', 'S//REL TO CAN', classificationDefinition, false)).toBe(true);
196
+ expect(isAccessible('S//REL TO CAN', '', classificationDefinition, true)).toBe(true);
197
+ expect(isAccessible('S//REL TO CAN', 'C//REL TO CAN', { ...classificationDefinition, invalid_mode: true }, true)).toBe(false);
198
+ });
199
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,62 @@
1
+ import { afterEach, describe, expect, it, vi } from 'vitest';
2
+ const loadConstants = async (isoDate = '2024-01-02T03:15:00Z') => {
3
+ vi.useFakeTimers();
4
+ vi.setSystemTime(new Date(isoDate));
5
+ vi.resetModules();
6
+ return import('./constants');
7
+ };
8
+ afterEach(() => {
9
+ vi.useRealTimers();
10
+ vi.resetModules();
11
+ });
12
+ describe('constants', () => {
13
+ it('builds prefixed storage keys for mock stores', async () => {
14
+ const { MOCK_FAVOURITES_STORE, MOCK_SEARCH_QUERY_STORE, MY_LOCAL_STORAGE_PREFIX, StorageKey } = await loadConstants();
15
+ expect(MOCK_SEARCH_QUERY_STORE).toBe(`${MY_LOCAL_STORAGE_PREFIX}.${StorageKey.MOCK_SEARCH_QUERY_STORE}`);
16
+ expect(MOCK_FAVOURITES_STORE).toBe(`${MY_LOCAL_STORAGE_PREFIX}.${StorageKey.MOCK_FAVOURITES_STORE}`);
17
+ });
18
+ it('keeps storage key values stable for persisted UI state', async () => {
19
+ const { StorageKey } = await loadConstants();
20
+ expect(StorageKey.APP_TOKEN).toBe('app_token');
21
+ expect(StorageKey.ETAG).toBe('etag');
22
+ expect(StorageKey.LOGIN_NONCE).toBe('login_nonce');
23
+ expect(StorageKey.DISPLAY_TYPE).toBe('display_type');
24
+ });
25
+ it('computes the staggered rule intervals from the current time', async () => {
26
+ const { RULE_INTERVALS, hours, minutes } = await loadConstants();
27
+ expect(minutes).toEqual([15, 45]);
28
+ expect(hours).toEqual([0, 3, 6, 9, 12, 15, 18, 21]);
29
+ expect(RULE_INTERVALS).toEqual([
30
+ { key: 'rule.interval.thirty.minutes', crontab: '15,45 * * * *' },
31
+ { key: 'rule.interval.one.hour', crontab: '15 * * * *' },
32
+ { key: 'rule.interval.three.hours', crontab: '15 0,3,6,9,12,15,18,21 * * *' },
33
+ { key: 'rule.interval.six.hours', crontab: '15 3,9,15,21 * * *' },
34
+ { key: 'rule.interval.one.day', crontab: '15 3 * * *' }
35
+ ]);
36
+ });
37
+ it('exports the supported date range presets and Lucene mappings', async () => {
38
+ const { DATE_RANGES, DATE_RANGE_LUCENE } = await loadConstants();
39
+ expect(DATE_RANGES).toEqual([
40
+ 'date.range.1.day',
41
+ 'date.range.3.day',
42
+ 'date.range.1.week',
43
+ 'date.range.1.month',
44
+ 'date.range.all',
45
+ 'date.range.custom'
46
+ ]);
47
+ expect(DATE_RANGE_LUCENE).toEqual({
48
+ 'date.range.1.day': 'now-1d/d',
49
+ 'date.range.3.day': 'now-3d/d',
50
+ 'date.range.1.week': 'now-7d/d',
51
+ 'date.range.1.month': 'now-1M/M'
52
+ });
53
+ });
54
+ it('exposes configured label metadata for known label types', async () => {
55
+ const { LABEL_TYPES, VALID_ACTION_TRIGGERS, DEFAULT_QUERY } = await loadConstants();
56
+ expect(VALID_ACTION_TRIGGERS).toEqual(['create', 'promote', 'demote']);
57
+ expect(DEFAULT_QUERY).toBe('howler.id:*');
58
+ expect(LABEL_TYPES.insight.icon.props.fontSize).toBe('small');
59
+ expect(LABEL_TYPES.operation.color).toBeDefined();
60
+ expect(LABEL_TYPES.generic).toEqual({});
61
+ });
62
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ /// <reference types="vitest" />
2
+ import { describe, expect, it } from 'vitest';
3
+ import { isCase, isEvent, isHit } from './typeUtils';
4
+ describe('typeUtils', () => {
5
+ it('identifies hits by __index', () => {
6
+ expect(isHit({ __index: 'hit' })).toBe(true);
7
+ expect(isHit({ __index: 'event' })).toBe(false);
8
+ });
9
+ it('identifies cases by __index', () => {
10
+ expect(isCase({ __index: 'case' })).toBe(true);
11
+ expect(isCase({ __index: 'hit' })).toBe(false);
12
+ });
13
+ it('identifies events by __index', () => {
14
+ expect(isEvent({ __index: 'event' })).toBe(true);
15
+ expect(isEvent({ __index: 'case' })).toBe(false);
16
+ });
17
+ it('returns false for nullish values and objects without an index', () => {
18
+ expect(isHit(null)).toBe(false);
19
+ expect(isCase(undefined)).toBe(false);
20
+ expect(isEvent({})).toBe(false);
21
+ });
22
+ });