@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,619 @@
1
+ import React from "react";
2
+ import axios from "axios";
3
+
4
+ import { ThemeProvider } from "styled-components";
5
+ import { parseTheme } from "@ax/helpers";
6
+ import { CalledWithMock, mock } from "jest-mock-extended";
7
+ import configureStore from "redux-mock-store";
8
+ import thunk from "redux-thunk";
9
+ import { Router } from "react-router-dom";
10
+
11
+ import { IActivateRole, IGetRoles } from "@ax/types";
12
+ import { history } from "@ax/routes";
13
+ import globalTheme from "@ax/themes/theme.json";
14
+ import Roles, { IRolesProps } from "@ax/modules/Users/Roles";
15
+
16
+ import { render, cleanup, screen, act, fireEvent } from "./../../../../../config/jest/test-utils";
17
+ import { rolesDataMock, usersDataMock } from "./../../../../__mocks__/store/Roles";
18
+ import { rolesDataResponse } from "./../../../../__mocks__/axios/Roles";
19
+
20
+ afterEach(cleanup);
21
+
22
+ jest.mock("axios");
23
+ const mockedAxios = axios as jest.MockedFunction<typeof axios>;
24
+ const defaultProps = mock<IRolesProps>();
25
+
26
+ describe("Roles module rendering", () => {
27
+ it("should render component", async () => {
28
+ mockedAxios.mockResolvedValue(rolesDataResponse);
29
+ window.HTMLElement.prototype.scrollIntoView = jest.fn();
30
+ const initialStore = {
31
+ app: { isLoading: false },
32
+ users: { roles: rolesDataMock },
33
+ sites: {
34
+ currentSiteInfo: null,
35
+ },
36
+ };
37
+ const middlewares: any = [thunk];
38
+ const mockStore = configureStore(middlewares);
39
+ const store = mockStore(initialStore);
40
+
41
+ const initialState = { ...initialStore, ...defaultProps };
42
+
43
+ const Component = (
44
+ <Router history={history}>
45
+ <ThemeProvider theme={parseTheme(globalTheme)}>
46
+ <Roles {...initialState} />
47
+ </ThemeProvider>
48
+ </Router>
49
+ );
50
+
51
+ await act(async () => {
52
+ render(Component, { store });
53
+ });
54
+
55
+ const usersWrapper = screen.getByTestId("users-wrapper");
56
+ expect(usersWrapper).toBeTruthy();
57
+ const tableListWrapper = screen.getByTestId("roles-table-list-wrapper");
58
+ expect(tableListWrapper).toBeTruthy();
59
+ });
60
+
61
+ it("should render role items", async () => {
62
+ mockedAxios.mockResolvedValue(rolesDataResponse);
63
+ window.HTMLElement.prototype.scrollIntoView = jest.fn();
64
+ const initialStore = {
65
+ app: { isLoading: false },
66
+ users: { roles: rolesDataMock },
67
+ sites: {
68
+ currentSiteInfo: null,
69
+ },
70
+ };
71
+ const middlewares: any = [thunk];
72
+ const mockStore = configureStore(middlewares);
73
+ const store = mockStore(initialStore);
74
+
75
+ const initialState = { ...initialStore, ...defaultProps };
76
+
77
+ const Component = (
78
+ <Router history={history}>
79
+ <ThemeProvider theme={parseTheme(globalTheme)}>
80
+ <Roles {...initialState} />
81
+ </ThemeProvider>
82
+ </Router>
83
+ );
84
+
85
+ await act(async () => {
86
+ render(Component, { store });
87
+ });
88
+
89
+ const roleItems = screen.getAllByTestId("role-item");
90
+ expect(roleItems).toBeTruthy();
91
+ });
92
+
93
+ it("should render tag colors", async () => {
94
+ mockedAxios.mockResolvedValue(rolesDataResponse);
95
+ window.HTMLElement.prototype.scrollIntoView = jest.fn();
96
+ const initialStore = {
97
+ app: { isLoading: false },
98
+ users: { roles: rolesDataMock },
99
+ sites: {
100
+ currentSiteInfo: null,
101
+ },
102
+ };
103
+ const middlewares: any = [thunk];
104
+ const mockStore = configureStore(middlewares);
105
+ const store = mockStore(initialStore);
106
+
107
+ const initialState = { ...initialStore, ...defaultProps };
108
+
109
+ const Component = (
110
+ <Router history={history}>
111
+ <ThemeProvider theme={parseTheme(globalTheme)}>
112
+ <Roles {...initialState} />
113
+ </ThemeProvider>
114
+ </Router>
115
+ );
116
+
117
+ await act(async () => {
118
+ render(Component, { store });
119
+ });
120
+
121
+ const tags = screen.getAllByTestId("tag-fixed");
122
+
123
+ expect(tags).toBeTruthy();
124
+ expect(tags.length).toEqual(5);
125
+
126
+ const styles = getComputedStyle(tags[0]);
127
+ expect(styles.backgroundColor).toEqual("rgb(199, 236, 248)");
128
+ });
129
+
130
+ it("should render empty state when no roles", async () => {
131
+ const initialStore = {
132
+ app: { isLoading: false },
133
+ users: { roles: [] },
134
+ sites: {
135
+ currentSiteInfo: null,
136
+ },
137
+ };
138
+ const middlewares: any = [thunk];
139
+ const mockStore = configureStore(middlewares);
140
+ const store = mockStore(initialStore);
141
+
142
+ const initialState = { ...initialStore, ...defaultProps };
143
+
144
+ const Component = (
145
+ <Router history={history}>
146
+ <ThemeProvider theme={parseTheme(globalTheme)}>
147
+ <Roles {...initialState} />
148
+ </ThemeProvider>
149
+ </Router>
150
+ );
151
+
152
+ await act(async () => {
153
+ render(Component, { store });
154
+ });
155
+
156
+ const emptyState = screen.getByTestId("empty-wrapper");
157
+ expect(emptyState).toBeTruthy();
158
+ });
159
+
160
+ it("should render toggle fields", async () => {
161
+ const initialStore = {
162
+ app: { isLoading: false },
163
+ users: { roles: rolesDataMock },
164
+ sites: {
165
+ currentSiteInfo: null,
166
+ },
167
+ };
168
+ const middlewares: any = [thunk];
169
+ const mockStore = configureStore(middlewares);
170
+ const store = mockStore(initialStore);
171
+
172
+ const initialState = { ...initialStore, ...defaultProps };
173
+
174
+ const Component = (
175
+ <Router history={history}>
176
+ <ThemeProvider theme={parseTheme(globalTheme)}>
177
+ <Roles {...initialState} />
178
+ </ThemeProvider>
179
+ </Router>
180
+ );
181
+
182
+ await act(async () => {
183
+ render(Component, { store });
184
+ });
185
+
186
+ const toggleFields = screen.getAllByTestId("toggle-field-wrapper");
187
+ expect(toggleFields.length).toEqual(5);
188
+ });
189
+
190
+ it("should render toggle field as disabled when it is not editable role", async () => {
191
+ const initialStore = {
192
+ app: { isLoading: false },
193
+ users: { roles: rolesDataMock },
194
+ sites: {
195
+ currentSiteInfo: null,
196
+ },
197
+ };
198
+ const middlewares: any = [thunk];
199
+ const mockStore = configureStore(middlewares);
200
+ const store = mockStore(initialStore);
201
+
202
+ const initialState = { ...initialStore, ...defaultProps };
203
+
204
+ const Component = (
205
+ <Router history={history}>
206
+ <ThemeProvider theme={parseTheme(globalTheme)}>
207
+ <Roles {...initialState} />
208
+ </ThemeProvider>
209
+ </Router>
210
+ );
211
+
212
+ await act(async () => {
213
+ render(Component, { store });
214
+ });
215
+
216
+ const adminRoleToggleField = screen.getAllByTestId<HTMLInputElement>("toggle-field-input");
217
+ expect(adminRoleToggleField[0]).toBeTruthy();
218
+
219
+ expect(adminRoleToggleField[0].disabled).toEqual(true);
220
+ });
221
+
222
+ it("should render avatars when is siteView and there is users", async () => {
223
+ const initialStore = {
224
+ app: { isLoading: false },
225
+ users: { roles: rolesDataMock, users: usersDataMock },
226
+ sites: {
227
+ currentSiteInfo: { id: 1 },
228
+ },
229
+ };
230
+ const middlewares: any = [thunk];
231
+ const mockStore = configureStore(middlewares);
232
+ const store = mockStore(initialStore);
233
+
234
+ const initialState = { ...initialStore, ...defaultProps };
235
+
236
+ const Component = (
237
+ <Router history={history}>
238
+ <ThemeProvider theme={parseTheme(globalTheme)}>
239
+ <Roles {...initialState} />
240
+ </ThemeProvider>
241
+ </Router>
242
+ );
243
+
244
+ await act(async () => {
245
+ render(Component, { store });
246
+ });
247
+
248
+ const avatarCell = screen.getAllByTestId("avatar-cell");
249
+ expect(avatarCell.length).toBeTruthy();
250
+ });
251
+
252
+ it("should render users length label when user items are greater than 5", async () => {
253
+ const initialStore = {
254
+ app: { isLoading: false },
255
+ users: { roles: rolesDataMock, users: usersDataMock },
256
+ sites: {
257
+ currentSiteInfo: { id: 1 },
258
+ },
259
+ };
260
+ const middlewares: any = [thunk];
261
+ const mockStore = configureStore(middlewares);
262
+ const store = mockStore(initialStore);
263
+
264
+ const initialState = { ...initialStore, ...defaultProps };
265
+
266
+ const Component = (
267
+ <Router history={history}>
268
+ <ThemeProvider theme={parseTheme(globalTheme)}>
269
+ <Roles {...initialState} />
270
+ </ThemeProvider>
271
+ </Router>
272
+ );
273
+
274
+ await act(async () => {
275
+ render(Component, { store });
276
+ });
277
+
278
+ const usersLength = screen.getByTestId("users-length");
279
+ expect(usersLength).toBeTruthy();
280
+ });
281
+
282
+ it("should render user avatars tooltip on hover", async () => {
283
+ const initialStore = {
284
+ app: { isLoading: false },
285
+ users: { roles: rolesDataMock, users: usersDataMock },
286
+ sites: {
287
+ currentSiteInfo: { id: 1 },
288
+ },
289
+ };
290
+ const middlewares: any = [thunk];
291
+ const mockStore = configureStore(middlewares);
292
+ const store = mockStore(initialStore);
293
+
294
+ const initialState = { ...initialStore, ...defaultProps };
295
+
296
+ const Component = (
297
+ <Router history={history}>
298
+ <ThemeProvider theme={parseTheme(globalTheme)}>
299
+ <Roles {...initialState} />
300
+ </ThemeProvider>
301
+ </Router>
302
+ );
303
+
304
+ await act(async () => {
305
+ render(Component, { store });
306
+ });
307
+
308
+ const avatarCells = screen.getAllByTestId("avatar-cell");
309
+ expect(avatarCells.length).toBeTruthy();
310
+ const usersLength = screen.getByTestId("users-length");
311
+ expect(usersLength).toBeTruthy();
312
+ fireEvent.mouseOver(avatarCells[0]);
313
+ const avatarTooltips = screen.getByTestId("avatars-tooltip");
314
+ expect(avatarTooltips).toBeTruthy();
315
+ });
316
+
317
+ it("should not render side modal if it's not open", async () => {
318
+ const initialStore = {
319
+ app: { isLoading: false },
320
+ users: { roles: rolesDataMock, users: usersDataMock },
321
+ sites: {
322
+ currentSiteInfo: { id: 1 },
323
+ },
324
+ };
325
+ const middlewares: any = [thunk];
326
+ const mockStore = configureStore(middlewares);
327
+ const store = mockStore(initialStore);
328
+
329
+ const initialState = { ...initialStore, ...defaultProps };
330
+
331
+ const Component = (
332
+ <Router history={history}>
333
+ <ThemeProvider theme={parseTheme(globalTheme)}>
334
+ <Roles {...initialState} />
335
+ </ThemeProvider>
336
+ </Router>
337
+ );
338
+
339
+ await act(async () => {
340
+ render(Component, { store });
341
+ });
342
+
343
+ const roleSideModal = screen.queryByTestId("role-side-modal");
344
+ expect(roleSideModal).not.toBeTruthy();
345
+ });
346
+ });
347
+
348
+ describe("Roles module events", () => {
349
+ it("should display sorting options when clicking name filter", async () => {
350
+ const initialStore = {
351
+ app: { isLoading: false },
352
+ users: { roles: rolesDataMock },
353
+ sites: {
354
+ currentSiteInfo: null,
355
+ },
356
+ };
357
+ const initialState = { ...initialStore, ...defaultProps };
358
+ const middlewares: any = [thunk];
359
+ const mockStore = configureStore(middlewares);
360
+ const store = mockStore(initialStore);
361
+
362
+ const Component = (
363
+ <Router history={history}>
364
+ <ThemeProvider theme={parseTheme(globalTheme)}>
365
+ <Roles {...initialState} />
366
+ </ThemeProvider>
367
+ </Router>
368
+ );
369
+ await act(async () => {
370
+ render(Component, { store });
371
+ });
372
+
373
+ const nameHeaderButton = screen.getByTestId("name-filter-header");
374
+ expect(nameHeaderButton).toBeTruthy();
375
+ fireEvent.click(nameHeaderButton);
376
+ const listItem = screen.getAllByTestId("list-item");
377
+ expect(listItem.length).toEqual(2);
378
+
379
+ const sortAscendingName = listItem[0];
380
+ const sortDescendingName = listItem[1];
381
+
382
+ expect(sortAscendingName.textContent).toEqual("Ascendent");
383
+ expect(sortDescendingName.textContent).toEqual("Descendent");
384
+ });
385
+
386
+ it("should render FullArrowUp icon if is filtered by ascending name", async () => {
387
+ const initialStore = {
388
+ app: { isLoading: false },
389
+ users: { roles: rolesDataMock },
390
+ sites: {
391
+ currentSiteInfo: null,
392
+ },
393
+ };
394
+ const initialState = { ...initialStore, ...defaultProps };
395
+ const middlewares: any = [thunk];
396
+ const mockStore = configureStore(middlewares);
397
+ const store = mockStore(initialStore);
398
+
399
+ const Component = (
400
+ <Router history={history}>
401
+ <ThemeProvider theme={parseTheme(globalTheme)}>
402
+ <Roles {...initialState} />
403
+ </ThemeProvider>
404
+ </Router>
405
+ );
406
+
407
+ await act(async () => {
408
+ render(Component, { store });
409
+ });
410
+
411
+ const nameHeaderButton = screen.getByTestId("name-filter-header");
412
+ expect(nameHeaderButton).toBeTruthy();
413
+ fireEvent.click(nameHeaderButton);
414
+ const listItem = screen.getAllByTestId("list-item");
415
+ expect(listItem.length).toEqual(2);
416
+
417
+ const sortAscendingName = listItem[0];
418
+ const sortDescendingName = listItem[1];
419
+
420
+ expect(sortAscendingName.textContent).toEqual("Ascendent");
421
+ expect(sortDescendingName.textContent).toEqual("Descendent");
422
+ fireEvent.click(sortAscendingName);
423
+ const arrowIcon = screen.getByTestId("icon-component-fullarrowup");
424
+ expect(arrowIcon).toBeTruthy();
425
+ });
426
+
427
+ it("should render FullArrowDown icon if is filtered by descending name", async () => {
428
+ mockedAxios.mockResolvedValue(rolesDataResponse);
429
+ window.HTMLElement.prototype.scrollIntoView = jest.fn();
430
+ const getRolesMock = jest.fn();
431
+ const activateRolesMock = jest.fn();
432
+ defaultProps.getRoles = getRolesMock as CalledWithMock<Promise<void>, [params?: IGetRoles | undefined]>;
433
+ defaultProps.activateRoles = activateRolesMock as CalledWithMock<Promise<boolean>, [params: IActivateRole]> &
434
+ ((params: IActivateRole) => Promise<boolean>);
435
+
436
+ const initialStore = {
437
+ app: { isLoading: false },
438
+ users: { roles: rolesDataMock },
439
+ sites: {
440
+ currentSiteInfo: null,
441
+ },
442
+ };
443
+ const middlewares: any = [thunk];
444
+ const mockStore = configureStore(middlewares);
445
+ mockedAxios.mockResolvedValue(rolesDataResponse);
446
+ const store = mockStore(initialStore);
447
+
448
+ const initialState = { ...initialStore, ...defaultProps };
449
+
450
+ const Component = (
451
+ <Router history={history}>
452
+ <ThemeProvider theme={parseTheme(globalTheme)}>
453
+ <Roles {...initialState} />
454
+ </ThemeProvider>
455
+ </Router>
456
+ );
457
+
458
+ await act(async () => {
459
+ render(Component, { store });
460
+ });
461
+
462
+ const nameHeaderButton = screen.getByTestId("name-filter-header");
463
+ expect(nameHeaderButton).toBeTruthy();
464
+ fireEvent.click(nameHeaderButton);
465
+ const listItem = screen.getAllByTestId("list-item");
466
+ expect(listItem.length).toEqual(2);
467
+
468
+ const sortAscendingName = listItem[0];
469
+ const sortDescendingName = listItem[1];
470
+
471
+ expect(sortAscendingName.textContent).toEqual("Ascendent");
472
+ expect(sortDescendingName.textContent).toEqual("Descendent");
473
+ fireEvent.click(sortDescendingName);
474
+ const arrowIcon = screen.getByTestId("icon-component-fullarrowdown");
475
+ expect(arrowIcon).toBeTruthy();
476
+ });
477
+
478
+ it("should select role when click check field", async () => {
479
+ const initialStore = {
480
+ app: { isLoading: false },
481
+ users: { roles: rolesDataMock },
482
+ sites: {
483
+ currentSiteInfo: null,
484
+ },
485
+ };
486
+
487
+ const initialState = { ...initialStore, ...defaultProps };
488
+ const middlewares: any = [thunk];
489
+ const mockStore = configureStore(middlewares);
490
+ const store = mockStore(initialStore);
491
+
492
+ const Component = (
493
+ <Router history={history}>
494
+ <ThemeProvider theme={parseTheme(globalTheme)}>
495
+ <Roles {...initialState} />
496
+ </ThemeProvider>
497
+ </Router>
498
+ );
499
+
500
+ await act(async () => {
501
+ render(Component, { store });
502
+ });
503
+
504
+ const checkFieldLabels = screen.getAllByTestId("check-field-label");
505
+ const checkFieldInputs = screen.getAllByTestId<HTMLInputElement>("check-field-input");
506
+ expect(checkFieldLabels).toBeTruthy();
507
+ expect(checkFieldInputs).toBeTruthy();
508
+ fireEvent.change(checkFieldInputs[0], { target: { checked: true, value: "Clicked" } });
509
+ expect(checkFieldInputs[0].value).toBe("Clicked");
510
+ expect(checkFieldInputs[0].checked).toBeTruthy();
511
+ });
512
+
513
+ it("should display sidemodal on click", async () => {
514
+ const initialStore = {
515
+ app: { isLoading: false },
516
+ users: { roles: rolesDataMock },
517
+ sites: {
518
+ currentSiteInfo: null,
519
+ },
520
+ };
521
+ const initialState = { ...initialStore, ...defaultProps };
522
+ const middlewares: any = [thunk];
523
+ const mockStore = configureStore(middlewares);
524
+ const store = mockStore(initialStore);
525
+
526
+ const Component = (
527
+ <Router history={history}>
528
+ <ThemeProvider theme={parseTheme(globalTheme)}>
529
+ <Roles {...initialState} />
530
+ </ThemeProvider>
531
+ </Router>
532
+ );
533
+
534
+ await act(async () => {
535
+ render(Component, { store });
536
+ });
537
+
538
+ const roleItems = screen.getAllByTestId("role-item-permissions");
539
+ expect(roleItems.length).toBeTruthy();
540
+ fireEvent.click(roleItems[0]);
541
+ const roleSideModal = screen.getByTestId("role-side-modal");
542
+ expect(roleSideModal).toBeTruthy();
543
+ });
544
+
545
+ it("should display role data in side modal", async () => {
546
+ const initialStore = {
547
+ app: { isLoading: false },
548
+ users: { roles: rolesDataMock },
549
+ sites: {
550
+ currentSiteInfo: null,
551
+ },
552
+ };
553
+ const initialState = { ...initialStore, ...defaultProps };
554
+ const middlewares: any = [thunk];
555
+ const mockStore = configureStore(middlewares);
556
+ const store = mockStore(initialStore);
557
+
558
+ const Component = (
559
+ <Router history={history}>
560
+ <ThemeProvider theme={parseTheme(globalTheme)}>
561
+ <Roles {...initialState} />
562
+ </ThemeProvider>
563
+ </Router>
564
+ );
565
+
566
+ await act(async () => {
567
+ render(Component, { store });
568
+ });
569
+
570
+ const roleItems = screen.getAllByTestId("role-item-permissions");
571
+ const roleItemNames = screen.getAllByTestId("role-item-name");
572
+
573
+ expect(roleItems).toBeTruthy();
574
+ expect(roleItemNames).toBeTruthy();
575
+ expect(roleItemNames[0].textContent).toEqual("Administrator");
576
+
577
+ fireEvent.click(roleItems[0]);
578
+ const roleSideModal = screen.getByTestId("role-side-modal");
579
+ expect(roleSideModal).toBeTruthy();
580
+ const roleSideModalTitle = screen.getByTestId("role-side-modal-title");
581
+ expect(roleSideModalTitle.textContent).toEqual("Administrator Permissions");
582
+ const roleSideModalPermissions = screen.getByTestId("role-side-modal-total-permissions");
583
+ expect(roleSideModalPermissions.textContent).toEqual("86/95");
584
+ });
585
+
586
+ it("should display role permissions list", async () => {
587
+ const initialStore = {
588
+ app: { isLoading: false },
589
+ users: { roles: rolesDataMock },
590
+ sites: {
591
+ currentSiteInfo: null,
592
+ },
593
+ };
594
+ const initialState = { ...initialStore, ...defaultProps };
595
+ const middlewares: any = [thunk];
596
+ const mockStore = configureStore(middlewares);
597
+ const store = mockStore(initialStore);
598
+
599
+ const Component = (
600
+ <Router history={history}>
601
+ <ThemeProvider theme={parseTheme(globalTheme)}>
602
+ <Roles {...initialState} />
603
+ </ThemeProvider>
604
+ </Router>
605
+ );
606
+
607
+ await act(async () => {
608
+ render(Component, { store });
609
+ });
610
+
611
+ const roleItems = screen.getAllByTestId("role-item-permissions");
612
+ expect(roleItems).toBeTruthy();
613
+ fireEvent.click(roleItems[0]);
614
+ const roleSideModal = screen.getByTestId("role-side-modal");
615
+ expect(roleSideModal).toBeTruthy();
616
+ const rolePermissions = screen.getAllByTestId("role-permission");
617
+ expect(rolePermissions.length).toBeGreaterThan(0);
618
+ });
619
+ });