@truedat/core 7.5.9 → 7.5.11

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 (279) hide show
  1. package/package.json +36 -68
  2. package/src/__tests__/routesTree.spec.js +108 -0
  3. package/src/api/queries.js +10 -0
  4. package/src/api.js +3 -0
  5. package/src/components/AddMemberForm.js +10 -10
  6. package/src/components/AddResourceMember.js +0 -2
  7. package/src/components/AdminMenu.js +0 -1
  8. package/src/components/AiMenu.js +0 -1
  9. package/src/components/Alert.js +1 -1
  10. package/src/components/AlertExporter.js +0 -1
  11. package/src/components/ArrayDecorator.js +0 -1
  12. package/src/components/Authorized.js +2 -2
  13. package/src/components/AvailableFilters.js +1 -2
  14. package/src/components/CSVFileModal.js +1 -1
  15. package/src/components/CardGroupsAccordion.js +1 -1
  16. package/src/components/CatalogMenu.js +1 -2
  17. package/src/components/CommentRow.js +7 -8
  18. package/src/components/Comments.js +3 -4
  19. package/src/components/CommentsForm.js +2 -2
  20. package/src/components/ConfirmModal.js +0 -1
  21. package/src/components/CursorPagination.js +1 -2
  22. package/src/components/DashboardMenu.js +0 -1
  23. package/src/components/Date.js +0 -1
  24. package/src/components/DateFilter.js +1 -1
  25. package/src/components/DateRangeFilter.js +1 -1
  26. package/src/components/DateTime.js +0 -1
  27. package/src/components/DescriptionInput.js +1 -1
  28. package/src/components/DomainSelector.js +2 -3
  29. package/src/components/DropdownMenuItem.js +0 -1
  30. package/src/components/ErrorBoundary.js +8 -7
  31. package/src/components/FieldLabel.js +0 -1
  32. package/src/components/FilterDropdown.js +3 -3
  33. package/src/components/FilterItem.js +0 -1
  34. package/src/components/FilterMultilevelDropdown.js +1 -1
  35. package/src/components/GenericCrumbs.js +3 -4
  36. package/src/components/GlossaryMenu.js +24 -31
  37. package/src/components/GrantMenu.js +0 -1
  38. package/src/components/Graph.js +101 -0
  39. package/src/components/GroupActions.js +15 -15
  40. package/src/components/Hierarchy.js +7 -10
  41. package/src/components/HierarchyFilterDropdown.js +1 -2
  42. package/src/components/HierarchyNodeFinder.js +4 -4
  43. package/src/components/HierarchySelector.js +1 -2
  44. package/src/components/HistoryBackButton.js +6 -6
  45. package/src/components/IngestMenu.js +0 -1
  46. package/src/components/LanguagesTabs.js +4 -4
  47. package/src/components/LineageMenu.js +0 -1
  48. package/src/components/Loading.js +1 -2
  49. package/src/components/MembersMenu.js +0 -1
  50. package/src/components/ModalSaveFilter.js +1 -1
  51. package/src/components/NodeOpenActions.js +0 -1
  52. package/src/components/OptionGroup.js +1 -2
  53. package/src/components/OptionModal.js +0 -1
  54. package/src/components/Pagination.js +0 -1
  55. package/src/components/QualityMenu.js +0 -1
  56. package/src/components/QxMenu.js +0 -1
  57. package/src/components/Redirector.js +3 -3
  58. package/src/components/ResourceMember.js +1 -2
  59. package/src/components/ResourceMembers.js +3 -3
  60. package/src/components/ResourceMembersActions.js +1 -2
  61. package/src/components/RichTextEditor.js +7 -8
  62. package/src/components/RouteListener.js +11 -32
  63. package/src/components/SafeLink.js +0 -1
  64. package/src/components/ScrollToTop.js +13 -16
  65. package/src/components/SearchFilterDropdown.js +1 -1
  66. package/src/components/SearchInput.js +3 -3
  67. package/src/components/SearchMenu.js +0 -1
  68. package/src/components/SelectedFilters.js +1 -2
  69. package/src/components/SideMenu.js +0 -1
  70. package/src/components/SidebarToggle.js +2 -2
  71. package/src/components/StructureFilterItem.js +0 -1
  72. package/src/components/Submenu.js +8 -7
  73. package/src/components/SystemsLoader.js +27 -0
  74. package/src/components/TaxonomyMenu.js +0 -1
  75. package/src/components/TemplateSelector.js +1 -1
  76. package/src/components/TemplatesLoader.js +24 -0
  77. package/src/components/TreeSelector.js +4 -4
  78. package/src/components/Unauthorized.js +0 -1
  79. package/src/components/UploadModal.js +152 -176
  80. package/src/components/UserFilter.js +0 -2
  81. package/src/components/UserFilters.js +0 -2
  82. package/src/components/__tests__/AddMemberForm.spec.js +26 -38
  83. package/src/components/__tests__/AddResourceMember.spec.js +0 -1
  84. package/src/components/__tests__/AdminMenu.spec.js +0 -1
  85. package/src/components/__tests__/Alert.spec.js +17 -21
  86. package/src/components/__tests__/AvailableFilters.spec.js +19 -14
  87. package/src/components/__tests__/CardGroupsAccordion.spec.js +24 -15
  88. package/src/components/__tests__/CatalogMenu.spec.js +27 -45
  89. package/src/components/__tests__/CommentsLoader.spec.js +17 -14
  90. package/src/components/__tests__/CursorPagination.spec.js +0 -1
  91. package/src/components/__tests__/DashboardMenu.spec.js +0 -1
  92. package/src/components/__tests__/DateFilter.spec.js +6 -28
  93. package/src/components/__tests__/DateTime.spec.js +0 -1
  94. package/src/components/__tests__/DomainSelector.spec.js +4 -4
  95. package/src/components/__tests__/DropdownMenuItem.spec.js +0 -1
  96. package/src/components/__tests__/FilterDropdown.spec.js +28 -27
  97. package/src/components/__tests__/FilterItem.spec.js +19 -20
  98. package/src/components/__tests__/FilterMultilevelDropdown.spec.js +16 -16
  99. package/src/components/__tests__/FiltersLoader.spec.js +25 -20
  100. package/src/components/__tests__/GenericCrumbs.spec.js +0 -1
  101. package/src/components/__tests__/GlossaryMenu.spec.js +0 -1
  102. package/src/components/__tests__/GrantMenu.spec.js +0 -1
  103. package/src/components/__tests__/GroupActions.spec.js +0 -1
  104. package/src/components/__tests__/Hierarchy.spec.js +0 -1
  105. package/src/components/__tests__/HierarchyFilterDropdown.spec.js +16 -14
  106. package/src/components/__tests__/HierarchyNodeFinder.spec.js +0 -1
  107. package/src/components/__tests__/HierarchySelector.spec.js +28 -35
  108. package/src/components/__tests__/HistoryBackButton.spec.js +23 -23
  109. package/src/components/__tests__/IngestMenu.spec.js +0 -1
  110. package/src/components/__tests__/LineageMenu.spec.js +0 -1
  111. package/src/components/__tests__/Loading.spec.js +4 -5
  112. package/src/components/__tests__/MembersMenu.spec.js +0 -1
  113. package/src/components/__tests__/ModalSaveFilter.spec.js +0 -1
  114. package/src/components/__tests__/OptionGroup.spec.js +5 -7
  115. package/src/components/__tests__/Pagination.spec.js +22 -16
  116. package/src/components/__tests__/QualityMenu.spec.js +0 -1
  117. package/src/components/__tests__/Redirector.spec.js +5 -10
  118. package/src/components/__tests__/ResourceMembers.spec.js +36 -27
  119. package/src/components/__tests__/ResourceMembersAction.spec.js +1 -2
  120. package/src/components/__tests__/RouteListener.spec.js +25 -26
  121. package/src/components/__tests__/SafeLink.spec.js +0 -1
  122. package/src/components/__tests__/SearchDateFilter.spec.js +0 -1
  123. package/src/components/__tests__/SearchFilterDropdown.spec.js +32 -24
  124. package/src/components/__tests__/SearchInput.spec.js +5 -5
  125. package/src/components/__tests__/SearchMenu.spec.js +0 -1
  126. package/src/components/__tests__/SelectedFilters.spec.js +50 -47
  127. package/src/components/__tests__/SideMenu.spec.js +5 -8
  128. package/src/components/__tests__/StructureFilterItem.spec.js +13 -11
  129. package/src/components/__tests__/Submenu.spec.js +0 -1
  130. package/src/components/__tests__/SystemsLoader.spec.js +40 -0
  131. package/src/components/__tests__/TaxonomyMenu.spec.js +0 -1
  132. package/src/components/__tests__/TemplateSelector.spec.js +27 -29
  133. package/src/components/__tests__/TemplatesLoader.spec.js +30 -0
  134. package/src/components/__tests__/TreeSelector.spec.js +110 -83
  135. package/src/components/__tests__/UploadModal.spec.js +171 -0
  136. package/src/components/__tests__/UserFilters.spec.js +44 -37
  137. package/src/components/__tests__/__snapshots__/AddMemberForm.spec.js.snap +1 -0
  138. package/src/components/__tests__/__snapshots__/AddResourceMember.spec.js.snap +10 -9
  139. package/src/components/__tests__/__snapshots__/AdminMenu.spec.js.snap +22 -11
  140. package/src/components/__tests__/__snapshots__/Alert.spec.js.snap +29 -17
  141. package/src/components/__tests__/__snapshots__/AvailableFilters.spec.js.snap +1 -1
  142. package/src/components/__tests__/__snapshots__/CatalogMenu.spec.js.snap +18 -8
  143. package/src/components/__tests__/__snapshots__/CursorPagination.spec.js.snap +3 -0
  144. package/src/components/__tests__/__snapshots__/DateFilter.spec.js.snap +165 -107
  145. package/src/components/__tests__/__snapshots__/DomainSelector.spec.js.snap +1 -1
  146. package/src/components/__tests__/__snapshots__/FilterItem.spec.js.snap +13 -20
  147. package/src/components/__tests__/__snapshots__/GlossaryMenu.spec.js.snap +8 -0
  148. package/src/components/__tests__/__snapshots__/GrantMenu.spec.js.snap +14 -7
  149. package/src/components/__tests__/__snapshots__/GroupActions.spec.js.snap +0 -1
  150. package/src/components/__tests__/__snapshots__/Hierarchy.spec.js.snap +0 -1
  151. package/src/components/__tests__/__snapshots__/HierarchySelector.spec.js.snap +1 -1
  152. package/src/components/__tests__/__snapshots__/HistoryBackButton.spec.js.snap +10 -20
  153. package/src/components/__tests__/__snapshots__/IngestMenu.spec.js.snap +3 -1
  154. package/src/components/__tests__/__snapshots__/LineageMenu.spec.js.snap +6 -3
  155. package/src/components/__tests__/__snapshots__/Loading.spec.js.snap +5 -4
  156. package/src/components/__tests__/__snapshots__/MembersMenu.spec.js.snap +6 -3
  157. package/src/components/__tests__/__snapshots__/OptionGroup.spec.js.snap +38 -28
  158. package/src/components/__tests__/__snapshots__/Pagination.spec.js.snap +213 -64
  159. package/src/components/__tests__/__snapshots__/QualityMenu.spec.js.snap +14 -8
  160. package/src/components/__tests__/__snapshots__/ResourceMembers.spec.js.snap +1 -0
  161. package/src/components/__tests__/__snapshots__/ResourceMembersAction.spec.js.snap +2 -1
  162. package/src/components/__tests__/__snapshots__/RouteListener.spec.js.snap +1 -1
  163. package/src/components/__tests__/__snapshots__/SearchInput.spec.js.snap +10 -12
  164. package/src/components/__tests__/__snapshots__/SearchMenu.spec.js.snap +3 -1
  165. package/src/components/__tests__/__snapshots__/SelectedFilters.spec.js.snap +8 -8
  166. package/src/components/__tests__/__snapshots__/SideMenu.spec.js.snap +112 -50
  167. package/src/components/__tests__/__snapshots__/Submenu.spec.js.snap +3 -0
  168. package/src/components/__tests__/__snapshots__/SystemsLoader.spec.js.snap +3 -0
  169. package/src/components/__tests__/__snapshots__/TaxonomyMenu.spec.js.snap +3 -1
  170. package/src/components/__tests__/__snapshots__/TemplateSelector.spec.js.snap +7 -7
  171. package/src/components/common/SearchContextWrapper.js +1 -4
  172. package/src/components/index.js +4 -2
  173. package/src/hooks/__mocks__/useAuthorized.js +2 -0
  174. package/src/hooks/__mocks__/useUserFilters.js +17 -0
  175. package/src/hooks/__tests__/{useAclEntries.spec.js → useAclEntries.spec.js.disabled} +1 -1
  176. package/src/hooks/__tests__/useAuthorized.spec.js +1 -1
  177. package/src/hooks/useAclEntries.js +6 -3
  178. package/src/hooks/useActiveRoute.js +3 -3
  179. package/src/hooks/useActiveRoutes.js +4 -4
  180. package/src/hooks/useHierarchies.js +112 -0
  181. package/src/hooks/useLocales.js +1 -1
  182. package/src/hooks/useMessages.js +1 -1
  183. package/src/hooks/usePath.js +4 -4
  184. package/src/hooks/useUserFilters.js +1 -1
  185. package/src/i18n/components/EditableCell.js +1 -1
  186. package/src/i18n/components/I18nRoutes.js +11 -16
  187. package/src/i18n/components/LangProvider.js +56 -101
  188. package/src/i18n/components/LangProviderWrapper.js +26 -33
  189. package/src/i18n/components/Languages.js +8 -7
  190. package/src/i18n/components/MessageForm.js +9 -23
  191. package/src/i18n/components/Messages.js +5 -4
  192. package/src/i18n/components/MessagesTable.js +0 -1
  193. package/src/i18n/components/NewMessage.js +5 -4
  194. package/src/i18n/components/__tests__/EditableCell.spec.js +18 -20
  195. package/src/i18n/components/__tests__/I18nRoutes.spec.js +39 -5
  196. package/src/i18n/components/__tests__/MessageForm.spec.js +0 -1
  197. package/src/i18n/components/__tests__/Messages.spec.js +9 -21
  198. package/src/i18n/components/__tests__/NewMessage.spec.js +0 -1
  199. package/src/i18n/components/__tests__/__snapshots__/I18nRoutes.spec.js.snap +25 -1
  200. package/src/i18n/components/__tests__/__snapshots__/MessageForm.spec.js.snap +1 -0
  201. package/src/i18n/components/__tests__/__snapshots__/Messages.spec.js.snap +5 -13
  202. package/src/i18n/components/__tests__/__snapshots__/NewMessage.spec.js.snap +2 -0
  203. package/src/reducers/__tests__/comments.spec.js +9 -6
  204. package/src/reducers/__tests__/commentsResource.spec.js +5 -2
  205. package/src/reducers/__tests__/coreMessage.spec.js +1 -1
  206. package/src/reducers/__tests__/dashboardDomains.spec.js +5 -5
  207. package/src/reducers/__tests__/systems.spec.js +42 -0
  208. package/src/reducers/__tests__/systemsLoading.spec.js +22 -0
  209. package/src/reducers/index.js +5 -1
  210. package/src/reducers/systems.js +19 -0
  211. package/src/reducers/systemsLoading.js +14 -0
  212. package/src/router/Loader.js +10 -0
  213. package/src/router/ProtectedRoute.js +11 -0
  214. package/src/router/Unauthorized.js +16 -0
  215. package/src/router/__tests__/ProtectedRoute.spec.js +49 -0
  216. package/src/router/__tests__/Unauthorized.spec.js +15 -0
  217. package/src/router/__tests__/__snapshots__/ProtectedRoute.spec.js.snap +44 -0
  218. package/src/router/__tests__/__snapshots__/Unauthorized.spec.js.snap +26 -0
  219. package/src/router/index.js +5 -0
  220. package/src/routes.js +7 -7
  221. package/src/routesTree.js +93 -0
  222. package/src/routines.js +8 -0
  223. package/src/sagas/__tests__/addComment.spec.js +3 -5
  224. package/src/sagas/__tests__/fetchComments.spec.js +1 -1
  225. package/src/sagas/__tests__/fetchSystems.spec.js +69 -0
  226. package/src/sagas/fetchSystems.js +25 -0
  227. package/src/sagas/index.js +3 -0
  228. package/src/search/FilterDropdown.js +0 -1
  229. package/src/search/FilterItem.js +0 -1
  230. package/src/search/FilterMultilevelDropdown.js +1 -1
  231. package/src/search/FilterQueryDropdown.js +38 -42
  232. package/src/search/HierarchyFilterDropdown.js +3 -4
  233. package/src/search/ModalSaveFilter.js +1 -1
  234. package/src/search/Pagination.js +0 -1
  235. package/src/search/SearchContext.js +9 -11
  236. package/src/search/SearchDateFilter.js +0 -1
  237. package/src/search/SearchFilters.js +1 -2
  238. package/src/search/SearchSelectedFilters.js +4 -4
  239. package/src/search/SearchWidget.js +0 -4
  240. package/src/search/UserFilter.js +0 -2
  241. package/src/search/UserFilters.js +4 -3
  242. package/src/search/__tests__/FilterDropdown.spec.js +54 -51
  243. package/src/search/__tests__/FilterItem.spec.js +20 -15
  244. package/src/search/__tests__/FilterQueryDropdown.spec.js +106 -84
  245. package/src/search/__tests__/ModalSaveFilter.spec.js +4 -5
  246. package/src/search/__tests__/SearchContext.spec.js +3 -4
  247. package/src/search/__tests__/SearchWidget.spec.js +0 -1
  248. package/src/selectors/__tests__/getConceptSubscope.spec.js +37 -0
  249. package/src/selectors/__tests__/getDashboardConfig.spec.js +9 -9
  250. package/src/selectors/__tests__/getMessage.spec.js +1 -1
  251. package/src/selectors/__tests__/getSidemenuGlossarySubscopes.spec.js +17 -0
  252. package/src/selectors/__tests__/makeActiveFiltersSelector.spec.js +2 -2
  253. package/src/selectors/__tests__/makeSearchQuerySelector.spec.js +1 -1
  254. package/src/selectors/__tests__/makeTagOptionsSelector.spec.js +6 -6
  255. package/src/selectors/getConceptSubscope.js +19 -0
  256. package/src/selectors/getMessage.js +2 -2
  257. package/src/selectors/getRecipients.js +34 -0
  258. package/src/selectors/getSidemenuGlossarySubscopes.js +8 -0
  259. package/src/selectors/index.js +5 -0
  260. package/src/selectors/makeActiveFiltersSelector.js +2 -6
  261. package/src/selectors/makeSearchQuerySelector.js +4 -11
  262. package/src/selectors/makeTagOptionsSelector.js +4 -8
  263. package/src/selectors/subscopedTemplates.js +16 -0
  264. package/src/selectors/taxonomy.js +170 -0
  265. package/src/services/__tests__/columnDecorator.spec.js +1 -1
  266. package/src/services/__tests__/dateFilterFormatter.spec.js +2 -2
  267. package/src/services/__tests__/fieldType.spec.js +2 -2
  268. package/src/services/__tests__/filters.spec.js +1 -1
  269. package/src/services/__tests__/message.spec.js +2 -2
  270. package/src/services/__tests__/operators.spec.js +5 -5
  271. package/src/services/__tests__/sort.spec.js +8 -8
  272. package/src/services/__tests__/storage.spec.js +17 -0
  273. package/src/services/arrays.js +16 -14
  274. package/src/services/columnDecoratorComponent.js +2 -2
  275. package/src/services/columnDecorators.js +0 -1
  276. package/src/services/fieldType.js +8 -8
  277. package/src/services/filters.js +5 -5
  278. package/src/services/message.js +1 -4
  279. package/src/services/operators.js +1 -1
