@griddo/ax 10.1.96 → 10.2.0

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 (201) hide show
  1. package/package.json +3 -2
  2. package/src/__mocks__/axios/Roles.ts +10 -0
  3. package/src/__mocks__/axios/UserList.ts +545 -0
  4. package/src/__mocks__/store/GenericStore.ts +25 -0
  5. package/src/__mocks__/store/Roles.ts +1050 -0
  6. package/src/__mocks__/store/SitesList.ts +7 -1
  7. package/src/__mocks__/store/UserList.ts +482 -0
  8. package/src/__mocks__/store/UsersCreate.ts +298 -0
  9. package/src/__tests__/components/Avatar/Avatar.test.tsx +49 -48
  10. package/src/__tests__/components/ConfigPanel/ConfigPanel.test.tsx +2 -0
  11. package/src/__tests__/components/ConfigPanel/Form/Form.test.tsx +2 -0
  12. package/src/__tests__/components/ConfigPanel/GlobalPageForm/GlobalPageForm.test.tsx +25 -0
  13. package/src/__tests__/components/Fields/Button/Button.test.tsx +2 -2
  14. package/src/__tests__/components/Fields/ImageField/ImageField.test.tsx +2 -0
  15. package/src/__tests__/components/Fields/IntegrationsField/IntegrationsField.test.tsx +44 -2
  16. package/src/__tests__/components/Fields/Tooltip/Tooltip.test.tsx +0 -1
  17. package/src/__tests__/components/Gallery/Gallery.test.tsx +4 -0
  18. package/src/__tests__/components/Gallery/GalleryPanel/DetailPanel/DetailPanel.test.tsx +14 -0
  19. package/src/__tests__/components/Gallery/GalleryPanel/GalleryPanel.test.tsx +2 -1
  20. package/src/__tests__/components/Lists/Lists.test.tsx +3 -3
  21. package/src/__tests__/components/Login/Login.test.tsx +1 -1
  22. package/src/__tests__/components/TableFilters/DateFilter/DateFilter.test.tsx +1 -1
  23. package/src/__tests__/components/TableFilters/NameFilter/NameFilter.test.tsx +1 -1
  24. package/src/__tests__/components/TableFilters/RoleFilter/RoleFilter.test.tsx +165 -0
  25. package/src/__tests__/components/TableFilters/StatusFilter/StatusFilter.test.tsx +2 -2
  26. package/src/__tests__/components/TableFilters/UsersFilter/UsersFilter.test.tsx +153 -0
  27. package/src/__tests__/components/Tabs/Tabs.test.tsx +1 -1
  28. package/src/__tests__/modules/Settings/Integrations/Integrations.test.tsx +6 -0
  29. package/src/__tests__/modules/Sites/Sites.test.tsx +2 -1
  30. package/src/__tests__/modules/Sites/SitesList/ListView/BulkHeader/BulkHeader.test.tsx +14 -5
  31. package/src/__tests__/modules/Sites/SitesList/SitesList.test.tsx +6 -4
  32. package/src/__tests__/modules/Users/Roles/BulkHeader/BulkHeader.test.tsx +158 -0
  33. package/src/__tests__/modules/Users/Roles/Roles.test.tsx +619 -0
  34. package/src/__tests__/modules/Users/UserCreate/SiteItem/RolesModal/RoleItem/RoleItem.test.tsx +107 -0
  35. package/src/__tests__/modules/Users/UserCreate/SiteItem/RolesModal/RolesModal.test.tsx +159 -0
  36. package/src/__tests__/modules/Users/UserCreate/SiteItem/SiteItem.test.tsx +175 -0
  37. package/src/__tests__/modules/Users/UserCreate/UserCreate.test.tsx +320 -0
  38. package/src/__tests__/modules/Users/UserList/UserItem/UserItem.test.tsx +417 -0
  39. package/src/__tests__/modules/Users/UserList/UserList.test.tsx +310 -0
  40. package/src/api/index.tsx +2 -0
  41. package/src/api/roles.tsx +77 -0
  42. package/src/api/users.tsx +22 -2
  43. package/src/components/ActionMenu/index.tsx +12 -6
  44. package/src/components/Avatar/index.tsx +5 -3
  45. package/src/components/Avatar/style.tsx +8 -9
  46. package/src/components/BulkSelectionOptions/index.tsx +19 -12
  47. package/src/components/BulkSelectionOptions/style.tsx +6 -11
  48. package/src/components/ConfigPanel/Form/index.tsx +24 -1
  49. package/src/components/ConfigPanel/GlobalPageForm/index.tsx +17 -4
  50. package/src/components/ElementsTooltip/index.tsx +1 -1
  51. package/src/components/Fields/IntegrationsField/index.tsx +5 -6
  52. package/src/components/Fields/RadioField/index.tsx +1 -1
  53. package/src/components/Fields/ReferenceField/AutoPanel/index.tsx +3 -3
  54. package/src/components/Fields/ReferenceField/ItemList/index.tsx +1 -1
  55. package/src/components/Fields/ReferenceField/ManualPanel/index.tsx +3 -3
  56. package/src/components/Fields/TagsField/index.tsx +4 -2
  57. package/src/components/Fields/TextField/index.tsx +3 -0
  58. package/src/components/Fields/UrlField/index.tsx +5 -5
  59. package/src/components/Gallery/GalleryPanel/DetailPanel/index.tsx +42 -15
  60. package/src/components/Gallery/GalleryPanel/GalleryDragAndDrop/index.tsx +1 -1
  61. package/src/components/Gallery/GalleryPanel/index.tsx +20 -5
  62. package/src/components/Gallery/index.tsx +12 -6
  63. package/src/components/Icon/index.tsx +9 -1
  64. package/src/components/MainWrapper/AppBar/atoms.tsx +2 -2
  65. package/src/components/MainWrapper/AppBar/index.tsx +12 -10
  66. package/src/components/MainWrapper/AppBar/style.tsx +2 -1
  67. package/src/components/Modal/style.tsx +2 -2
  68. package/src/components/Nav/index.tsx +12 -2
  69. package/src/components/PageFinder/index.tsx +2 -2
  70. package/src/components/SearchField/index.tsx +3 -8
  71. package/src/components/TableFilters/PermissionsFilter/index.tsx +50 -0
  72. package/src/{modules/Users/UserList/HeaderMenus/Name → components/TableFilters/PermissionsFilter}/style.tsx +6 -2
  73. package/src/components/TableFilters/RoleFilter/index.tsx +61 -0
  74. package/src/components/TableFilters/RoleFilter/style.tsx +28 -0
  75. package/src/components/TableFilters/UsersFilter/index.tsx +55 -0
  76. package/src/components/TableFilters/UsersFilter/style.tsx +31 -0
  77. package/src/components/TableFilters/index.tsx +6 -0
  78. package/src/components/TableList/TableItem/style.tsx +2 -2
  79. package/src/components/TableList/style.tsx +1 -1
  80. package/src/components/index.tsx +7 -1
  81. package/src/containers/App/actions.tsx +3 -3
  82. package/src/containers/PageEditor/actions.tsx +14 -20
  83. package/src/containers/Redirects/actions.tsx +1 -0
  84. package/src/containers/Sites/actions.tsx +22 -14
  85. package/src/containers/Sites/interfaces.tsx +3 -3
  86. package/src/containers/Sites/reducer.tsx +1 -1
  87. package/src/containers/StructuredData/actions.tsx +15 -3
  88. package/src/containers/Users/actions.tsx +160 -26
  89. package/src/containers/Users/constants.tsx +8 -10
  90. package/src/containers/Users/interfaces.tsx +25 -3
  91. package/src/containers/Users/reducer.tsx +24 -15
  92. package/src/guards/index.tsx +2 -1
  93. package/src/guards/restricted/index.tsx +21 -0
  94. package/src/hooks/index.tsx +3 -0
  95. package/src/hooks/users.tsx +38 -0
  96. package/src/modules/App/Routing/NavMenu/NavItem/index.tsx +10 -5
  97. package/src/modules/App/Routing/NavMenu/index.tsx +16 -7
  98. package/src/modules/App/Routing/PrivateRoute/index.tsx +13 -5
  99. package/src/modules/App/Routing/index.tsx +17 -6
  100. package/src/modules/Categories/CategoriesList/BulkHeader/TableHeader/style.tsx +1 -0
  101. package/src/modules/Categories/CategoriesList/BulkHeader/index.tsx +2 -10
  102. package/src/modules/Categories/CategoriesList/CategoryItem/index.tsx +27 -12
  103. package/src/modules/Categories/CategoriesList/CategoryItem/style.tsx +4 -2
  104. package/src/modules/Categories/CategoriesList/index.tsx +27 -8
  105. package/src/modules/Content/BulkHeader/index.tsx +7 -3
  106. package/src/modules/Content/PageImporter/index.tsx +1 -1
  107. package/src/modules/Content/PageItem/index.tsx +45 -31
  108. package/src/modules/Content/PageItem/style.tsx +2 -1
  109. package/src/modules/Content/index.tsx +22 -13
  110. package/src/modules/FramePreview/index.tsx +2 -2
  111. package/src/modules/GlobalEditor/index.tsx +68 -53
  112. package/src/modules/GlobalSettings/index.tsx +2 -0
  113. package/src/modules/Navigation/Defaults/BulkHeader/index.tsx +2 -10
  114. package/src/modules/Navigation/Defaults/DefaultsEditor/Editor/DefaultsBrowser/index.tsx +9 -11
  115. package/src/modules/Navigation/Defaults/DefaultsEditor/Editor/index.tsx +5 -1
  116. package/src/modules/Navigation/Defaults/DefaultsEditor/index.tsx +10 -5
  117. package/src/modules/Navigation/Defaults/Item/index.tsx +41 -27
  118. package/src/modules/Navigation/Defaults/Item/style.tsx +2 -1
  119. package/src/modules/Navigation/Defaults/index.tsx +29 -10
  120. package/src/modules/Navigation/Menus/List/Table/Header/index.tsx +7 -5
  121. package/src/modules/Navigation/Menus/List/Table/Item/index.tsx +10 -10
  122. package/src/modules/Navigation/Menus/List/Table/Item/style.tsx +2 -1
  123. package/src/modules/Navigation/Menus/List/index.tsx +6 -2
  124. package/src/modules/Navigation/Menus/index.tsx +12 -7
  125. package/src/modules/PageEditor/Editor/index.tsx +5 -1
  126. package/src/modules/PageEditor/PageBrowser/index.tsx +9 -3
  127. package/src/modules/PageEditor/index.tsx +67 -57
  128. package/src/modules/Redirects/index.tsx +97 -98
  129. package/src/modules/Settings/ContentTypes/DataPacks/AddModal/index.tsx +5 -1
  130. package/src/modules/Settings/ContentTypes/DataPacks/Config/Form/TemplateConfig/TemplateEditor/Editor/TemplateBrowser/index.tsx +8 -9
  131. package/src/modules/Settings/ContentTypes/DataPacks/Config/Form/index.tsx +7 -3
  132. package/src/modules/Settings/ContentTypes/DataPacks/Config/index.tsx +5 -1
  133. package/src/modules/Settings/ContentTypes/DataPacks/Item/index.tsx +5 -1
  134. package/src/modules/Settings/Integrations/BulkHeader/index.tsx +2 -17
  135. package/src/modules/Settings/Integrations/IntegrationForm/index.tsx +6 -2
  136. package/src/modules/Settings/Integrations/IntegrationItem/index.tsx +18 -8
  137. package/src/modules/Settings/Integrations/IntegrationItem/style.tsx +6 -3
  138. package/src/modules/Settings/Integrations/index.tsx +32 -7
  139. package/src/modules/Settings/Languages/LanguagePanel/index.tsx +6 -2
  140. package/src/modules/Settings/Languages/Table/Header/index.tsx +4 -2
  141. package/src/modules/Settings/Languages/Table/Item/index.tsx +19 -43
  142. package/src/modules/Settings/Languages/Table/Item/style.tsx +11 -54
  143. package/src/modules/Settings/Languages/index.tsx +2 -2
  144. package/src/modules/Settings/SeoAnalyticsSettings/Analytics/index.tsx +2 -4
  145. package/src/modules/Settings/SeoAnalyticsSettings/index.tsx +4 -2
  146. package/src/modules/Settings/Social/index.tsx +1 -1
  147. package/src/modules/Settings/index.tsx +17 -11
  148. package/src/modules/Sites/SitesList/GridView/GridSiteItem/index.tsx +31 -18
  149. package/src/modules/Sites/SitesList/ListView/BulkHeader/index.tsx +21 -12
  150. package/src/modules/Sites/SitesList/ListView/ListSiteItem/index.tsx +31 -18
  151. package/src/modules/Sites/SitesList/RecentSiteItem/index.tsx +1 -1
  152. package/src/modules/Sites/SitesList/index.tsx +16 -24
  153. package/src/modules/Sites/index.tsx +7 -3
  154. package/src/modules/StructuredData/Form/index.tsx +1 -1
  155. package/src/modules/StructuredData/StructuredDataList/BulkHeader/index.tsx +8 -5
  156. package/src/modules/StructuredData/StructuredDataList/ContentFilters/index.tsx +8 -5
  157. package/src/modules/StructuredData/StructuredDataList/GlobalPageItem/index.tsx +29 -15
  158. package/src/modules/StructuredData/StructuredDataList/StructuredDataItem/index.tsx +50 -19
  159. package/src/modules/StructuredData/StructuredDataList/index.tsx +9 -6
  160. package/src/modules/Users/Profile/index.tsx +16 -4
  161. package/src/modules/Users/Roles/BulkHeader/TableHeader/index.tsx +52 -0
  162. package/src/modules/Users/Roles/BulkHeader/TableHeader/style.tsx +43 -0
  163. package/src/modules/Users/Roles/BulkHeader/index.tsx +74 -0
  164. package/src/modules/Users/Roles/RoleItem/index.tsx +104 -0
  165. package/src/modules/Users/Roles/RoleItem/style.tsx +127 -0
  166. package/src/modules/Users/Roles/SideModal/index.tsx +81 -0
  167. package/src/modules/Users/Roles/SideModal/style.tsx +132 -0
  168. package/src/modules/Users/Roles/hooks.tsx +78 -0
  169. package/src/modules/Users/Roles/index.tsx +256 -0
  170. package/src/modules/Users/Roles/style.tsx +23 -0
  171. package/src/modules/Users/Roles/utils.tsx +12 -0
  172. package/src/modules/Users/UserCreate/OptionItem/index.tsx +45 -0
  173. package/src/modules/Users/UserCreate/OptionItem/style.tsx +48 -0
  174. package/src/modules/Users/UserCreate/SiteItem/RolesModal/RoleItem/index.tsx +48 -0
  175. package/src/modules/Users/UserCreate/SiteItem/RolesModal/RoleItem/style.tsx +42 -0
  176. package/src/modules/Users/UserCreate/SiteItem/RolesModal/index.tsx +140 -0
  177. package/src/modules/Users/UserCreate/SiteItem/RolesModal/style.tsx +94 -0
  178. package/src/modules/Users/UserCreate/SiteItem/index.tsx +103 -22
  179. package/src/modules/Users/UserCreate/SiteItem/style.tsx +49 -6
  180. package/src/modules/Users/UserCreate/index.tsx +278 -121
  181. package/src/modules/Users/UserCreate/style.tsx +71 -4
  182. package/src/modules/Users/UserEdit/index.tsx +71 -24
  183. package/src/modules/Users/UserForm/atoms.tsx +40 -8
  184. package/src/modules/Users/UserForm/index.tsx +335 -116
  185. package/src/modules/Users/UserForm/style.tsx +70 -6
  186. package/src/modules/Users/UserList/BulkHeader/TableHeader/index.tsx +61 -31
  187. package/src/modules/Users/UserList/BulkHeader/TableHeader/style.tsx +18 -4
  188. package/src/modules/Users/UserList/BulkHeader/index.tsx +10 -3
  189. package/src/modules/Users/UserList/UserItem/index.tsx +121 -38
  190. package/src/modules/Users/UserList/UserItem/style.tsx +32 -14
  191. package/src/modules/Users/UserList/hooks.tsx +13 -8
  192. package/src/modules/Users/UserList/index.tsx +67 -29
  193. package/src/modules/Users/UserList/utils.tsx +1 -1
  194. package/src/modules/Users/index.tsx +20 -3
  195. package/src/routes/index.tsx +9 -17
  196. package/src/routes/multisite.tsx +73 -8
  197. package/src/routes/site.tsx +96 -10
  198. package/src/types/index.tsx +42 -1
  199. package/tsconfig.paths.json +1 -0
  200. package/src/__tests__/components/Avatar/__snapshots__/Avatar.test.tsx.snap +0 -61
  201. package/src/modules/Users/UserList/HeaderMenus/Name/index.tsx +0 -55
