@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
@@ -0,0 +1,107 @@
1
+ import React from "react";
2
+ import { ThemeProvider } from "styled-components";
3
+ import { cleanup, fireEvent, render, screen } from "@testing-library/react";
4
+ import "@testing-library/jest-dom";
5
+
6
+ import { parseTheme } from "@ax/helpers";
7
+ import globalTheme from "@ax/themes/theme.json";
8
+ import RoleItem, { IRoleItemProps } from "./../../../../../../../modules/Users/UserCreate/SiteItem/RolesModal/RoleItem";
9
+
10
+ const onClickMock = jest.fn();
11
+ const onChangeMock = jest.fn();
12
+ const defaultProps: IRoleItemProps = {
13
+ role: {
14
+ id: 1,
15
+ name: "Administrator",
16
+ hex: "#C7ECF8",
17
+ description:
18
+ "You can manage all of your site's settings, users and roles. You can create and publish all pages of your site.",
19
+ permissions: { totalPermissions: "78/78", sitePermissions: [], globalPermissions: [] },
20
+ active: true,
21
+ users: [],
22
+ },
23
+ onChange: onChangeMock,
24
+ onClick: onClickMock,
25
+ };
26
+
27
+ afterEach(() => {
28
+ jest.clearAllMocks();
29
+ cleanup();
30
+ });
31
+
32
+ describe("RoleItem module rendering", () => {
33
+ it("should render the componet with check", async () => {
34
+ render(
35
+ <ThemeProvider theme={parseTheme(globalTheme)}>
36
+ <RoleItem {...defaultProps} />
37
+ </ThemeProvider>
38
+ );
39
+
40
+ expect(screen.getByTestId("roles-modal-item")).toBeTruthy();
41
+ expect(screen.getByLabelText(defaultProps.role.name)).toBeTruthy();
42
+ });
43
+
44
+ it("should render the componet with check checked", async () => {
45
+ render(
46
+ <ThemeProvider theme={parseTheme(globalTheme)}>
47
+ <RoleItem {...defaultProps} isChecked={true} />
48
+ </ThemeProvider>
49
+ );
50
+
51
+ expect(screen.getByTestId("roles-modal-item")).toBeTruthy();
52
+ const check = screen.getByLabelText(defaultProps.role.name);
53
+ expect(check).toBeTruthy();
54
+ expect(check).toBeChecked();
55
+ });
56
+
57
+ it("should render the componet without check", async () => {
58
+ render(
59
+ <ThemeProvider theme={parseTheme(globalTheme)}>
60
+ <RoleItem {...defaultProps} isReadOnly={true} />
61
+ </ThemeProvider>
62
+ );
63
+
64
+ expect(screen.getByTestId("roles-modal-item")).toBeTruthy();
65
+ expect(screen.queryByLabelText(defaultProps.role.name)).toBeFalsy();
66
+ });
67
+
68
+ it("should render the componet selected", async () => {
69
+ render(
70
+ <ThemeProvider theme={parseTheme(globalTheme)}>
71
+ <RoleItem {...defaultProps} isSelected={true} />
72
+ </ThemeProvider>
73
+ );
74
+
75
+ const item = screen.getByTestId("roles-modal-item");
76
+ expect(item).toBeTruthy();
77
+ expect(item).toHaveStyle("border: 2px solid #5057ff");
78
+ });
79
+ });
80
+
81
+ describe("RoleItem module events", () => {
82
+ it("should call onClick on title click", async () => {
83
+ render(
84
+ <ThemeProvider theme={parseTheme(globalTheme)}>
85
+ <RoleItem {...defaultProps} />
86
+ </ThemeProvider>
87
+ );
88
+
89
+ const titleComponent = screen.getByTestId("roles-modal-item-title");
90
+ expect(titleComponent).toBeTruthy();
91
+ fireEvent.click(titleComponent);
92
+ expect(onClickMock).toBeCalledTimes(1);
93
+ });
94
+
95
+ it("should call onChange on check change", async () => {
96
+ render(
97
+ <ThemeProvider theme={parseTheme(globalTheme)}>
98
+ <RoleItem {...defaultProps} />
99
+ </ThemeProvider>
100
+ );
101
+
102
+ const check = screen.getByLabelText(defaultProps.role.name);
103
+ expect(check).toBeTruthy();
104
+ fireEvent.click(check);
105
+ expect(onChangeMock).toBeCalledTimes(1);
106
+ });
107
+ });
@@ -0,0 +1,159 @@
1
+ import React from "react";
2
+ import { ThemeProvider } from "styled-components";
3
+ import { cleanup, fireEvent, render, screen } from "@testing-library/react";
4
+ import "@testing-library/jest-dom";
5
+
6
+ import { parseTheme } from "@ax/helpers";
7
+ import globalTheme from "@ax/themes/theme.json";
8
+ import RolesModal, { IRolesModalProps } from "./../../../../../../modules/Users/UserCreate/SiteItem/RolesModal";
9
+
10
+ const addRolesMock = jest.fn();
11
+ const toggleModalMock = jest.fn();
12
+ const defaultProps: IRolesModalProps = {
13
+ roles: [
14
+ {
15
+ id: 1,
16
+ name: "Administrator",
17
+ hex: "#C7ECF8",
18
+ description:
19
+ "You can manage all of your site's settings, users and roles. You can create and publish all pages of your site.",
20
+ permissions: { totalPermissions: "78/78", sitePermissions: [], globalPermissions: [] },
21
+ active: true,
22
+ users: [],
23
+ },
24
+ {
25
+ id: 2,
26
+ name: "Constructor",
27
+ hex: "#B5FBFF",
28
+ description:
29
+ "You can edit your website, add pages, modules, modify URLs, menus, colours and themes, html tags. You don't manage users, or manage the site configuration.",
30
+ permissions: { totalPermissions: "49/78", sitePermissions: [], globalPermissions: [] },
31
+ active: true,
32
+ users: [],
33
+ },
34
+ {
35
+ id: 3,
36
+ name: "Editor",
37
+ hex: "#E2EE9F",
38
+ description: "You have permission to view, add and edit site content, such as pages and blocks.",
39
+ permissions: { totalPermissions: "21/78", sitePermissions: [], globalPermissions: [] },
40
+ active: false,
41
+ users: [],
42
+ },
43
+ ],
44
+ addRoles: addRolesMock,
45
+ toggleModal: toggleModalMock,
46
+ isOpen: true,
47
+ };
48
+
49
+ afterEach(() => {
50
+ jest.clearAllMocks();
51
+ cleanup();
52
+ });
53
+
54
+ describe("RolesModal module rendering", () => {
55
+ it("should render the componet with active roles", async () => {
56
+ render(
57
+ <ThemeProvider theme={parseTheme(globalTheme)}>
58
+ <RolesModal {...defaultProps} />
59
+ </ThemeProvider>
60
+ );
61
+
62
+ expect(screen.queryByTestId("modal-roles-content")).toBeTruthy();
63
+ expect(screen.queryAllByTestId("roles-modal-item").length).toBe(2);
64
+ });
65
+
66
+ it("should render the componet without roles", async () => {
67
+ render(
68
+ <ThemeProvider theme={parseTheme(globalTheme)}>
69
+ <RolesModal {...defaultProps} roles={undefined} />
70
+ </ThemeProvider>
71
+ );
72
+
73
+ expect(screen.queryByTestId("modal-roles-content")).toBeTruthy();
74
+ expect(screen.queryAllByTestId("roles-modal-item").length).toBe(0);
75
+ });
76
+
77
+ it("should render the componet with roles selected", async () => {
78
+ render(
79
+ <ThemeProvider theme={parseTheme(globalTheme)}>
80
+ <RolesModal {...defaultProps} selectedRoles={[1]} />
81
+ </ThemeProvider>
82
+ );
83
+
84
+ expect(screen.queryByTestId("modal-roles-content")).toBeTruthy();
85
+ const check = screen.getByLabelText("Administrator");
86
+ expect(check).toBeChecked();
87
+ });
88
+ });
89
+
90
+ describe("RolesModal module events", () => {
91
+ it("should render permisions when role is selected", async () => {
92
+ render(
93
+ <ThemeProvider theme={parseTheme(globalTheme)}>
94
+ <RolesModal {...defaultProps} />
95
+ </ThemeProvider>
96
+ );
97
+
98
+ expect(screen.queryByTestId("permissions-wrapper")).toHaveTextContent("Administrator");
99
+ const roleItems = screen.queryAllByTestId("roles-modal-item-title");
100
+ fireEvent.click(roleItems[1]);
101
+
102
+ expect(screen.queryByTestId("permissions-wrapper")).toHaveTextContent("Constructor");
103
+ });
104
+
105
+ it("should check item, call addRoles with roles checked and close modal", async () => {
106
+ render(
107
+ <ThemeProvider theme={parseTheme(globalTheme)}>
108
+ <RolesModal {...defaultProps} />
109
+ </ThemeProvider>
110
+ );
111
+
112
+ fireEvent.click(screen.getByLabelText("Administrator"));
113
+ fireEvent.click(screen.getByText("Add User Role"));
114
+
115
+ expect(addRolesMock).toBeCalledWith([1]);
116
+ expect(toggleModalMock).toBeCalledTimes(1);
117
+ });
118
+
119
+ it("should uncheck item, call addRoles with roles checked and close modal", async () => {
120
+ render(
121
+ <ThemeProvider theme={parseTheme(globalTheme)}>
122
+ <RolesModal {...defaultProps} selectedRoles={[1]} />
123
+ </ThemeProvider>
124
+ );
125
+
126
+ fireEvent.click(screen.getByLabelText("Administrator"));
127
+ fireEvent.click(screen.getByLabelText("Constructor"));
128
+ fireEvent.click(screen.getByText("Add User Role"));
129
+
130
+ expect(addRolesMock).toBeCalledWith([2]);
131
+ expect(toggleModalMock).toBeCalledTimes(1);
132
+ });
133
+
134
+ it("should call addRoles with empty array", async () => {
135
+ render(
136
+ <ThemeProvider theme={parseTheme(globalTheme)}>
137
+ <RolesModal {...defaultProps} />
138
+ </ThemeProvider>
139
+ );
140
+
141
+ fireEvent.click(screen.getByText("Add User Role"));
142
+
143
+ expect(addRolesMock).toBeCalledWith([]);
144
+ expect(toggleModalMock).toBeCalledTimes(1);
145
+ });
146
+
147
+ it("should call addRoles with previously selected role", async () => {
148
+ render(
149
+ <ThemeProvider theme={parseTheme(globalTheme)}>
150
+ <RolesModal {...defaultProps} selectedRoles={[2]} />
151
+ </ThemeProvider>
152
+ );
153
+
154
+ fireEvent.click(screen.getByText("Add User Role"));
155
+
156
+ expect(addRolesMock).toBeCalledWith([2]);
157
+ expect(toggleModalMock).toBeCalledTimes(1);
158
+ });
159
+ });
@@ -0,0 +1,175 @@
1
+ import React from "react";
2
+ import { ThemeProvider } from "styled-components";
3
+ import { cleanup, fireEvent, render, screen } from "@testing-library/react";
4
+ import "@testing-library/jest-dom";
5
+
6
+ import { parseTheme } from "@ax/helpers";
7
+ import globalTheme from "@ax/themes/theme.json";
8
+ import SiteItem, { ISiteItemProps } from "./../../../../../modules/Users/UserCreate/SiteItem";
9
+
10
+ const itemOnChangeMock = jest.fn();
11
+ const addRolesMock = jest.fn();
12
+ const defaultProps: ISiteItemProps = {
13
+ item: { id: 1, name: "Site 1", onChange: itemOnChangeMock },
14
+ sites: [1, 2, 3],
15
+ roles: [
16
+ {
17
+ id: 1,
18
+ name: "Administrator",
19
+ hex: "#C7ECF8",
20
+ description:
21
+ "You can manage all of your site's settings, users and roles. You can create and publish all pages of your site.",
22
+ permissions: { totalPermissions: "78/78", sitePermissions: [], globalPermissions: [] },
23
+ active: true,
24
+ users: [],
25
+ },
26
+ {
27
+ id: 2,
28
+ name: "Constructor",
29
+ hex: "#B5FBFF",
30
+ description:
31
+ "You can edit your website, add pages, modules, modify URLs, menus, colours and themes, html tags. You don't manage users, or manage the site configuration.",
32
+ permissions: { totalPermissions: "49/78", sitePermissions: [], globalPermissions: [] },
33
+ active: true,
34
+ users: [],
35
+ },
36
+ ],
37
+ addRoles: addRolesMock,
38
+ };
39
+
40
+ afterEach(() => {
41
+ jest.clearAllMocks();
42
+ cleanup();
43
+ });
44
+
45
+ describe("SiteItem module rendering", () => {
46
+ it("should render the componet", async () => {
47
+ render(
48
+ <ThemeProvider theme={parseTheme(globalTheme)}>
49
+ <SiteItem {...defaultProps} />
50
+ </ThemeProvider>
51
+ );
52
+
53
+ expect(screen.getByTestId("user-site-item")).toBeTruthy();
54
+ expect(screen.getByTestId("check-cell")).toBeTruthy();
55
+ expect(screen.getByTestId("action-cell")).toBeTruthy();
56
+ expect(screen.getByText("Add Roles")).toBeTruthy();
57
+ expect(screen.queryByTestId("wrapper-cell-featured")).toBeFalsy();
58
+ expect(screen.getByText(defaultProps.item.name)).toBeInTheDocument();
59
+ });
60
+
61
+ it("should render the componet readonly", async () => {
62
+ render(
63
+ <ThemeProvider theme={parseTheme(globalTheme)}>
64
+ <SiteItem {...defaultProps} readOnly={true} />
65
+ </ThemeProvider>
66
+ );
67
+
68
+ expect(screen.getByTestId("user-site-item")).toBeTruthy();
69
+ expect(screen.queryByTestId("check-cell")).toBeFalsy();
70
+ expect(screen.queryByTestId("action-cell")).toBeFalsy();
71
+ });
72
+
73
+ it("should render the componet disabled", async () => {
74
+ render(
75
+ <ThemeProvider theme={parseTheme(globalTheme)}>
76
+ <SiteItem {...defaultProps} disabled={true} />
77
+ </ThemeProvider>
78
+ );
79
+
80
+ expect(screen.getByTestId("user-site-item")).toBeTruthy();
81
+ const check = screen.getByLabelText(defaultProps.item.name);
82
+ expect(check).toBeTruthy();
83
+ expect(check).toBeDisabled();
84
+ });
85
+
86
+ it("should render the componet featured", async () => {
87
+ const itemProps = { ...defaultProps, featured: true, description: "descripción del item" };
88
+ render(
89
+ <ThemeProvider theme={parseTheme(globalTheme)}>
90
+ <SiteItem {...itemProps} />
91
+ </ThemeProvider>
92
+ );
93
+
94
+ expect(screen.getByTestId("user-site-item")).toBeTruthy();
95
+ expect(screen.getByTestId("wrapper-cell-featured")).toBeTruthy();
96
+ expect(screen.getByTestId("check-cell")).toBeTruthy();
97
+ expect(screen.queryByTestId("action-cell")).toBeFalsy();
98
+ expect(screen.getByText(itemProps.description)).toBeInTheDocument();
99
+ expect(screen.getByText("Add Roles")).toBeTruthy();
100
+ });
101
+
102
+ it("should render the componet with roles", async () => {
103
+ const itemProps = { ...defaultProps, selected: [1] };
104
+ render(
105
+ <ThemeProvider theme={parseTheme(globalTheme)}>
106
+ <SiteItem {...itemProps} />
107
+ </ThemeProvider>
108
+ );
109
+
110
+ expect(screen.getByTestId("user-site-item")).toBeTruthy();
111
+ expect(screen.queryByText("Add Roles")).toBeFalsy();
112
+ expect(screen.getByText("Edit Roles")).toBeTruthy();
113
+ expect(screen.getByText("Administrator")).toBeTruthy();
114
+ });
115
+ });
116
+
117
+ describe("SiteItem module events", () => {
118
+ it("should call onChange", async () => {
119
+ render(
120
+ <ThemeProvider theme={parseTheme(globalTheme)}>
121
+ <SiteItem {...defaultProps} />
122
+ </ThemeProvider>
123
+ );
124
+
125
+ const checkCell = screen.getByTestId("check-cell");
126
+ expect(checkCell).toBeTruthy();
127
+ fireEvent.click(checkCell);
128
+ expect(itemOnChangeMock).toBeCalledTimes(1);
129
+ });
130
+
131
+ it("should not call onChange if readOnly", async () => {
132
+ render(
133
+ <ThemeProvider theme={parseTheme(globalTheme)}>
134
+ <SiteItem {...defaultProps} readOnly={true} />
135
+ </ThemeProvider>
136
+ );
137
+
138
+ const nameCell = screen.getByTestId("name-cell");
139
+ expect(nameCell).toBeTruthy();
140
+ fireEvent.click(nameCell);
141
+ expect(itemOnChangeMock).toBeCalledTimes(0);
142
+ });
143
+
144
+ it("should open modal onClick", async () => {
145
+ render(
146
+ <ThemeProvider theme={parseTheme(globalTheme)}>
147
+ <SiteItem {...defaultProps} />
148
+ </ThemeProvider>
149
+ );
150
+
151
+ expect(screen.queryByTestId("modal-roles-content")).toBeFalsy();
152
+ const button = screen.getByText("Add Roles");
153
+ fireEvent.click(button);
154
+
155
+ expect(screen.queryByTestId("modal-roles-content")).toBeTruthy();
156
+ });
157
+
158
+ it("should call add roles with site and roles selected", async () => {
159
+ render(
160
+ <ThemeProvider theme={parseTheme(globalTheme)}>
161
+ <SiteItem {...defaultProps} />
162
+ </ThemeProvider>
163
+ );
164
+
165
+ expect(screen.queryByTestId("modal-roles-content")).toBeFalsy();
166
+ const button = screen.getByText("Add Roles");
167
+ fireEvent.click(button);
168
+
169
+ expect(screen.queryByTestId("modal-roles-content")).toBeTruthy();
170
+ fireEvent.click(screen.getByLabelText("Administrator"));
171
+ fireEvent.click(screen.getByText("Add User Role"));
172
+
173
+ expect(addRolesMock).toBeCalledWith({ siteId: 1, roles: [1] });
174
+ });
175
+ });