@truedat/core 7.5.9 → 7.5.10
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.
- package/package.json +34 -68
- package/src/__tests__/routesTree.spec.js +108 -0
- package/src/api/queries.js +10 -0
- package/src/api.js +3 -0
- package/src/components/AddMemberForm.js +10 -10
- package/src/components/AddResourceMember.js +0 -2
- package/src/components/AdminMenu.js +0 -1
- package/src/components/AiMenu.js +0 -1
- package/src/components/Alert.js +1 -1
- package/src/components/AlertExporter.js +0 -1
- package/src/components/ArrayDecorator.js +0 -1
- package/src/components/Authorized.js +2 -2
- package/src/components/AvailableFilters.js +1 -2
- package/src/components/CSVFileModal.js +1 -1
- package/src/components/CardGroupsAccordion.js +1 -1
- package/src/components/CatalogMenu.js +1 -2
- package/src/components/CommentRow.js +7 -8
- package/src/components/Comments.js +3 -4
- package/src/components/CommentsForm.js +2 -2
- package/src/components/ConfirmModal.js +0 -1
- package/src/components/CursorPagination.js +1 -2
- package/src/components/DashboardMenu.js +0 -1
- package/src/components/Date.js +0 -1
- package/src/components/DateFilter.js +1 -1
- package/src/components/DateRangeFilter.js +1 -1
- package/src/components/DateTime.js +0 -1
- package/src/components/DescriptionInput.js +1 -1
- package/src/components/DomainSelector.js +2 -3
- package/src/components/DropdownMenuItem.js +0 -1
- package/src/components/ErrorBoundary.js +8 -7
- package/src/components/FieldLabel.js +0 -1
- package/src/components/FilterDropdown.js +3 -3
- package/src/components/FilterItem.js +0 -1
- package/src/components/FilterMultilevelDropdown.js +1 -1
- package/src/components/GenericCrumbs.js +3 -4
- package/src/components/GlossaryMenu.js +24 -31
- package/src/components/GrantMenu.js +0 -1
- package/src/components/GroupActions.js +15 -15
- package/src/components/Hierarchy.js +7 -10
- package/src/components/HierarchyFilterDropdown.js +1 -2
- package/src/components/HierarchyNodeFinder.js +4 -4
- package/src/components/HierarchySelector.js +1 -2
- package/src/components/HistoryBackButton.js +6 -6
- package/src/components/IngestMenu.js +0 -1
- package/src/components/LanguagesTabs.js +4 -4
- package/src/components/LineageMenu.js +0 -1
- package/src/components/Loading.js +1 -2
- package/src/components/MembersMenu.js +0 -1
- package/src/components/ModalSaveFilter.js +1 -1
- package/src/components/NodeOpenActions.js +0 -1
- package/src/components/OptionGroup.js +1 -2
- package/src/components/OptionModal.js +0 -1
- package/src/components/Pagination.js +0 -1
- package/src/components/QualityMenu.js +0 -1
- package/src/components/QxMenu.js +0 -1
- package/src/components/Redirector.js +3 -3
- package/src/components/ResourceMember.js +1 -2
- package/src/components/ResourceMembers.js +3 -3
- package/src/components/ResourceMembersActions.js +1 -2
- package/src/components/RichTextEditor.js +7 -8
- package/src/components/RouteListener.js +11 -32
- package/src/components/SafeLink.js +0 -1
- package/src/components/ScrollToTop.js +13 -16
- package/src/components/SearchFilterDropdown.js +1 -1
- package/src/components/SearchInput.js +3 -3
- package/src/components/SearchMenu.js +0 -1
- package/src/components/SelectedFilters.js +1 -2
- package/src/components/SideMenu.js +0 -1
- package/src/components/SidebarToggle.js +2 -2
- package/src/components/StructureFilterItem.js +0 -1
- package/src/components/Submenu.js +8 -7
- package/src/components/SystemsLoader.js +27 -0
- package/src/components/TaxonomyMenu.js +0 -1
- package/src/components/TemplateSelector.js +1 -1
- package/src/components/TemplatesLoader.js +24 -0
- package/src/components/TreeSelector.js +4 -4
- package/src/components/Unauthorized.js +0 -1
- package/src/components/UploadModal.js +152 -176
- package/src/components/UserFilter.js +0 -2
- package/src/components/UserFilters.js +0 -2
- package/src/components/__tests__/AddMemberForm.spec.js +26 -38
- package/src/components/__tests__/AddResourceMember.spec.js +0 -1
- package/src/components/__tests__/AdminMenu.spec.js +0 -1
- package/src/components/__tests__/Alert.spec.js +17 -21
- package/src/components/__tests__/AvailableFilters.spec.js +19 -14
- package/src/components/__tests__/CardGroupsAccordion.spec.js +24 -15
- package/src/components/__tests__/CatalogMenu.spec.js +27 -45
- package/src/components/__tests__/CommentsLoader.spec.js +17 -14
- package/src/components/__tests__/CursorPagination.spec.js +0 -1
- package/src/components/__tests__/DashboardMenu.spec.js +0 -1
- package/src/components/__tests__/DateFilter.spec.js +6 -28
- package/src/components/__tests__/DateTime.spec.js +0 -1
- package/src/components/__tests__/DomainSelector.spec.js +4 -4
- package/src/components/__tests__/DropdownMenuItem.spec.js +0 -1
- package/src/components/__tests__/FilterDropdown.spec.js +28 -27
- package/src/components/__tests__/FilterItem.spec.js +19 -20
- package/src/components/__tests__/FilterMultilevelDropdown.spec.js +16 -16
- package/src/components/__tests__/FiltersLoader.spec.js +25 -20
- package/src/components/__tests__/GenericCrumbs.spec.js +0 -1
- package/src/components/__tests__/GlossaryMenu.spec.js +0 -1
- package/src/components/__tests__/GrantMenu.spec.js +0 -1
- package/src/components/__tests__/GroupActions.spec.js +0 -1
- package/src/components/__tests__/Hierarchy.spec.js +0 -1
- package/src/components/__tests__/HierarchyFilterDropdown.spec.js +16 -14
- package/src/components/__tests__/HierarchyNodeFinder.spec.js +0 -1
- package/src/components/__tests__/HierarchySelector.spec.js +28 -35
- package/src/components/__tests__/HistoryBackButton.spec.js +23 -23
- package/src/components/__tests__/IngestMenu.spec.js +0 -1
- package/src/components/__tests__/LineageMenu.spec.js +0 -1
- package/src/components/__tests__/Loading.spec.js +4 -5
- package/src/components/__tests__/MembersMenu.spec.js +0 -1
- package/src/components/__tests__/ModalSaveFilter.spec.js +0 -1
- package/src/components/__tests__/OptionGroup.spec.js +5 -7
- package/src/components/__tests__/Pagination.spec.js +22 -16
- package/src/components/__tests__/QualityMenu.spec.js +0 -1
- package/src/components/__tests__/Redirector.spec.js +5 -10
- package/src/components/__tests__/ResourceMembers.spec.js +36 -27
- package/src/components/__tests__/ResourceMembersAction.spec.js +1 -2
- package/src/components/__tests__/RouteListener.spec.js +25 -26
- package/src/components/__tests__/SafeLink.spec.js +0 -1
- package/src/components/__tests__/SearchDateFilter.spec.js +0 -1
- package/src/components/__tests__/SearchFilterDropdown.spec.js +32 -24
- package/src/components/__tests__/SearchInput.spec.js +5 -5
- package/src/components/__tests__/SearchMenu.spec.js +0 -1
- package/src/components/__tests__/SelectedFilters.spec.js +50 -47
- package/src/components/__tests__/SideMenu.spec.js +5 -8
- package/src/components/__tests__/StructureFilterItem.spec.js +13 -11
- package/src/components/__tests__/Submenu.spec.js +0 -1
- package/src/components/__tests__/SystemsLoader.spec.js +40 -0
- package/src/components/__tests__/TaxonomyMenu.spec.js +0 -1
- package/src/components/__tests__/TemplateSelector.spec.js +27 -29
- package/src/components/__tests__/TemplatesLoader.spec.js +30 -0
- package/src/components/__tests__/TreeSelector.spec.js +110 -83
- package/src/components/__tests__/UploadModal.spec.js +171 -0
- package/src/components/__tests__/UserFilters.spec.js +44 -37
- package/src/components/__tests__/__snapshots__/AddMemberForm.spec.js.snap +1 -0
- package/src/components/__tests__/__snapshots__/AddResourceMember.spec.js.snap +10 -9
- package/src/components/__tests__/__snapshots__/AdminMenu.spec.js.snap +22 -11
- package/src/components/__tests__/__snapshots__/Alert.spec.js.snap +29 -17
- package/src/components/__tests__/__snapshots__/AvailableFilters.spec.js.snap +1 -1
- package/src/components/__tests__/__snapshots__/CatalogMenu.spec.js.snap +18 -8
- package/src/components/__tests__/__snapshots__/CursorPagination.spec.js.snap +3 -0
- package/src/components/__tests__/__snapshots__/DateFilter.spec.js.snap +165 -107
- package/src/components/__tests__/__snapshots__/DomainSelector.spec.js.snap +1 -1
- package/src/components/__tests__/__snapshots__/FilterItem.spec.js.snap +13 -20
- package/src/components/__tests__/__snapshots__/GlossaryMenu.spec.js.snap +8 -0
- package/src/components/__tests__/__snapshots__/GrantMenu.spec.js.snap +14 -7
- package/src/components/__tests__/__snapshots__/GroupActions.spec.js.snap +0 -1
- package/src/components/__tests__/__snapshots__/Hierarchy.spec.js.snap +0 -1
- package/src/components/__tests__/__snapshots__/HierarchySelector.spec.js.snap +1 -1
- package/src/components/__tests__/__snapshots__/HistoryBackButton.spec.js.snap +10 -20
- package/src/components/__tests__/__snapshots__/IngestMenu.spec.js.snap +3 -1
- package/src/components/__tests__/__snapshots__/LineageMenu.spec.js.snap +6 -3
- package/src/components/__tests__/__snapshots__/Loading.spec.js.snap +5 -4
- package/src/components/__tests__/__snapshots__/MembersMenu.spec.js.snap +6 -3
- package/src/components/__tests__/__snapshots__/OptionGroup.spec.js.snap +38 -28
- package/src/components/__tests__/__snapshots__/Pagination.spec.js.snap +213 -64
- package/src/components/__tests__/__snapshots__/QualityMenu.spec.js.snap +14 -8
- package/src/components/__tests__/__snapshots__/ResourceMembers.spec.js.snap +1 -0
- package/src/components/__tests__/__snapshots__/ResourceMembersAction.spec.js.snap +2 -1
- package/src/components/__tests__/__snapshots__/RouteListener.spec.js.snap +1 -1
- package/src/components/__tests__/__snapshots__/SearchInput.spec.js.snap +10 -12
- package/src/components/__tests__/__snapshots__/SearchMenu.spec.js.snap +3 -1
- package/src/components/__tests__/__snapshots__/SelectedFilters.spec.js.snap +8 -8
- package/src/components/__tests__/__snapshots__/SideMenu.spec.js.snap +112 -50
- package/src/components/__tests__/__snapshots__/Submenu.spec.js.snap +3 -0
- package/src/components/__tests__/__snapshots__/SystemsLoader.spec.js.snap +3 -0
- package/src/components/__tests__/__snapshots__/TaxonomyMenu.spec.js.snap +3 -1
- package/src/components/__tests__/__snapshots__/TemplateSelector.spec.js.snap +7 -7
- package/src/components/common/SearchContextWrapper.js +1 -4
- package/src/hooks/__mocks__/useAuthorized.js +2 -0
- package/src/hooks/__mocks__/useUserFilters.js +17 -0
- package/src/hooks/__tests__/{useAclEntries.spec.js → useAclEntries.spec.js.disabled} +1 -1
- package/src/hooks/__tests__/useAuthorized.spec.js +1 -1
- package/src/hooks/useAclEntries.js +6 -3
- package/src/hooks/useActiveRoute.js +3 -3
- package/src/hooks/useActiveRoutes.js +4 -4
- package/src/hooks/useHierarchies.js +112 -0
- package/src/hooks/useLocales.js +1 -1
- package/src/hooks/useMessages.js +1 -1
- package/src/hooks/usePath.js +4 -4
- package/src/hooks/useUserFilters.js +1 -1
- package/src/i18n/components/EditableCell.js +1 -1
- package/src/i18n/components/I18nRoutes.js +11 -16
- package/src/i18n/components/LangProvider.js +56 -101
- package/src/i18n/components/LangProviderWrapper.js +26 -33
- package/src/i18n/components/Languages.js +8 -7
- package/src/i18n/components/MessageForm.js +9 -23
- package/src/i18n/components/Messages.js +5 -4
- package/src/i18n/components/MessagesTable.js +0 -1
- package/src/i18n/components/NewMessage.js +5 -4
- package/src/i18n/components/__tests__/EditableCell.spec.js +18 -20
- package/src/i18n/components/__tests__/I18nRoutes.spec.js +39 -5
- package/src/i18n/components/__tests__/MessageForm.spec.js +0 -1
- package/src/i18n/components/__tests__/Messages.spec.js +9 -21
- package/src/i18n/components/__tests__/NewMessage.spec.js +0 -1
- package/src/i18n/components/__tests__/__snapshots__/I18nRoutes.spec.js.snap +25 -1
- package/src/i18n/components/__tests__/__snapshots__/MessageForm.spec.js.snap +1 -0
- package/src/i18n/components/__tests__/__snapshots__/Messages.spec.js.snap +5 -13
- package/src/i18n/components/__tests__/__snapshots__/NewMessage.spec.js.snap +2 -0
- package/src/reducers/__tests__/comments.spec.js +9 -6
- package/src/reducers/__tests__/commentsResource.spec.js +5 -2
- package/src/reducers/__tests__/coreMessage.spec.js +1 -1
- package/src/reducers/__tests__/dashboardDomains.spec.js +5 -5
- package/src/reducers/__tests__/systems.spec.js +42 -0
- package/src/reducers/__tests__/systemsLoading.spec.js +22 -0
- package/src/reducers/index.js +5 -1
- package/src/reducers/systems.js +19 -0
- package/src/reducers/systemsLoading.js +14 -0
- package/src/router/Loader.js +10 -0
- package/src/router/ProtectedRoute.js +11 -0
- package/src/router/Unauthorized.js +16 -0
- package/src/router/__tests__/ProtectedRoute.spec.js +49 -0
- package/src/router/__tests__/Unauthorized.spec.js +15 -0
- package/src/router/__tests__/__snapshots__/ProtectedRoute.spec.js.snap +44 -0
- package/src/router/__tests__/__snapshots__/Unauthorized.spec.js.snap +26 -0
- package/src/router/index.js +5 -0
- package/src/routes.js +7 -7
- package/src/routesTree.js +93 -0
- package/src/routines.js +8 -0
- package/src/sagas/__tests__/addComment.spec.js +3 -5
- package/src/sagas/__tests__/fetchComments.spec.js +1 -1
- package/src/sagas/__tests__/fetchSystems.spec.js +69 -0
- package/src/sagas/fetchSystems.js +25 -0
- package/src/sagas/index.js +3 -0
- package/src/search/FilterDropdown.js +0 -1
- package/src/search/FilterItem.js +0 -1
- package/src/search/FilterMultilevelDropdown.js +1 -1
- package/src/search/FilterQueryDropdown.js +38 -42
- package/src/search/HierarchyFilterDropdown.js +3 -4
- package/src/search/ModalSaveFilter.js +1 -1
- package/src/search/Pagination.js +0 -1
- package/src/search/SearchContext.js +9 -11
- package/src/search/SearchDateFilter.js +0 -1
- package/src/search/SearchFilters.js +1 -2
- package/src/search/SearchSelectedFilters.js +4 -4
- package/src/search/SearchWidget.js +0 -4
- package/src/search/UserFilter.js +0 -2
- package/src/search/UserFilters.js +4 -3
- package/src/search/__tests__/FilterDropdown.spec.js +54 -51
- package/src/search/__tests__/FilterItem.spec.js +20 -15
- package/src/search/__tests__/FilterQueryDropdown.spec.js +106 -84
- package/src/search/__tests__/ModalSaveFilter.spec.js +4 -5
- package/src/search/__tests__/SearchContext.spec.js +3 -4
- package/src/search/__tests__/SearchWidget.spec.js +0 -1
- package/src/selectors/__tests__/getConceptSubscope.spec.js +37 -0
- package/src/selectors/__tests__/getDashboardConfig.spec.js +9 -9
- package/src/selectors/__tests__/getMessage.spec.js +1 -1
- package/src/selectors/__tests__/getSidemenuGlossarySubscopes.spec.js +17 -0
- package/src/selectors/__tests__/makeActiveFiltersSelector.spec.js +2 -2
- package/src/selectors/__tests__/makeSearchQuerySelector.spec.js +1 -1
- package/src/selectors/__tests__/makeTagOptionsSelector.spec.js +6 -6
- package/src/selectors/getConceptSubscope.js +19 -0
- package/src/selectors/getMessage.js +2 -2
- package/src/selectors/getRecipients.js +34 -0
- package/src/selectors/getSidemenuGlossarySubscopes.js +8 -0
- package/src/selectors/index.js +5 -0
- package/src/selectors/makeActiveFiltersSelector.js +2 -6
- package/src/selectors/makeSearchQuerySelector.js +4 -11
- package/src/selectors/makeTagOptionsSelector.js +4 -8
- package/src/selectors/subscopedTemplates.js +16 -0
- package/src/selectors/taxonomy.js +170 -0
- package/src/services/__tests__/columnDecorator.spec.js +1 -1
- package/src/services/__tests__/dateFilterFormatter.spec.js +2 -2
- package/src/services/__tests__/fieldType.spec.js +2 -2
- package/src/services/__tests__/filters.spec.js +1 -1
- package/src/services/__tests__/message.spec.js +2 -2
- package/src/services/__tests__/operators.spec.js +5 -5
- package/src/services/__tests__/sort.spec.js +8 -8
- package/src/services/__tests__/storage.spec.js +17 -0
- package/src/services/arrays.js +16 -14
- package/src/services/columnDecoratorComponent.js +2 -2
- package/src/services/columnDecorators.js +0 -1
- package/src/services/fieldType.js +8 -8
- package/src/services/filters.js +5 -5
- package/src/services/message.js +1 -4
- package/src/services/operators.js +1 -1
|
@@ -1,44 +1,49 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { mount } from "enzyme";
|
|
1
|
+
import { render, waitForLoad } from "@truedat/test/render";
|
|
3
2
|
import { FiltersLoader } from "../FiltersLoader";
|
|
4
3
|
|
|
5
4
|
describe("<FiltersLoader/>", () => {
|
|
6
5
|
const filters = { foo: "foo" };
|
|
7
6
|
|
|
8
|
-
it("
|
|
7
|
+
it("calls fetchFilters when component mounts but not when it unmounts", async () => {
|
|
9
8
|
const props = {
|
|
10
9
|
filters,
|
|
11
10
|
fetchFilters: jest.fn(),
|
|
12
|
-
clearFilters: jest.fn()
|
|
11
|
+
clearFilters: jest.fn(),
|
|
13
12
|
};
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
expect(props.fetchFilters
|
|
13
|
+
const rendered = render(<FiltersLoader {...props} />);
|
|
14
|
+
await waitForLoad(rendered);
|
|
15
|
+
|
|
16
|
+
expect(props.fetchFilters).toHaveBeenCalledTimes(1);
|
|
17
|
+
expect(props.fetchFilters).toHaveBeenCalledWith({ filters });
|
|
18
|
+
rendered.unmount();
|
|
19
|
+
expect(props.fetchFilters).toHaveBeenCalledTimes(1);
|
|
19
20
|
});
|
|
20
21
|
|
|
21
|
-
it("
|
|
22
|
+
it("calls clearFilters when component unmounts but not when it mounts", async () => {
|
|
22
23
|
const props = {
|
|
23
24
|
filters,
|
|
24
25
|
fetchFilters: jest.fn(),
|
|
25
|
-
clearFilters: jest.fn()
|
|
26
|
+
clearFilters: jest.fn(),
|
|
26
27
|
};
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
expect(props.clearFilters
|
|
28
|
+
const rendered = render(<FiltersLoader {...props} />);
|
|
29
|
+
await waitForLoad(rendered);
|
|
30
|
+
|
|
31
|
+
expect(props.clearFilters).toHaveBeenCalledTimes(0);
|
|
32
|
+
rendered.unmount();
|
|
33
|
+
expect(props.clearFilters).toHaveBeenCalledTimes(1);
|
|
31
34
|
});
|
|
32
35
|
|
|
33
|
-
it("
|
|
36
|
+
it("calls clearSort when component unmounts if present", async () => {
|
|
34
37
|
const props = {
|
|
35
38
|
filters,
|
|
36
39
|
fetchFilters: jest.fn(),
|
|
37
40
|
clearFilters: jest.fn(),
|
|
38
|
-
clearSort: jest.fn()
|
|
41
|
+
clearSort: jest.fn(),
|
|
39
42
|
};
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
const rendered = render(<FiltersLoader {...props} />);
|
|
44
|
+
await waitForLoad(rendered);
|
|
45
|
+
|
|
46
|
+
rendered.unmount();
|
|
47
|
+
expect(props.clearSort).toHaveBeenCalledTimes(1);
|
|
43
48
|
});
|
|
44
49
|
});
|
|
@@ -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";
|
|
@@ -28,8 +27,10 @@ const hierarchy = {
|
|
|
28
27
|
],
|
|
29
28
|
};
|
|
30
29
|
|
|
31
|
-
jest.mock("@truedat/
|
|
32
|
-
const originalModule = jest.requireActual(
|
|
30
|
+
jest.mock("@truedat/core/hooks/useHierarchies", () => {
|
|
31
|
+
const originalModule = jest.requireActual(
|
|
32
|
+
"@truedat/core/hooks/useHierarchies"
|
|
33
|
+
);
|
|
33
34
|
|
|
34
35
|
return {
|
|
35
36
|
__esModule: true,
|
|
@@ -42,6 +43,7 @@ jest.mock("@truedat/df/hooks/useHierarchies", () => {
|
|
|
42
43
|
});
|
|
43
44
|
|
|
44
45
|
describe("<HierarchyFilterDropdown />", () => {
|
|
46
|
+
const user = userEvent.setup({ delay: null });
|
|
45
47
|
const toggleFilterValue = jest.fn();
|
|
46
48
|
const openFilter = jest.fn();
|
|
47
49
|
const closeFilter = jest.fn();
|
|
@@ -96,19 +98,19 @@ describe("<HierarchyFilterDropdown />", () => {
|
|
|
96
98
|
}
|
|
97
99
|
);
|
|
98
100
|
|
|
99
|
-
|
|
101
|
+
await user.click(getByRole("listbox"));
|
|
100
102
|
|
|
101
|
-
|
|
103
|
+
await user.click(container.querySelector('[class="chevron right icon"]'));
|
|
102
104
|
await waitFor(() => {
|
|
103
105
|
expect(getByRole("option", { name: /bar/i })).toBeTruthy();
|
|
104
106
|
});
|
|
105
|
-
|
|
107
|
+
await user.click(container.querySelector('[class="chevron down icon"]'));
|
|
106
108
|
await waitFor(() => {
|
|
107
109
|
expect(queryByText(/bar/)).toBeFalsy();
|
|
108
110
|
});
|
|
109
|
-
|
|
111
|
+
await user.click(container.querySelector('[class="chevron right icon"]'));
|
|
110
112
|
// Select value
|
|
111
|
-
|
|
113
|
+
await user.click(getByRole("option", { name: /bar/i }));
|
|
112
114
|
await waitFor(() => {
|
|
113
115
|
expect(toggleFilterValue).toHaveBeenCalledWith({
|
|
114
116
|
filter,
|
|
@@ -119,13 +121,13 @@ describe("<HierarchyFilterDropdown />", () => {
|
|
|
119
121
|
<HierarchyFilterDropdown {...{ ...props, activeValues: ["123_2"] }} />
|
|
120
122
|
);
|
|
121
123
|
// Unselect
|
|
122
|
-
|
|
124
|
+
await user.click(getByRole("option", { name: /bar/i }));
|
|
123
125
|
await waitFor(() => {
|
|
124
126
|
expect(toggleFilterValue).toHaveBeenCalledWith({ filter, value: [] });
|
|
125
127
|
});
|
|
126
128
|
// Select parent
|
|
127
129
|
rerender(<HierarchyFilterDropdown {...{ ...props, activeValues: [] }} />);
|
|
128
|
-
|
|
130
|
+
await user.click(getByRole("option", { name: /foo/i }));
|
|
129
131
|
await waitFor(() => {
|
|
130
132
|
expect(toggleFilterValue).toHaveBeenCalledWith({
|
|
131
133
|
filter,
|
|
@@ -138,7 +140,7 @@ describe("<HierarchyFilterDropdown />", () => {
|
|
|
138
140
|
{...{ ...props, activeValues: ["123_1", "123_2"] }}
|
|
139
141
|
/>
|
|
140
142
|
);
|
|
141
|
-
|
|
143
|
+
await user.click(getByRole("option", { name: /bar/i }));
|
|
142
144
|
await waitFor(() => {
|
|
143
145
|
expect(toggleFilterValue).toHaveBeenCalledWith({
|
|
144
146
|
filter,
|
|
@@ -146,7 +148,7 @@ describe("<HierarchyFilterDropdown />", () => {
|
|
|
146
148
|
});
|
|
147
149
|
});
|
|
148
150
|
// Delete filter
|
|
149
|
-
|
|
151
|
+
await user.click(container.querySelector('[class="delete icon"]'));
|
|
150
152
|
await waitFor(() => {
|
|
151
153
|
expect(removeFilter).toBeCalledTimes(1);
|
|
152
154
|
});
|
|
@@ -173,7 +175,7 @@ describe("<HierarchyFilterDropdown />", () => {
|
|
|
173
175
|
}
|
|
174
176
|
);
|
|
175
177
|
|
|
176
|
-
|
|
178
|
+
await user.click(getByRole("listbox"));
|
|
177
179
|
|
|
178
180
|
await waitFor(() => {
|
|
179
181
|
expect(getByRole("option", { name: /foo/i })).toBeTruthy();
|
|
@@ -181,7 +183,7 @@ describe("<HierarchyFilterDropdown />", () => {
|
|
|
181
183
|
});
|
|
182
184
|
|
|
183
185
|
const input = container.querySelector('[type="text"]');
|
|
184
|
-
|
|
186
|
+
await user.type(input, "bar");
|
|
185
187
|
|
|
186
188
|
await waitFor(() => {
|
|
187
189
|
expect(getByRole("option", { name: /bar/i })).toBeTruthy();
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { waitFor } from "@testing-library/react";
|
|
3
1
|
import userEvent from "@testing-library/user-event";
|
|
4
|
-
import {
|
|
2
|
+
import { waitFor } from "@testing-library/react";
|
|
3
|
+
import { render, waitForLoad } from "@truedat/test/render";
|
|
5
4
|
import HierarchySelector from "../HierarchySelector";
|
|
6
|
-
import en from "../../messages/en";
|
|
7
5
|
|
|
8
6
|
const hierarchy = {
|
|
9
7
|
id: 123,
|
|
@@ -21,13 +19,15 @@ const hierarchy = {
|
|
|
21
19
|
],
|
|
22
20
|
};
|
|
23
21
|
|
|
24
|
-
jest.mock("react-router
|
|
25
|
-
...jest.requireActual("react-router
|
|
22
|
+
jest.mock("react-router", () => ({
|
|
23
|
+
...jest.requireActual("react-router"),
|
|
26
24
|
useParams: () => ({ id: 123 }),
|
|
27
25
|
}));
|
|
28
26
|
|
|
29
|
-
jest.mock("@truedat/
|
|
30
|
-
const originalModule = jest.requireActual(
|
|
27
|
+
jest.mock("@truedat/core/hooks/useHierarchies", () => {
|
|
28
|
+
const originalModule = jest.requireActual(
|
|
29
|
+
"@truedat/core/hooks/useHierarchies"
|
|
30
|
+
);
|
|
31
31
|
|
|
32
32
|
return {
|
|
33
33
|
__esModule: true,
|
|
@@ -39,14 +39,6 @@ jest.mock("@truedat/df/hooks/useHierarchies", () => {
|
|
|
39
39
|
};
|
|
40
40
|
});
|
|
41
41
|
|
|
42
|
-
const renderOpts = {
|
|
43
|
-
messages: {
|
|
44
|
-
en: {
|
|
45
|
-
...en,
|
|
46
|
-
},
|
|
47
|
-
},
|
|
48
|
-
fallback: "lazy",
|
|
49
|
-
};
|
|
50
42
|
const props = {
|
|
51
43
|
hierarchy,
|
|
52
44
|
loading: false,
|
|
@@ -58,33 +50,34 @@ const props = {
|
|
|
58
50
|
|
|
59
51
|
describe("<HierarchySelector />", () => {
|
|
60
52
|
it("matches latest snapshot", async () => {
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
53
|
+
const rendered = render(<HierarchySelector {...props} />);
|
|
54
|
+
await waitForLoad(rendered);
|
|
55
|
+
|
|
56
|
+
await waitFor(() =>
|
|
57
|
+
expect(rendered.queryByText(/foo/i)).toBeInTheDocument()
|
|
64
58
|
);
|
|
65
|
-
|
|
66
|
-
expect(queryByText(/foo/)).toBeInTheDocument();
|
|
67
|
-
});
|
|
68
|
-
expect(container).toMatchSnapshot();
|
|
59
|
+
expect(rendered.container).toMatchSnapshot();
|
|
69
60
|
});
|
|
70
61
|
|
|
71
62
|
it("calls onChange with selected values", async () => {
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
);
|
|
63
|
+
const rendered = render(<HierarchySelector {...props} />);
|
|
64
|
+
await waitForLoad(rendered);
|
|
65
|
+
|
|
66
|
+
const user = userEvent.setup({ delay: null });
|
|
76
67
|
|
|
77
|
-
await waitFor(() =>
|
|
78
|
-
expect(
|
|
79
|
-
|
|
68
|
+
await waitFor(() =>
|
|
69
|
+
expect(
|
|
70
|
+
rendered.queryByText(/hierarchy.multiple.placeholder/i)
|
|
71
|
+
).toBeInTheDocument()
|
|
72
|
+
);
|
|
80
73
|
|
|
81
|
-
|
|
74
|
+
await user.click(rendered.getByText(/hierarchy.multiple.placeholder/i));
|
|
82
75
|
|
|
83
|
-
await waitFor(() =>
|
|
84
|
-
expect(getByRole("option", { name: /foo/i })).
|
|
85
|
-
|
|
76
|
+
await waitFor(() =>
|
|
77
|
+
expect(rendered.getByRole("option", { name: /foo/i })).toBeInTheDocument()
|
|
78
|
+
);
|
|
86
79
|
|
|
87
|
-
|
|
80
|
+
await user.click(rendered.getByRole("option", { name: /foo/i }));
|
|
88
81
|
expect(props.onChange.mock.calls.length).toBe(1);
|
|
89
82
|
expect(props.onChange.mock.calls[0][1]).toEqual({ value: [1] });
|
|
90
83
|
});
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import { MemoryRouter } from "react-router-dom";
|
|
1
|
+
import userEvent from "@testing-library/user-event";
|
|
2
|
+
import { render, waitForLoad } from "@truedat/test/render";
|
|
4
3
|
import { HistoryBackButton } from "../HistoryBackButton";
|
|
5
4
|
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
jest.mock("react-router-dom", () => ({
|
|
11
|
-
...jest.requireActual("react-router-dom"),
|
|
12
|
-
useHistory: () => mockHistory
|
|
5
|
+
const mockNavigate = jest.fn();
|
|
6
|
+
jest.mock("react-router", () => ({
|
|
7
|
+
...jest.requireActual("react-router"),
|
|
8
|
+
useNavigate: () => mockNavigate,
|
|
13
9
|
}));
|
|
14
10
|
|
|
15
11
|
describe("<HistoryBackButton />", () => {
|
|
16
12
|
const content = "Cancel";
|
|
17
13
|
const props = { content };
|
|
18
14
|
|
|
19
|
-
it("matches the latest snapshot", () => {
|
|
20
|
-
const
|
|
21
|
-
|
|
15
|
+
it("matches the latest snapshot", async () => {
|
|
16
|
+
const rendered = render(<HistoryBackButton {...props} />);
|
|
17
|
+
await waitForLoad(rendered);
|
|
18
|
+
expect(rendered.container).toMatchSnapshot();
|
|
22
19
|
});
|
|
23
20
|
|
|
24
|
-
it("prevents submit and
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
21
|
+
it("prevents submit and navigates back when clicked", async () => {
|
|
22
|
+
const rendered = render(<HistoryBackButton {...props} />);
|
|
23
|
+
await waitForLoad(rendered);
|
|
24
|
+
|
|
25
|
+
const user = userEvent.setup({ delay: null });
|
|
26
|
+
const preventDefault = jest.fn();
|
|
27
|
+
|
|
28
|
+
const button = rendered.getByText(/cancel/i);
|
|
29
|
+
button.addEventListener("click", preventDefault);
|
|
30
|
+
|
|
31
|
+
await user.click(button);
|
|
32
|
+
expect(preventDefault).toHaveBeenCalled();
|
|
33
|
+
expect(mockNavigate).toHaveBeenCalledWith(-1);
|
|
34
34
|
});
|
|
35
35
|
});
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { shallow } from "enzyme";
|
|
1
|
+
import { render } from "@truedat/test/render";
|
|
3
2
|
import { Loading } from "../Loading";
|
|
4
3
|
|
|
5
4
|
describe("<Loading />", () => {
|
|
6
|
-
it("matches the latest snapshot", () => {
|
|
7
|
-
const
|
|
8
|
-
expect(
|
|
5
|
+
it("matches the latest snapshot", async () => {
|
|
6
|
+
const rendered = render(<Loading inline="centered" />);
|
|
7
|
+
expect(rendered.container).toMatchSnapshot();
|
|
9
8
|
});
|
|
10
9
|
});
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { shallow } from "enzyme";
|
|
1
|
+
import { render, waitForLoad } from "@truedat/test/render";
|
|
3
2
|
import { OptionGroup } from "../OptionGroup";
|
|
4
3
|
|
|
5
4
|
describe("<OptionGroup />", () => {
|
|
6
|
-
it("matches the latest snapshot", () => {
|
|
7
|
-
const
|
|
8
|
-
|
|
5
|
+
it("matches the latest snapshot", async () => {
|
|
6
|
+
const rendered = render(<OptionGroup options={[]} />);
|
|
7
|
+
await waitForLoad(rendered);
|
|
8
|
+
expect(rendered.container).toMatchSnapshot();
|
|
9
9
|
});
|
|
10
|
-
|
|
11
|
-
// TODO
|
|
12
10
|
});
|
|
@@ -1,33 +1,39 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { shallow } from "enzyme";
|
|
3
|
-
import { Pagination as SemanticPagination } from "semantic-ui-react";
|
|
1
|
+
import { render, waitForLoad } from "@truedat/test/render";
|
|
4
2
|
import { Pagination, MAX_PAGES } from "../Pagination";
|
|
5
3
|
|
|
6
4
|
describe("<Pagination />", () => {
|
|
7
5
|
const props = {
|
|
8
6
|
activePage: 1,
|
|
9
|
-
selectPage: jest.fn()
|
|
7
|
+
selectPage: jest.fn(),
|
|
10
8
|
};
|
|
11
9
|
|
|
12
|
-
it("matches the latest snapshot", () => {
|
|
13
|
-
const
|
|
14
|
-
|
|
10
|
+
it("matches the latest snapshot", async () => {
|
|
11
|
+
const rendered = render(<Pagination totalPages={10} {...props} />);
|
|
12
|
+
await waitForLoad(rendered);
|
|
13
|
+
expect(rendered.container).toMatchSnapshot();
|
|
15
14
|
});
|
|
16
15
|
|
|
17
|
-
it("matches the latest snapshot (totalPages > 100)", () => {
|
|
18
|
-
const
|
|
19
|
-
|
|
16
|
+
it("matches the latest snapshot (totalPages > 100)", async () => {
|
|
17
|
+
const rendered = render(<Pagination totalPages={200} {...props} />);
|
|
18
|
+
await waitForLoad(rendered);
|
|
19
|
+
expect(rendered.container).toMatchSnapshot();
|
|
20
20
|
});
|
|
21
21
|
|
|
22
|
-
it("has no last item if totalPages exceeds page limit", () => {
|
|
23
|
-
const
|
|
22
|
+
it("has no last item if totalPages exceeds page limit", async () => {
|
|
23
|
+
const rendered = render(
|
|
24
24
|
<Pagination totalPages={MAX_PAGES + 1} {...props} />
|
|
25
25
|
);
|
|
26
|
-
|
|
26
|
+
await waitForLoad(rendered);
|
|
27
|
+
const pagination = rendered.container.querySelector(".ui.pagination");
|
|
28
|
+
expect(pagination.querySelector("[aria-label='Last item']")).toBeNull();
|
|
27
29
|
});
|
|
28
30
|
|
|
29
|
-
it("has a last item if totalPages is within the page limit", () => {
|
|
30
|
-
const
|
|
31
|
-
|
|
31
|
+
it("has a last item if totalPages is within the page limit", async () => {
|
|
32
|
+
const rendered = render(<Pagination totalPages={MAX_PAGES} {...props} />);
|
|
33
|
+
await waitForLoad(rendered);
|
|
34
|
+
const pagination = rendered.container.querySelector(".ui.pagination");
|
|
35
|
+
expect(
|
|
36
|
+
pagination.querySelector("[aria-label='Last item']")
|
|
37
|
+
).toHaveTextContent("»");
|
|
32
38
|
});
|
|
33
39
|
});
|
|
@@ -1,17 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { mount } from "enzyme";
|
|
3
|
-
import { MemoryRouter } from "react-router-dom";
|
|
1
|
+
import { render, waitForLoad } from "@truedat/test/render";
|
|
4
2
|
import { Redirector } from "../Redirector";
|
|
5
3
|
|
|
6
4
|
describe("<Redirector />", () => {
|
|
7
|
-
it("dispatches clearRedirect on mount", () => {
|
|
5
|
+
it("dispatches clearRedirect on mount", async () => {
|
|
8
6
|
const clearRedirect = jest.fn();
|
|
9
7
|
const props = { clearRedirect };
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
</MemoryRouter>
|
|
14
|
-
);
|
|
15
|
-
expect(clearRedirect.mock.calls).toHaveLength(1);
|
|
8
|
+
const rendered = render(<Redirector {...props} />);
|
|
9
|
+
await waitForLoad(rendered);
|
|
10
|
+
expect(clearRedirect).toHaveBeenCalledTimes(1);
|
|
16
11
|
});
|
|
17
12
|
});
|
|
@@ -1,16 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { waitFor } from "@testing-library/react";
|
|
2
2
|
import userEvent from "@testing-library/user-event";
|
|
3
|
-
import { render } from "@truedat/test/render";
|
|
4
|
-
import { intl } from "@truedat/test/intl-stub";
|
|
3
|
+
import { render, waitForLoad } from "@truedat/test/render";
|
|
5
4
|
import { useAclEntries } from "@truedat/core/hooks/useAclEntries";
|
|
6
5
|
import { ResourceMembers } from "../ResourceMembers";
|
|
7
6
|
|
|
8
|
-
// workaround for enzyme issue with React.useContext
|
|
9
|
-
// see https://github.com/airbnb/enzyme/issues/2176#issuecomment-532361526
|
|
10
|
-
jest.spyOn(React, "useContext").mockImplementation(() => intl);
|
|
11
7
|
jest.mock("@truedat/core/hooks/useAclEntries");
|
|
12
|
-
jest.mock("react-router
|
|
13
|
-
...jest.requireActual("react-router
|
|
8
|
+
jest.mock("react-router", () => ({
|
|
9
|
+
...jest.requireActual("react-router"),
|
|
14
10
|
}));
|
|
15
11
|
|
|
16
12
|
jest.mock("@truedat/core/hooks/useAclEntries", () => ({
|
|
@@ -73,7 +69,7 @@ describe("<ResourceMembers />", () => {
|
|
|
73
69
|
],
|
|
74
70
|
};
|
|
75
71
|
|
|
76
|
-
const props = { type: "domain", id: 1 };
|
|
72
|
+
const props = { type: "domain", id: "1" };
|
|
77
73
|
|
|
78
74
|
useAclEntries.mockReturnValue({
|
|
79
75
|
data: { ...aclEntries, actions: { canCreate: true } },
|
|
@@ -81,36 +77,49 @@ describe("<ResourceMembers />", () => {
|
|
|
81
77
|
mutate: jest.fn(),
|
|
82
78
|
});
|
|
83
79
|
|
|
84
|
-
it("matches the latest snapshot", () => {
|
|
85
|
-
const
|
|
86
|
-
|
|
80
|
+
it("matches the latest snapshot", async () => {
|
|
81
|
+
const rendered = render(<ResourceMembers {...props} />);
|
|
82
|
+
await waitForLoad(rendered);
|
|
83
|
+
expect(rendered.container).toMatchSnapshot();
|
|
87
84
|
});
|
|
88
85
|
|
|
89
|
-
it("filters users and groups according to search filter", () => {
|
|
90
|
-
const
|
|
86
|
+
it("filters users and groups according to search filter", async () => {
|
|
87
|
+
const rendered = render(<ResourceMembers {...props} />);
|
|
88
|
+
await waitForLoad(rendered);
|
|
91
89
|
|
|
92
|
-
const input = getByRole("textbox");
|
|
90
|
+
const input = rendered.getByRole("textbox");
|
|
91
|
+
const user = userEvent.setup({ delay: null });
|
|
93
92
|
|
|
94
|
-
|
|
93
|
+
await user.type(input, "data");
|
|
95
94
|
expect(document.getElementsByClassName("card").length).toBe(2);
|
|
96
95
|
|
|
97
|
-
|
|
96
|
+
await user.type(input, " owner");
|
|
98
97
|
expect(document.getElementsByClassName("card").length).toBe(1);
|
|
99
98
|
});
|
|
100
99
|
|
|
101
|
-
it("renders users and groups grouped by role name", () => {
|
|
102
|
-
const
|
|
100
|
+
it("renders users and groups grouped by role name", async () => {
|
|
101
|
+
const rendered = render(<ResourceMembers {...props} />);
|
|
102
|
+
await waitForLoad(rendered);
|
|
103
103
|
|
|
104
|
-
expect(
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
expect(
|
|
105
|
+
rendered.getByRole("heading", { name: /data_owner/i })
|
|
106
|
+
).toBeInTheDocument();
|
|
107
|
+
expect(
|
|
108
|
+
rendered.getByRole("heading", { name: /datos a/i })
|
|
109
|
+
).toBeInTheDocument();
|
|
110
|
+
expect(
|
|
111
|
+
rendered.getByRole("heading", { name: /last r/i })
|
|
112
|
+
).toBeInTheDocument();
|
|
107
113
|
|
|
108
|
-
const input = getByRole("textbox");
|
|
114
|
+
const input = rendered.getByRole("textbox");
|
|
115
|
+
const user = userEvent.setup({ delay: null });
|
|
109
116
|
|
|
110
|
-
|
|
117
|
+
await user.type(input, "data");
|
|
111
118
|
|
|
112
|
-
expect(
|
|
113
|
-
|
|
114
|
-
|
|
119
|
+
expect(
|
|
120
|
+
rendered.getByRole("heading", { name: /data_owner/i })
|
|
121
|
+
).toBeInTheDocument();
|
|
122
|
+
expect(rendered.queryByRole("heading", { name: /datos a/i })).toBeNull();
|
|
123
|
+
expect(rendered.queryByRole("heading", { name: /last r/i })).toBeNull();
|
|
115
124
|
});
|
|
116
125
|
});
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import React from "react";
|
|
2
1
|
import { render } from "@truedat/test/render";
|
|
3
2
|
import { ResourceMembersActions } from "../ResourceMembersActions";
|
|
4
3
|
|
|
5
4
|
const props = {
|
|
6
5
|
resource: {
|
|
7
6
|
type: "domain",
|
|
8
|
-
id: 1,
|
|
7
|
+
id: "1",
|
|
9
8
|
},
|
|
10
9
|
actions: {
|
|
11
10
|
canCreate: true,
|