@@ -13,6 +13,7 @@ import { history } from "@ax/routes";
13
13
  import GalleryDetailPanel, { IDetailPanelProps, IDispatchProps } from "@ax/components/Gallery/GalleryPanel/DetailPanel";
14
14
  import globalTheme from "@ax/themes/theme.json";
15
15
  import { IImage, IImageForm } from "@ax/types";
16
+ import { defaultStore } from "./../../../../../__mocks__/store/GenericStore";
16
17
 
17
18
  // for testing copy to clipboard
18
19
  Object.assign(navigator, {
@@ -40,6 +41,7 @@ jest.useFakeTimers();
40
41
  describe("Gallery component rendering", () => {
41
42
  it("should render the component", () => {
42
43
  const initialStore = {
44
+ ...defaultStore,
43
45
  gallery: {
44
46
  isSaving: {
45
47
  save: false,
@@ -91,6 +93,7 @@ describe("Gallery component rendering", () => {
91
93
 
92
94
  it("should render the component with ing options in buttons", () => {
93
95
  const initialStore = {
96
+ ...defaultStore,
94
97
  gallery: {
95
98
  isSaving: {
96
99
  save: true,
@@ -148,6 +151,7 @@ describe("Gallery component rendering", () => {
148
151
  mockedAxios.mockResolvedValue(responsePromise);
149
152
 
150
153
  const initialStore = {
154
+ ...defaultStore,
151
155
  gallery: {
152
156
  isSaving: {
153
157
  save: false,
@@ -221,6 +225,7 @@ describe("Gallery component rendering", () => {
221
225
  mockedAxios.mockResolvedValue(responsePromise);
222
226
 
223
227
  const initialStore = {
228
+ ...defaultStore,
224
229
  gallery: {
225
230
  isSaving: {
226
231
  save: false,
@@ -289,6 +294,7 @@ describe("Gallery component rendering", () => {
289
294
  mockedAxios.mockRejectedValue(responsePromise);
290
295
 
291
296
  const initialStore = {
297
+ ...defaultStore,
292
298
  gallery: {
293
299
  isSaving: {
294
300
  save: false,
@@ -356,6 +362,7 @@ describe("Gallery component rendering", () => {
356
362
  mockedAxios.mockResolvedValue(responsePromise);
357
363
 
358
364
  const initialStore = {
365
+ ...defaultStore,
359
366
  gallery: {
360
367
  isSaving: {
361
368
  save: false,
@@ -423,6 +430,7 @@ describe("Gallery component rendering", () => {
423
430
  mockedAxios.mockResolvedValue(responsePromise);
424
431
 
425
432
  const initialStore = {
433
+ ...defaultStore,
426
434
  gallery: {
427
435
  isSaving: {
428
436
  save: false,
@@ -489,6 +497,7 @@ describe("Gallery component rendering", () => {
489
497
  mockedAxios.mockResolvedValue(responsePromise);
490
498
 
491
499
  const initialStore = {
500
+ ...defaultStore,
492
501
  gallery: {
493
502
  isSaving: {
494
503
  save: false,
@@ -553,6 +562,7 @@ describe("Gallery component rendering", () => {
553
562
  mockedAxios.mockResolvedValue(responsePromise);
554
563
 
555
564
  const initialStore = {
565
+ ...defaultStore,
556
566
  gallery: {
557
567
  isSaving: {
558
568
  save: false,
@@ -609,6 +619,7 @@ describe("Gallery component rendering", () => {
609
619
 
610
620
  it("should render the AddToGlobal", async () => {
611
621
  const initialStore = {
622
+ ...defaultStore,
612
623
  gallery: {
613
624
  isSaving: {
614
625
  save: false,
@@ -661,6 +672,7 @@ describe("Gallery component rendering", () => {
661
672
  jest.spyOn(navigator.clipboard, "writeText");
662
673
 
663
674
  const initialStore = {
675
+ ...defaultStore,
664
676
  gallery: {
665
677
  isSaving: {
666
678
  save: false,
@@ -720,6 +732,7 @@ describe("Gallery component rendering", () => {
720
732
  window.open = jest.fn();
721
733
 
722
734
  const initialStore = {
735
+ ...defaultStore,
723
736
  gallery: {
724
737
  isSaving: {
725
738
  save: false,
@@ -775,6 +788,7 @@ describe("Gallery component rendering", () => {
775
788
 
776
789
  it("should call the onChange of the FieldBehaviors", () => {
777
790
  const initialStore = {
791
+ ...defaultStore,
778
792
  gallery: {
779
793
  isSaving: {
780
794
  save: false,
@@ -10,6 +10,7 @@ import thunk from "redux-thunk";
10
10
  import { parseTheme } from "@ax/helpers";
11
11
  import GalleryPanel, { IGalleryPanelProps } from "@ax/components/Gallery/GalleryPanel";
12
12
  import globalTheme from "@ax/themes/theme.json";
13
+ import { defaultStore } from "./../../../../__mocks__/store/GenericStore";
13
14
 
14
15
  afterEach(() => {
15
16
  cleanup();
@@ -39,7 +40,7 @@ describe("GalleryPanel component rendering", () => {
39
40
  },
40
41
  },
41
42
  };
42
- const store = mockStore(initialStore);
43
+ const store = mockStore({ ...defaultStore, ...initialStore });
43
44
 
44
45
  render(
45
46
  <ThemeProvider theme={parseTheme(globalTheme)}>
@@ -29,7 +29,7 @@ describe("List component rendering", () => {
29
29
  const wrapperList = screen.getByTestId("list-item");
30
30
  expect(wrapperList).toBeTruthy();
31
31
 
32
- const icon = screen.getByTestId("icon-component");
32
+ const icon = screen.getByTestId("icon-component-done");
33
33
  expect(icon).toBeTruthy();
34
34
  });
35
35
 
@@ -45,7 +45,7 @@ describe("List component rendering", () => {
45
45
  const wrapperList = screen.getByTestId("list-item");
46
46
  expect(wrapperList).toBeTruthy();
47
47
 
48
- const icon = screen.queryByTestId("icon-component");
48
+ const icon = screen.queryByTestId("icon-component-done");
49
49
  expect(icon).not.toBeTruthy();
50
50
  });
51
51
 
@@ -61,7 +61,7 @@ describe("List component rendering", () => {
61
61
  const wrapperList = screen.getByTestId("list-item");
62
62
  expect(wrapperList).toBeTruthy();
63
63
 
64
- const icon = screen.queryByTestId("icon-component");
64
+ const icon = screen.queryByTestId("icon-component-done");
65
65
  expect(icon).not.toBeTruthy();
66
66
 
67
67
  fireEvent.click(wrapperList);
@@ -204,7 +204,7 @@ describe("Login component events", () => {
204
204
  expect(input).toBeTruthy();
205
205
  expect(input).toHaveAttribute("type", "password");
206
206
 
207
- const button = screen.getByTestId("icon-component");
207
+ const button = screen.getByTestId("icon-component-view");
208
208
  expect(button).toBeTruthy();
209
209
  fireEvent.click(button);
210
210
 
@@ -71,7 +71,7 @@ describe("DateFilter component rendering", () => {
71
71
  </ThemeProvider>
72
72
  );
73
73
 
74
- const arrowIcon = screen.getByTestId("icon-component");
74
+ const arrowIcon = screen.getByTestId("icon-component-fullarrowup");
75
75
  expect(arrowIcon).toBeTruthy();
76
76
  });
77
77
  });
@@ -117,7 +117,7 @@ describe("NameFilter component rendering", () => {
117
117
  </ThemeProvider>
118
118
  );
119
119
 
120
- const arrowIcon = screen.getByTestId("icon-component");
120
+ const arrowIcon = screen.getByTestId("icon-component-fullarrowup");
121
121
  expect(arrowIcon).toBeTruthy();
122
122
  });
123
123
  });
@@ -0,0 +1,165 @@
1
+ import * as React from "react";
2
+
3
+ import { ThemeProvider } from "styled-components";
4
+ import { CalledWithMock, mock } from "jest-mock-extended";
5
+ import { render, screen, cleanup, fireEvent } from "@testing-library/react";
6
+
7
+ import RoleFilter, { IRoleFilterProps } from "@ax/components/TableFilters/RoleFilter";
8
+ import globalTheme from "@ax/themes/theme.json";
9
+ import { parseTheme } from "@ax/helpers";
10
+
11
+ afterEach(cleanup);
12
+
13
+ const defaultProps = mock<IRoleFilterProps>();
14
+ describe("RoleFilter component rendering", () => {
15
+ it("should render role filter", () => {
16
+ defaultProps.filters = [
17
+ {
18
+ name: "all",
19
+ value: "all",
20
+ title: "All",
21
+ },
22
+ {
23
+ name: "1",
24
+ value: "1",
25
+ title: "Administrator",
26
+ },
27
+ {
28
+ name: "2",
29
+ value: "2",
30
+ title: "Editor",
31
+ },
32
+ ];
33
+ defaultProps.pointer = "filterRoles";
34
+ defaultProps.filterItems = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
35
+
36
+ render(
37
+ <ThemeProvider theme={parseTheme(globalTheme)}>
38
+ <RoleFilter {...defaultProps} />
39
+ </ThemeProvider>
40
+ );
41
+
42
+ const typeFilter = screen.getByTestId("floating-menu");
43
+ expect(typeFilter).toBeTruthy();
44
+ expect(typeFilter.textContent).toEqual("Roles");
45
+ });
46
+ });
47
+
48
+ describe("RoleFilter events", () => {
49
+ it("should render check group on click", () => {
50
+ defaultProps.filters = [
51
+ {
52
+ name: "all",
53
+ value: "all",
54
+ title: "All",
55
+ },
56
+ {
57
+ name: "1",
58
+ value: "1",
59
+ title: "Administrator",
60
+ },
61
+ {
62
+ name: "2",
63
+ value: "2",
64
+ title: "Editor",
65
+ },
66
+ ];
67
+ defaultProps.pointer = "filterRoles";
68
+ defaultProps.filterItems = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
69
+
70
+ render(
71
+ <ThemeProvider theme={parseTheme(globalTheme)}>
72
+ <RoleFilter {...defaultProps} />
73
+ </ThemeProvider>
74
+ );
75
+
76
+ const roleFilterButton = screen.getByTestId("floating-menu-button");
77
+ expect(roleFilterButton).toBeTruthy();
78
+ fireEvent.click(roleFilterButton);
79
+ const floatingMenu = screen.getByTestId("floating-menu");
80
+ expect(floatingMenu).toBeTruthy();
81
+ const checkGroupFieldGroup = screen.getByTestId("check-group-field-group");
82
+ expect(checkGroupFieldGroup).toBeTruthy();
83
+ const checkFieldLabels = screen.getAllByTestId("check-field-label");
84
+ expect(checkFieldLabels).toHaveLength(3);
85
+ });
86
+
87
+ it("should check option on click", () => {
88
+ defaultProps.filters = [
89
+ {
90
+ name: "all",
91
+ value: "all",
92
+ title: "All",
93
+ },
94
+ {
95
+ name: "1",
96
+ value: "1",
97
+ title: "Administrator",
98
+ },
99
+ {
100
+ name: "2",
101
+ value: "2",
102
+ title: "Editor",
103
+ },
104
+ ];
105
+ defaultProps.pointer = "filterRoles";
106
+ const onChangeMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
107
+ defaultProps.filterItems = onChangeMock;
108
+
109
+ render(
110
+ <ThemeProvider theme={parseTheme(globalTheme)}>
111
+ <RoleFilter {...defaultProps} />
112
+ </ThemeProvider>
113
+ );
114
+
115
+ const roleFilterButton = screen.getByTestId("floating-menu-button");
116
+ expect(roleFilterButton).toBeTruthy();
117
+ fireEvent.click(roleFilterButton);
118
+ const floatingMenu = screen.getByTestId("floating-menu");
119
+ expect(floatingMenu).toBeTruthy();
120
+ const checkGroupFieldGroup = screen.getByTestId("check-group-field-group");
121
+ expect(checkGroupFieldGroup).toBeTruthy();
122
+ const checkFieldInputs = screen.getAllByTestId<HTMLInputElement>("check-field-input");
123
+ expect(checkFieldInputs).toHaveLength(3);
124
+ fireEvent.change(checkFieldInputs[1], { target: { checked: true, value: "1" } });
125
+ expect(checkFieldInputs[1].checked).toBe(true);
126
+ });
127
+
128
+ it("should call filterItems action on change", async () => {
129
+ defaultProps.filters = [
130
+ {
131
+ name: "all",
132
+ value: "all",
133
+ title: "All",
134
+ },
135
+ {
136
+ name: "1",
137
+ value: "1",
138
+ title: "Administrator",
139
+ },
140
+ {
141
+ name: "2",
142
+ value: "2",
143
+ title: "Editor",
144
+ },
145
+ ];
146
+ defaultProps.pointer = "filterRoles";
147
+ const onChangeMock = jest.fn() as CalledWithMock<void, [pointer: string, filter: string]>;
148
+ defaultProps.filterItems = onChangeMock;
149
+
150
+ render(
151
+ <ThemeProvider theme={parseTheme(globalTheme)}>
152
+ <RoleFilter {...defaultProps} />
153
+ </ThemeProvider>
154
+ );
155
+
156
+ const roleFilterButton = screen.getByTestId("floating-menu-button");
157
+
158
+ expect(roleFilterButton).toBeTruthy();
159
+ fireEvent.click(roleFilterButton);
160
+ const checkFieldInputs = screen.queryAllByTestId("check-field-input");
161
+ fireEvent.click(checkFieldInputs[1]);
162
+ expect(onChangeMock).toHaveBeenCalledTimes(1);
163
+ expect(onChangeMock).toBeCalledWith("filterRoles", "1");
164
+ });
165
+ });
@@ -46,7 +46,7 @@ describe("StatusFilter component rendering", () => {
46
46
  expect(interactiveArrow).toBeTruthy();
47
47
  });
48
48
 
49
- it("should render FullArrowUp icon if is filtered by most recent", () => {
49
+ it("should render FullArrowDown icon if is filtered by most recent", () => {
50
50
  const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
51
51
  ((orderPointer: string, isAscendent: boolean) => any);
52
52
  defaultProps.sortedState = { isAscending: false, sortedByDate: true, sortedByTitle: false, sortedByURL: false };
@@ -59,7 +59,7 @@ describe("StatusFilter component rendering", () => {
59
59
  </ThemeProvider>
60
60
  );
61
61
 
62
- const arrowIcon = screen.getByTestId("icon-component");
62
+ const arrowIcon = screen.getByTestId("icon-component-fullarrowdown");
63
63
  expect(arrowIcon).toBeTruthy();
64
64
  });
65
65
  });
@@ -0,0 +1,153 @@
1
+ import * as React from "react";
2
+
3
+ import { ThemeProvider } from "styled-components";
4
+ import { CalledWithMock, mock } from "jest-mock-extended";
5
+
6
+ import { render, screen, cleanup, fireEvent } from "@testing-library/react";
7
+
8
+ import { parseTheme } from "@ax/helpers";
9
+ import globalTheme from "@ax/themes/theme.json";
10
+ import UsersFilter, { IUsersFilterProps } from "@ax/components/TableFilters/UsersFilter";
11
+
12
+ afterEach(cleanup);
13
+ const defaultProps = mock<IUsersFilterProps>();
14
+ describe("UsersFilter component rendering", () => {
15
+ it("should render users filter", () => {
16
+ const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
17
+ ((orderPointer: string, isAscendent: boolean) => any);
18
+ defaultProps.sortedState = { isAscending: true, sortedByTitle: false, sortedByUsers: true };
19
+
20
+ defaultProps.sortItems = onClickMock;
21
+
22
+ render(
23
+ <ThemeProvider theme={parseTheme(globalTheme)}>
24
+ <UsersFilter {...defaultProps} />
25
+ </ThemeProvider>
26
+ );
27
+
28
+ const usersFilter = screen.getByTestId("users-filter-header");
29
+ expect(usersFilter).toBeTruthy();
30
+ expect(usersFilter.textContent).toEqual("Users");
31
+ });
32
+
33
+ it("should render interactive arrow if not filter selected", () => {
34
+ const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
35
+ ((orderPointer: string, isAscendent: boolean) => any);
36
+ defaultProps.sortedState = { isAscending: true, sortedByTitle: false, sortedByUsers: false };
37
+ defaultProps.sortItems = onClickMock;
38
+
39
+ render(
40
+ <ThemeProvider theme={parseTheme(globalTheme)}>
41
+ <UsersFilter {...defaultProps} />
42
+ </ThemeProvider>
43
+ );
44
+
45
+ const interactiveArrow = screen.getByTestId("users-filter-interactive-arrow");
46
+ expect(interactiveArrow).toBeTruthy();
47
+ });
48
+
49
+ it("should not render interactive arrow if filter selected", () => {
50
+ const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
51
+ ((orderPointer: string, isAscendent: boolean) => any);
52
+ defaultProps.sortedState = { isAscending: false, sortedByTitle: false, sortedByUsers: true };
53
+ defaultProps.sortItems = onClickMock;
54
+
55
+ render(
56
+ <ThemeProvider theme={parseTheme(globalTheme)}>
57
+ <UsersFilter {...defaultProps} />
58
+ </ThemeProvider>
59
+ );
60
+
61
+ const interactiveArrow = screen.queryByTestId("users-filter-interactive-arrow");
62
+ expect(interactiveArrow).toBeFalsy();
63
+ });
64
+
65
+ it("should render FullArrowUp icon if is filtered by ascending users", () => {
66
+ const onClickMock = jest.fn() as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
67
+ ((orderPointer: string, isAscendent: boolean) => any);
68
+ defaultProps.sortedState = { isAscending: true, sortedByTitle: false, sortedByUsers: true };
69
+ defaultProps.sortItems = onClickMock;
70
+
71
+ render(
72
+ <ThemeProvider theme={parseTheme(globalTheme)}>
73
+ <UsersFilter {...defaultProps} />
74
+ </ThemeProvider>
75
+ );
76
+
77
+ const arrowIcon = screen.getByTestId("icon-component-fullarrowup");
78
+ expect(arrowIcon).toBeTruthy();
79
+ });
80
+ });
81
+
82
+ describe("UsersFilter events", () => {
83
+ it("should render check group on click", () => {
84
+ const onClickMock = jest.fn();
85
+ defaultProps.sortedState = { isAscending: true, sortedByTitle: false, sortedByUsers: true };
86
+ defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
87
+ ((orderPointer: string, isAscendent: boolean) => any);
88
+
89
+ render(
90
+ <ThemeProvider theme={parseTheme(globalTheme)}>
91
+ <UsersFilter {...defaultProps} />
92
+ </ThemeProvider>
93
+ );
94
+
95
+ const usersFilterButton = screen.getByTestId("floating-menu-button");
96
+ expect(usersFilterButton).toBeTruthy();
97
+ fireEvent.click(usersFilterButton);
98
+ const floatingMenu = screen.getByTestId("floating-menu");
99
+ expect(floatingMenu).toBeTruthy();
100
+ const listItems = screen.getAllByTestId("list-item");
101
+ expect(listItems).toHaveLength(2);
102
+ expect(listItems[0].textContent).toEqual("Ascendent");
103
+ expect(listItems[1].textContent).toEqual("Descendent");
104
+ });
105
+
106
+ it("should call filterItems with isAscending on click 'Ascendent' option", async () => {
107
+ const onClickMock = jest.fn();
108
+ defaultProps.sortedState = { isAscending: true, sortedByTitle: false, sortedByUsers: true };
109
+ defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
110
+ ((orderPointer: string, isAscendent: boolean) => any);
111
+
112
+ render(
113
+ <ThemeProvider theme={parseTheme(globalTheme)}>
114
+ <UsersFilter {...defaultProps} />
115
+ </ThemeProvider>
116
+ );
117
+
118
+ const usersFilterButton = screen.getByTestId("floating-menu-button");
119
+
120
+ expect(usersFilterButton).toBeTruthy();
121
+ fireEvent.click(usersFilterButton);
122
+ const listItems = screen.getAllByTestId("list-item");
123
+
124
+ fireEvent.click(listItems[0]);
125
+ expect(onClickMock).toHaveBeenCalledTimes(1);
126
+ const isAscending = true;
127
+ expect(onClickMock).toBeCalledWith("users", isAscending);
128
+ });
129
+
130
+ it("should call filterItems with isAscending false on click 'Descendent' option", async () => {
131
+ const onClickMock = jest.fn();
132
+ defaultProps.sortedState = { isAscending: true, sortedByTitle: false, sortedByUsers: true };
133
+ defaultProps.sortItems = onClickMock as CalledWithMock<any, [orderPointer: string, isAscendent: boolean]> &
134
+ ((orderPointer: string, isAscendent: boolean) => any);
135
+
136
+ render(
137
+ <ThemeProvider theme={parseTheme(globalTheme)}>
138
+ <UsersFilter {...defaultProps} />
139
+ </ThemeProvider>
140
+ );
141
+
142
+ const usersFilterButton = screen.getByTestId("floating-menu-button");
143
+
144
+ expect(usersFilterButton).toBeTruthy();
145
+ fireEvent.click(usersFilterButton);
146
+ const listItems = screen.getAllByTestId("list-item");
147
+
148
+ fireEvent.click(listItems[1]);
149
+ expect(onClickMock).toHaveBeenCalledTimes(1);
150
+ const isAscending = false;
151
+ expect(onClickMock).toBeCalledWith("users", isAscending);
152
+ });
153
+ });
@@ -141,7 +141,7 @@ describe("Tabs component rendering", () => {
141
141
  const tooltips = screen.getAllByTestId("tooltip-component");
142
142
  expect(tooltips[0]).toBeTruthy();
143
143
  expect(tooltips[1]).toBeTruthy();
144
- const tooltipIcons = screen.getAllByTestId("icon-component");
144
+ const tooltipIcons = screen.getAllByTestId("icon-component-view");
145
145
  expect(tooltipIcons.length).toEqual(1);
146
146
  });
147
147
  });
@@ -24,6 +24,9 @@ describe("Component rendering", () => {
24
24
  },
25
25
  app: { isLoading: false },
26
26
  sites: { currentSiteInfo: { id: 85 } },
27
+ users: {
28
+ currentPermissions: [],
29
+ },
27
30
  };
28
31
 
29
32
  const middlewares: any = [thunk];
@@ -143,6 +146,9 @@ describe("Component rendering", () => {
143
146
  },
144
147
  app: { isLoading: false },
145
148
  sites: { currentSiteInfo: { id: 85 } },
149
+ users: {
150
+ currentPermissions: [],
151
+ },
146
152
  };
147
153
 
148
154
  const middlewares: any = [thunk];
@@ -10,8 +10,9 @@ import { Router } from "react-router-dom";
10
10
 
11
11
  import { history } from "@ax/routes";
12
12
  import globalTheme from "@ax/themes/theme.json";
13
+ import Sites, { ISitesProps } from "@ax/modules/Sites";
14
+
13
15
  import { render, cleanup, screen, act } from "../../../../config/jest/test-utils";
14
- import Sites, { ISitesProps } from "./../../../modules/Sites";
15
16
  import { sitesDataMock, userDataMock } from "./../../../__mocks__/store/SitesList";
16
17
  import { sitesResponse, structuredDataResponse } from "./../../../__mocks__/axios/SitesList";
17
18
 
@@ -1,18 +1,25 @@
1
1
  import React from "react";
2
2
 
3
3
  import { ThemeProvider } from "styled-components";
4
- import { render, screen, cleanup, act } from "@testing-library/react";
4
+ import { screen, cleanup, act } from "@testing-library/react";
5
+ import { render } from "../../../../../../../config/jest/test-utils";
5
6
  import "@testing-library/jest-dom";
6
7
  import { mock } from "jest-mock-extended";
8
+ import configureStore from "redux-mock-store";
9
+ import thunk from "redux-thunk";
7
10
 
8
11
  import { parseTheme } from "@ax/helpers";
9
-
10
- import BulkHeader, { IBulkHeaderProps } from "./../../../../../../modules/Sites/SitesList/ListView/BulkHeader";
12
+ import BulkHeader, { IBulkHeaderProps } from "@ax/modules/Sites/SitesList/ListView/BulkHeader";
13
+ import { defaultStore } from "./../../../../../../__mocks__/store/GenericStore";
11
14
 
12
15
  import globalTheme from "@ax/themes/theme.json";
13
16
 
14
17
  afterEach(cleanup);
15
18
 
19
+ const middlewares: any = [thunk];
20
+ const mockStore = configureStore(middlewares);
21
+ const store = mockStore(defaultStore);
22
+
16
23
  const defaultProps = mock<IBulkHeaderProps>();
17
24
 
18
25
  describe("BulkHeader component rendering", () => {
@@ -27,7 +34,8 @@ describe("BulkHeader component rendering", () => {
27
34
  render(
28
35
  <ThemeProvider theme={parseTheme(globalTheme)}>
29
36
  <BulkHeader {...defaultProps} />
30
- </ThemeProvider>
37
+ </ThemeProvider>,
38
+ { store }
31
39
  );
32
40
  });
33
41
 
@@ -42,7 +50,8 @@ describe("BulkHeader component rendering", () => {
42
50
  render(
43
51
  <ThemeProvider theme={parseTheme(globalTheme)}>
44
52
  <BulkHeader {...defaultProps} />
45
- </ThemeProvider>
53
+ </ThemeProvider>,
54
+ { store }
46
55
  );
47
56
  });
48
57
 
@@ -11,6 +11,7 @@ import { parseTheme } from "@ax/helpers";
11
11
  import { history } from "@ax/routes";
12
12
  import globalTheme from "@ax/themes/theme.json";
13
13
  import { IGetSitesParams, ISettingsForm } from "@ax/types";
14
+ import SitesList, { ISitesListProps } from "@ax/modules/Sites/SitesList";
14
15
 
15
16
  import { render, cleanup, screen, fireEvent, act, waitFor } from "./../../../../../config/jest/test-utils";
16
17
 
@@ -19,7 +20,6 @@ import { sitesResponse } from "./../../../../__mocks__/axios/SitesList";
19
20
  import { sitesResponseDataPack } from "./../../../../__mocks__/axios/SitesListDataPack";
20
21
  import { sitesResponseCategories } from "./../../../../__mocks__/axios/SitesListCategories";
21
22
  import { sitesOptions } from "./../../../../__mocks__/axios/SitesListOptions";
22
- import SitesList, { ISitesListProps } from "./../../../../modules/Sites/SitesList";
23
23
 
24
24
  afterEach(cleanup);
25
25
 
@@ -146,7 +146,7 @@ describe("Sites module rendering", () => {
146
146
  token: "eyJhbGciOiJIUzI",
147
147
  },
148
148
  users: userDataMock,
149
- sites: { totalItems: 2, sites: sitesDataMock.sites, recentSites: [], config: sitesDataMock.config, },
149
+ sites: { totalItems: 2, sites: sitesDataMock.sites, recentSites: [], config: sitesDataMock.config },
150
150
  };
151
151
 
152
152
  const middlewares: any = [thunk];
@@ -502,7 +502,7 @@ describe("Sites module events", () => {
502
502
  );
503
503
 
504
504
  await act(async () => {
505
- await render(Component, { store });
505
+ render(Component, { store });
506
506
  });
507
507
 
508
508
  const gridIconAction = screen.getByTestId("icon-action-Grid2");
@@ -597,7 +597,9 @@ describe("Sites module events", () => {
597
597
 
598
598
  expect(gridSiteItems.length).toEqual(2);
599
599
 
600
- fireEvent.click(gridSiteItems[0]);
600
+ await act(async () => {
601
+ fireEvent.click(gridSiteItems[0]);
602
+ });
601
603
 
602
604
  expect(history.location.pathname).toEqual("/sites/pages");
603
605
  });