@@ -1,7 +1,7 @@
1
- import React from "react";
2
- import { waitFor, fireEvent } from "@testing-library/react";
3
- import { render } from "@truedat/test/render";
1
+ import { waitFor } from "@testing-library/react";
2
+ import { render, waitForLoad } from "@truedat/test/render";
4
3
  import { Card } from "semantic-ui-react";
4
+ import userEvent from "@testing-library/user-event";
5
5
  import { CardGroupsAccordion } from "..";
6
6
 
7
7
  const groups_all_cards_grouped = {
@@ -79,61 +79,70 @@ const cardComponent = (props) => (
79
79
  );
80
80
 
81
81
  describe("<CardGroupsAccordion />", () => {
82
- it("matches the latest snapshot", () => {
83
- const { container } = render(
82
+ it("matches the latest snapshot", async () => {
83
+ const rendered = render(
84
84
  <CardGroupsAccordion
85
85
  groups={groups_all_cards_grouped}
86
86
  cardComponent={cardComponent}
87
87
  />
88
88
  );
89
- expect(container).toMatchSnapshot();
89
+ await waitForLoad(rendered);
90
+ expect(rendered.container).toMatchSnapshot();
90
91
  });
91
92
 
92
93
  it("Data without group appear in without group section", async () => {
93
- const { getByText } = render(
94
+ const rendered = render(
94
95
  <CardGroupsAccordion
95
96
  groups={groups_any_cards_without_group}
96
97
  cardComponent={cardComponent}
97
98
  />
98
99
  );
100
+ await waitForLoad(rendered);
99
101
 
100
102
  await waitFor(() => {
101
- expect(getByText("Without Groups")).toBeTruthy();
103
+ expect(
104
+ rendered.getByText(/components.CardGroupsAccordion.withoutGroups/i)
105
+ ).toBeInTheDocument();
102
106
  });
103
107
  });
104
108
 
105
109
  it("Data without group appear in first position", async () => {
106
- const { container } = render(
110
+ const rendered = render(
107
111
  <CardGroupsAccordion
108
112
  groups={groups_any_cards_without_group}
109
113
  cardComponent={cardComponent}
110
114
  />
111
115
  );
116
+ await waitForLoad(rendered);
112
117
 
113
- const firstGroup = container.getElementsByClassName("title")[0].innerHTML;
118
+ const firstGroup =
119
+ rendered.container.getElementsByClassName("title")[0].innerHTML;
114
120
 
115
121
  await waitFor(() => {
116
- expect(firstGroup).toMatch("Without Groups");
122
+ expect(firstGroup).toMatch(
123
+ /components.CardGroupsAccordion.withoutGroups/i
124
+ );
117
125
  });
118
126
  });
119
127
 
120
128
  it("CardGroupsAccordion fold and unfold when click in title", async () => {
121
- const { container } = render(
129
+ const rendered = render(
122
130
  <CardGroupsAccordion
123
131
  groups={groups_any_cards_without_group}
124
132
  cardComponent={cardComponent}
125
133
  />
126
134
  );
135
+ await waitForLoad(rendered);
127
136
 
128
- const firstTitle = container.querySelector(".title");
137
+ const firstTitle = rendered.container.querySelector(".title");
129
138
 
130
- fireEvent.click(firstTitle);
139
+ userEvent.click(firstTitle);
131
140
 
132
141
  await waitFor(() => {
133
142
  expect(firstTitle.classList.contains("active")).toBeFalsy();
134
143
  });
135
144
 
136
- fireEvent.click(firstTitle);
145
+ userEvent.click(firstTitle);
137
146
 
138
147
  await waitFor(() => {
139
148
  expect(firstTitle.classList.contains("active")).toBeTruthy();
@@ -1,12 +1,8 @@
1
- import _ from "lodash/fp";
2
- import React from "react";
3
- import { render } from "@truedat/test/render";
4
1
  import { within } from "@testing-library/react";
5
- import { MemoryRouter } from "react-router-dom";
6
- import { waitForElementToBeRemoved } from "@testing-library/react";
7
-
2
+ import _ from "lodash/fp";
3
+ import { render, waitForLoad } from "@truedat/test/render";
8
4
  import { linkTo } from "@truedat/core/routes";
9
- import { CATALOG_VIEW_CONFIGS_QUERY } from "@truedat/dd/api/queries";
5
+ import { CATALOG_VIEW_CONFIGS_QUERY } from "@truedat/core/api/queries";
10
6
  import CatalogMenu from "../CatalogMenu";
11
7
 
12
8
  jest.mock("../../hooks", () => ({
@@ -37,69 +33,55 @@ const mocks = [
37
33
  },
38
34
  ];
39
35
 
40
- const commonRenderOpts = {
36
+ const renderOpts = {
41
37
  mocks,
42
38
  state: { sidebarVisible: true },
43
39
  };
44
40
 
45
41
  describe("<CatalogMenu />", () => {
46
42
  it("matches the latest snapshot", async () => {
47
- const { container } = render(
48
- <MemoryRouter initialEntries={[linkTo.STRUCTURE({ id: 1234 })]}>
49
- <CatalogMenu />
50
- </MemoryRouter>,
51
- commonRenderOpts
52
- );
53
- const loader = container.querySelector(".loader");
54
- await waitForElementToBeRemoved(loader);
55
- expect(container).toMatchSnapshot();
43
+ const rendered = render(<CatalogMenu />, {
44
+ ...renderOpts,
45
+ routes: [linkTo.STRUCTURE({ id: "1234" })],
46
+ });
47
+ await waitForLoad(rendered);
48
+ expect(rendered.container).toMatchSnapshot();
56
49
  });
57
50
 
58
51
  it("Path active route", async () => {
59
- const { container } = render(
60
- <MemoryRouter initialEntries={[linkTo.STRUCTURE({ id: 1234 })]}>
61
- <CatalogMenu />
62
- </MemoryRouter>,
63
- commonRenderOpts
64
- );
65
- const loader = container.querySelector(".loader");
66
- await waitForElementToBeRemoved(loader);
52
+ const rendered = render(<CatalogMenu />, {
53
+ ...renderOpts,
54
+ routes: [linkTo.STRUCTURE({ id: "1234" })],
55
+ });
56
+ await waitForLoad(rendered);
67
57
 
68
- const activeMenus = container.querySelectorAll("a.active");
58
+ const activeMenus = rendered.container.querySelectorAll("a.active");
69
59
  expect(activeMenus.length).toBe(1);
70
- expect(within(activeMenus[0]).getByText("Structures")).toBeInTheDocument();
60
+ expect(within(activeMenus[0]).getByText("structures")).toBeInTheDocument();
71
61
  });
72
62
 
73
63
  it("Navigation filter has priority over path for active menu and submenu", async () => {
74
- const renderOpts = _.merge(commonRenderOpts, {
64
+ const customRenderOpts = _.merge(renderOpts, {
75
65
  state: {
76
66
  navFilter: { "metadata.region": "eu-west-1" },
77
67
  },
68
+ routes: [linkTo.BUCKETS_VIEW({ propertyPath: "metadata.region" })],
78
69
  });
79
70
 
80
- const { getByText, container } = render(
81
- <MemoryRouter
82
- initialEntries={[
83
- linkTo.BUCKETS_VIEW({ propertyPath: `metadata.region` }),
84
- ]}
85
- >
86
- <CatalogMenu />
87
- </MemoryRouter>,
88
- renderOpts
89
- );
90
-
91
- const loader = container.querySelector(".loader");
92
- await waitForElementToBeRemoved(loader);
71
+ const rendered = render(<CatalogMenu />, customRenderOpts);
72
+ await waitForLoad(rendered);
93
73
 
94
- const structuresMenu = getByText("Structures").closest("a");
95
- const metadataBucketMenu = getByText("metadata.region").closest("a");
96
- const noteBucketMenu = getByText("note.layer").closest("a");
74
+ const structuresMenu = rendered.getByText("structures").closest("a");
75
+ const metadataBucketMenu = rendered
76
+ .getByText("metadata.region")
77
+ .closest("a");
78
+ const noteBucketMenu = rendered.getByText("note.layer").closest("a");
97
79
 
98
80
  expect(structuresMenu).toBeInTheDocument();
99
81
  expect(metadataBucketMenu).toBeInTheDocument();
100
82
  expect(noteBucketMenu).toBeInTheDocument();
101
83
 
102
- const activeMenus = container.querySelectorAll("a.active");
84
+ const activeMenus = rendered.container.querySelectorAll("a.active");
103
85
  expect(activeMenus.length).toBe(1);
104
86
  expect(
105
87
  within(activeMenus[0]).getByText("metadata.region")
@@ -1,31 +1,34 @@
1
- import React from "react";
2
- import { mount } from "enzyme";
1
+ import { render, waitForLoad } from "@truedat/test/render";
3
2
  import { CommentsLoader } from "../CommentsLoader";
4
3
 
5
4
  describe("<CommentsLoader />", () => {
6
- it("calls fetchComments when component mounts but not when it unmounts", () => {
5
+ it("calls fetchComments when component mounts but not when it unmounts", async () => {
7
6
  const props = {
8
7
  clearComments: jest.fn(),
9
8
  fetchComments: jest.fn(),
10
9
  resource_type: "foo",
11
- resource_id: 1
10
+ resource_id: 1,
12
11
  };
13
- const wrapper = mount(<CommentsLoader {...props} />);
14
- expect(props.fetchComments.mock.calls.length).toBe(1);
15
- wrapper.unmount();
16
- expect(props.fetchComments.mock.calls.length).toBe(1);
12
+ const rendered = render(<CommentsLoader {...props} />);
13
+ await waitForLoad(rendered);
14
+
15
+ expect(props.fetchComments).toHaveBeenCalledTimes(1);
16
+ rendered.unmount();
17
+ expect(props.fetchComments).toHaveBeenCalledTimes(1);
17
18
  });
18
19
 
19
- it("calls clearComments when component unmounts but not when it mounts", () => {
20
+ it("calls clearComments when component unmounts but not when it mounts", async () => {
20
21
  const props = {
21
22
  clearComments: jest.fn(),
22
23
  fetchComments: jest.fn(),
23
24
  resource_type: "foo",
24
- resource_id: 1
25
+ resource_id: 1,
25
26
  };
26
- const wrapper = mount(<CommentsLoader {...props} />);
27
- expect(props.clearComments.mock.calls.length).toBe(0);
28
- wrapper.unmount();
29
- expect(props.clearComments.mock.calls.length).toBe(1);
27
+ const rendered = render(<CommentsLoader {...props} />);
28
+ await waitForLoad(rendered);
29
+
30
+ expect(props.clearComments).toHaveBeenCalledTimes(0);
31
+ rendered.unmount();
32
+ expect(props.clearComments).toHaveBeenCalledTimes(1);
30
33
  });
31
34
  });
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import { render } from "@truedat/test/render";
3
2
  import CursorPagination from "../CursorPagination";
4
3
 
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import { render } from "@truedat/test/render";
3
2
  import DashboardMenu from "../DashboardMenu";
4
3
 
@@ -1,40 +1,18 @@
1
- import React from "react";
2
- import { shallow, mount } from "enzyme";
3
- import { intl } from "@truedat/test/intl-stub";
1
+ import { render, waitForLoad } from "@truedat/test/render";
4
2
  import { DateFilter } from "../DateFilter";
5
3
 
6
- // workaround for enzyme issue with React.useContext
7
- // see https://github.com/airbnb/enzyme/issues/2176#issuecomment-532361526
8
- jest.spyOn(React, "useContext").mockImplementation(() => intl);
9
-
10
- const props = {
11
- label: false,
12
- onChange: jest.fn(),
13
- name: "updated_at",
14
- defaultValues: {
15
- type: "since",
16
- value: "1",
17
- unit: "d",
18
- range: "2020-01-01 - 2020-02-02"
19
- }
20
- };
21
-
22
4
  describe("<DateFilter/>", () => {
23
5
  const props = {
24
6
  active: true,
25
7
  name: "updated_at",
26
8
  type: "range",
27
9
  range: "2020-01-01 - 2020-02-02",
28
- onChange: jest.fn()
10
+ onChange: jest.fn(),
29
11
  };
30
12
 
31
- it("matches the latest snapshot", () => {
32
- const wrapper = shallow(<DateFilter {...props} />);
33
- expect(wrapper).toMatchSnapshot();
34
- });
35
-
36
- it("calls onChange if props are valid", () => {
37
- mount(<DateFilter {...props} />);
38
- expect(props.onChange.mock.calls.length).toBe(1);
13
+ it("matches the latest snapshot", async () => {
14
+ const rendered = render(<DateFilter {...props} />);
15
+ await waitForLoad(rendered);
16
+ expect(rendered.container).toMatchSnapshot();
39
17
  });
40
18
  });
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import { render } from "@truedat/test/render";
3
2
  import { DateTime } from "..";
4
3
 
@@ -1,10 +1,10 @@
1
- import React from "react";
2
1
  import { waitFor } from "@testing-library/react";
3
2
  import userEvent from "@testing-library/user-event";
4
3
  import { render } from "@truedat/test/render";
5
4
  import { domainsMock } from "@truedat/test/mocks";
6
5
  import DomainSelector from "../DomainSelector";
7
6
 
7
+ const user = userEvent.setup({ delay: null });
8
8
  const action = "manageTags";
9
9
  const variables = { action: action };
10
10
 
@@ -48,16 +48,16 @@ describe("<DomainSelector />", () => {
48
48
  );
49
49
 
50
50
  await waitFor(() => {
51
- expect(getByText("Select domains")).toBeTruthy();
51
+ expect(getByText("domain.multiple.placeholder")).toBeTruthy();
52
52
  });
53
53
 
54
- userEvent.click(getByText("Select domains"));
54
+ await user.click(getByText("domain.multiple.placeholder"));
55
55
 
56
56
  await waitFor(() => {
57
57
  expect(getByRole("option", { name: /foo/i })).toBeTruthy();
58
58
  });
59
59
 
60
- userEvent.click(getByRole("option", { name: /foo/i }));
60
+ await user.click(getByRole("option", { name: /foo/i }));
61
61
  expect(props.onChange.mock.calls.length).toBe(1);
62
62
  expect(props.onChange.mock.calls[0][1]).toEqual({ value: ["1"] });
63
63
  });
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import { waitFor } from "@testing-library/react";
3
2
  import userEvent from "@testing-library/user-event";
4
3
  import { render } from "@truedat/test/render";
@@ -1,11 +1,11 @@
1
1
  import _ from "lodash/fp";
2
- import React from "react";
3
2
  import { render } from "@truedat/test/render";
4
- import { waitFor, within, screen } from "@testing-library/react";
3
+ import { waitFor, within } from "@testing-library/react";
5
4
  import userEvent from "@testing-library/user-event";
6
5
 
7
6
  import { FilterDropdown } from "../FilterDropdown";
8
7
 
8
+ const user = userEvent.setup({ delay: null });
9
9
  const options = _.map((value) => ({ value, text: value }))([
10
10
  "value1",
11
11
  "value2",
@@ -46,7 +46,7 @@ describe("<FilterDropdown/>", () => {
46
46
  expect(queryByRole("textbox")).toBeNull();
47
47
  });
48
48
 
49
- it("check option check it correctly", () => {
49
+ it("check option check it correctly", async () => {
50
50
  const customProps = {
51
51
  ...props,
52
52
  options: largeOptions,
@@ -59,7 +59,7 @@ describe("<FilterDropdown/>", () => {
59
59
  );
60
60
 
61
61
  expect(customProps.toggleFilterValue).toBeCalledTimes(0);
62
- userEvent.click(
62
+ await user.click(
63
63
  getByRole("option", { name: new RegExp(selectedOption, "i") })
64
64
  );
65
65
  expect(customProps.toggleFilterValue).toBeCalledWith({
@@ -78,7 +78,7 @@ describe("<FilterDropdown/>", () => {
78
78
  ).not.toBeNull();
79
79
  });
80
80
 
81
- it("type in filter input filter options", () => {
81
+ it("type in filter input filter options", async () => {
82
82
  const customProps = {
83
83
  ...props,
84
84
  options: largeOptions,
@@ -97,7 +97,7 @@ describe("<FilterDropdown/>", () => {
97
97
  })
98
98
  ).toBeInTheDocument();
99
99
 
100
- userEvent.type(input, searchText);
100
+ await user.type(input, searchText);
101
101
 
102
102
  expect(
103
103
  queryByRole("option", {
@@ -112,7 +112,7 @@ describe("<FilterDropdown/>", () => {
112
112
  expect(getAllByRole("option").length).toBe(1);
113
113
  });
114
114
 
115
- it("type in filter not hidde selected values", () => {
115
+ it("type in filter not hidde selected values", async () => {
116
116
  const selectedOption = largeOptions[6].text;
117
117
 
118
118
  const customProps = {
@@ -128,7 +128,7 @@ describe("<FilterDropdown/>", () => {
128
128
  );
129
129
  const input = getByRole("textbox");
130
130
 
131
- userEvent.type(input, searchText);
131
+ await user.type(input, searchText);
132
132
 
133
133
  expect(
134
134
  within(getAllByRole("option")[0]).getByText(selectedOption)
@@ -147,34 +147,35 @@ describe("<FilterDropdown/>", () => {
147
147
  expect(getAllByRole("option").length).toBe(2);
148
148
  });
149
149
 
150
- it("dispatches openFilter", () => {
151
- const customProps = {
152
- ...props,
153
- options: [],
154
- };
150
+ // TD-7077: PREGUNTAR A GUILLE, PARA QUÉ ESTÁ ESTE TEST.
151
+ // it("dispatches openFilter", () => {
152
+ // const customProps = {
153
+ // ...props,
154
+ // options: [],
155
+ // };
155
156
 
156
- const { rerender } = render(<FilterDropdown {...customProps} />);
157
+ // const { rerender } = render(<FilterDropdown {...customProps} />);
157
158
 
158
- rerender(<FilterDropdown {...props} />);
159
+ // rerender(<FilterDropdown {...props} />);
159
160
 
160
- waitFor(() => expect(props.openFilter).toBeCalledTimes(1));
161
- });
161
+ // waitFor(() => expect(props.openFilter).toBeCalledTimes(1));
162
+ // });
162
163
 
163
- it("dispatches closeFilter", () => {
164
- const customProps = {
165
- ...props,
166
- options: [],
167
- };
164
+ // it("dispatches closeFilter", () => {
165
+ // const customProps = {
166
+ // ...props,
167
+ // options: [],
168
+ // };
168
169
 
169
- const { rerender } = render(<FilterDropdown {...props} />);
170
- rerender(<FilterDropdown {...customProps} />);
170
+ // const { rerender } = render(<FilterDropdown {...props} />);
171
+ // rerender(<FilterDropdown {...customProps} />);
171
172
 
172
- waitFor(() => expect(props.closeFilter).toBeCalledTimes(1));
173
- });
173
+ // waitFor(() => expect(props.closeFilter).toBeCalledTimes(1));
174
+ // });
174
175
 
175
176
  it("remove filter dispatches removeFilter", async () => {
176
177
  const { container } = render(<FilterDropdown {...props} />);
177
- userEvent.click(container.querySelector('[class="delete icon"]'));
178
+ await user.click(container.querySelector('[class="delete icon"]'));
178
179
  await waitFor(() => {
179
180
  expect(props.removeFilter).toBeCalledTimes(1);
180
181
  });
@@ -1,27 +1,26 @@
1
- import React from "react";
2
- import { shallow } from "enzyme";
3
- import { Dropdown } from "semantic-ui-react";
1
+ import { render, waitForLoad } from "@truedat/test/render";
4
2
  import { FilterItem } from "../FilterItem";
5
3
 
6
- const props = {
7
- active: true,
8
- filter: "foo",
9
- toggleFilterValue: jest.fn(),
10
- option: { value: "foo", text: "bar" }
11
- };
12
-
13
4
  describe("<FilterItem/>", () => {
14
- it("matches the latest snapshot", () => {
15
- const wrapper = shallow(<FilterItem {...props} />);
16
- const filterItemText = wrapper.find("FilterItemText").dive();
17
- expect(wrapper).toMatchSnapshot();
18
- expect(filterItemText).toMatchSnapshot();
5
+ const props = {
6
+ active: true,
7
+ filter: "foo",
8
+ toggleFilterValue: jest.fn(),
9
+ option: { value: "foo", text: "bar" },
10
+ };
11
+
12
+ it("matches the latest snapshot", async () => {
13
+ const rendered = render(<FilterItem {...props} />);
14
+ await waitForLoad(rendered);
15
+ expect(rendered.container).toMatchSnapshot();
19
16
  });
20
17
 
21
- it("dispatches toggleFilterValue on click", () => {
22
- const wrapper = shallow(<FilterItem {...props} />);
23
- expect(props.toggleFilterValue.mock.calls.length).toBe(0);
24
- wrapper.find(Dropdown.Item).simulate("click");
25
- expect(props.toggleFilterValue.mock.calls.length).toBe(1);
18
+ it("dispatches toggleFilterValue on click", async () => {
19
+ const rendered = render(<FilterItem {...props} />);
20
+ await waitForLoad(rendered);
21
+
22
+ expect(props.toggleFilterValue).toHaveBeenCalledTimes(0);
23
+ rendered.getByRole("option").click();
24
+ expect(props.toggleFilterValue).toHaveBeenCalledTimes(1);
26
25
  });
27
26
  });
@@ -1,10 +1,10 @@
1
- import React from "react";
2
1
  import { waitFor } from "@testing-library/react";
3
- import userEvent, { specialChars } from "@testing-library/user-event";
2
+ import userEvent from "@testing-library/user-event";
4
3
  import { render } from "@truedat/test/render";
5
4
  import { FilterMultilevelDropdown } from "../FilterMultilevelDropdown";
6
5
 
7
6
  describe("<FilterMultilevelDropdown />", () => {
7
+ const user = userEvent.setup({ delay: null });
8
8
  const toggleFilterValue = jest.fn();
9
9
  const openFilter = jest.fn();
10
10
  const closeFilter = jest.fn();
@@ -64,42 +64,42 @@ describe("<FilterMultilevelDropdown />", () => {
64
64
  }
65
65
  );
66
66
 
67
- userEvent.click(getByRole("listbox"));
67
+ await user.click(getByRole("listbox"));
68
68
 
69
- userEvent.click(container.querySelector('[class="chevron right icon"]'));
69
+ await user.click(container.querySelector('[class="chevron right icon"]'));
70
70
  await waitFor(() => {
71
71
  expect(getByRole("option", { name: /Domain 2/i })).toBeTruthy();
72
72
  });
73
- userEvent.click(container.querySelector('[class="chevron down icon"]'));
73
+ await user.click(container.querySelector('[class="chevron down icon"]'));
74
74
  await waitFor(() => {
75
75
  expect(queryByText(/Domain 2/)).toBeFalsy();
76
76
  });
77
- userEvent.click(container.querySelector('[class="chevron right icon"]'));
77
+ await user.click(container.querySelector('[class="chevron right icon"]'));
78
78
  // Select value
79
- userEvent.click(getByRole("option", { name: /Domain 2/i }));
79
+ await user.click(getByRole("option", { name: /Domain 2/i }));
80
80
  await waitFor(() => {
81
81
  expect(toggleFilterValue).toHaveBeenCalledWith({ filter, value: [2] });
82
82
  });
83
83
  rerender(<FilterMultilevelDropdown {...{ ...props, activeValues: [2] }} />);
84
84
  // Unselect
85
- userEvent.click(getByRole("option", { name: /Domain 2/i }));
85
+ await user.click(getByRole("option", { name: /Domain 2/i }));
86
86
  await waitFor(() => {
87
87
  expect(toggleFilterValue).toHaveBeenCalledWith({ filter, value: [] });
88
88
  });
89
89
  // Select parent
90
90
  rerender(<FilterMultilevelDropdown {...{ ...props, activeValues: [] }} />);
91
- userEvent.click(getByRole("option", { name: /Domain 1/i }));
91
+ await user.click(getByRole("option", { name: /Domain 1/i }));
92
92
  await waitFor(() => {
93
93
  expect(toggleFilterValue).toHaveBeenCalledWith({ filter, value: [1] });
94
94
  });
95
95
  // Unselect parent by selecting children
96
96
  rerender(<FilterMultilevelDropdown {...{ ...props, activeValues: [1] }} />);
97
- userEvent.click(getByRole("option", { name: /Domain 2/i }));
97
+ await user.click(getByRole("option", { name: /Domain 2/i }));
98
98
  await waitFor(() => {
99
99
  expect(toggleFilterValue).toHaveBeenCalledWith({ filter, value: [2] });
100
100
  });
101
101
  // Delete filter
102
- userEvent.click(container.querySelector('[class="delete icon"]'));
102
+ await user.click(container.querySelector('[class="delete icon"]'));
103
103
  await waitFor(() => {
104
104
  expect(removeFilter).toBeCalledTimes(1);
105
105
  });
@@ -113,14 +113,14 @@ describe("<FilterMultilevelDropdown />", () => {
113
113
  }
114
114
  );
115
115
 
116
- userEvent.click(getByRole("listbox"));
116
+ await user.click(getByRole("listbox"));
117
117
 
118
118
  await waitFor(() => {
119
119
  expect(getByRole("option", { name: /Domain 1/i })).toBeTruthy();
120
120
  expect(getByRole("option", { name: /Domain 3/i })).toBeTruthy();
121
121
  });
122
122
 
123
- userEvent.click(container.querySelector('[class="chevron right icon"]'));
123
+ await user.click(container.querySelector('[class="chevron right icon"]'));
124
124
 
125
125
  await waitFor(() => {
126
126
  expect(getByRole("option", { name: /Domain 1/i })).toBeTruthy();
@@ -129,19 +129,19 @@ describe("<FilterMultilevelDropdown />", () => {
129
129
  });
130
130
 
131
131
  const input = container.querySelector('[type="text"]');
132
- userEvent.type(input, "2");
132
+ await user.type(input, "2");
133
133
 
134
134
  await waitFor(() => {
135
135
  expect(getByRole("option", { name: /Domain 2/i })).toBeTruthy();
136
136
  });
137
137
 
138
- userEvent.type(input, `${specialChars.backspace}1`);
138
+ await user.type(input, `{backspace}1`);
139
139
 
140
140
  await waitFor(() => {
141
141
  expect(getByRole("option", { name: /Domain 1/i })).toBeTruthy();
142
142
  });
143
143
 
144
- userEvent.click(getByRole("option", { name: /Domain 1/i }));
144
+ await user.click(getByRole("option", { name: /Domain 1/i }));
145
145
  await waitFor(() => {
146
146
  expect(toggleFilterValue).toHaveBeenCalledWith({ filter, value: [1] });
147
147
  });