@truedat/auth 7.5.9 → 7.5.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/package.json +40 -64
  2. package/src/groups/components/EditGroup.js +0 -1
  3. package/src/groups/components/Group.js +0 -1
  4. package/src/groups/components/GroupBreadcrumbs.js +1 -2
  5. package/src/groups/components/GroupCard.js +3 -3
  6. package/src/groups/components/GroupCards.js +2 -3
  7. package/src/groups/components/GroupForm.js +0 -1
  8. package/src/groups/components/GroupLoader.js +19 -51
  9. package/src/groups/components/GroupUsers.js +4 -3
  10. package/src/groups/components/GroupUsersTable.js +4 -4
  11. package/src/groups/components/GroupsLoader.js +2 -2
  12. package/src/groups/components/GroupsSearchLoader.js +1 -1
  13. package/src/groups/components/NewGroup.js +0 -1
  14. package/src/groups/components/__tests__/Group.spec.js +0 -1
  15. package/src/groups/components/__tests__/GroupCard.spec.js +23 -7
  16. package/src/groups/components/__tests__/GroupCards.spec.js +9 -6
  17. package/src/groups/components/__tests__/GroupLoader.spec.js +71 -0
  18. package/src/groups/components/__tests__/GroupUsers.spec.js +8 -12
  19. package/src/groups/components/__tests__/GroupUsersTable.spec.js +34 -42
  20. package/src/groups/components/__tests__/GroupsSearchLoader.spec.js +0 -1
  21. package/src/groups/components/__tests__/__snapshots__/Group.spec.js.snap +1 -2
  22. package/src/groups/components/__tests__/__snapshots__/GroupCard.spec.js.snap +43 -94
  23. package/src/groups/components/__tests__/__snapshots__/GroupCards.spec.js.snap +118 -53
  24. package/src/groups/components/__tests__/__snapshots__/GroupLoader.spec.js.snap +11 -0
  25. package/src/groups/components/__tests__/__snapshots__/GroupUsers.spec.js.snap +38 -45
  26. package/src/groups/components/__tests__/__snapshots__/GroupUsersTable.spec.js.snap +121 -213
  27. package/src/groups/components/index.js +1 -1
  28. package/src/groups/sagas/__tests__/deleteGroupUser.spec.js +6 -6
  29. package/src/groups/sagas/deleteGroup.js +1 -1
  30. package/src/groups/sagas/deleteGroupUser.js +2 -2
  31. package/src/groups/sagas/fetchGroup.js +1 -1
  32. package/src/groups/sagas/updateGroup.js +1 -1
  33. package/src/roles/components/NewRole.js +0 -1
  34. package/src/roles/components/PermissionGroup.js +0 -1
  35. package/src/roles/components/Role.js +8 -3
  36. package/src/roles/components/RoleCards.js +2 -3
  37. package/src/roles/components/RoleForm.js +1 -1
  38. package/src/roles/components/RoleLoader.js +26 -39
  39. package/src/roles/components/RoleRoutes.js +29 -32
  40. package/src/roles/components/RoleSelector.js +0 -1
  41. package/src/roles/components/Roles.js +1 -3
  42. package/src/roles/components/RolesLoader.js +2 -2
  43. package/src/roles/components/__tests__/PermissionGroup.spec.js +7 -17
  44. package/src/roles/components/__tests__/Role.spec.js +0 -1
  45. package/src/roles/components/__tests__/RoleCards.spec.js +11 -10
  46. package/src/roles/components/__tests__/RoleRoutes.spec.js +53 -7
  47. package/src/roles/components/__tests__/RoleSelector.spec.js +0 -1
  48. package/src/roles/components/__tests__/Roles.spec.js +2 -3
  49. package/src/roles/components/__tests__/__snapshots__/PermissionGroup.spec.js.snap +3 -5
  50. package/src/roles/components/__tests__/__snapshots__/Role.spec.js.snap +4 -4
  51. package/src/roles/components/__tests__/__snapshots__/RoleCards.spec.js.snap +57 -127
  52. package/src/roles/components/__tests__/__snapshots__/RoleRoutes.spec.js.snap +38 -5
  53. package/src/roles/components/__tests__/__snapshots__/RoleSelector.spec.js.snap +1 -1
  54. package/src/roles/components/__tests__/__snapshots__/Roles.spec.js.snap +6 -3
  55. package/src/roles/components/index.js +1 -1
  56. package/src/roles/reducers/rolePermissions.js +1 -1
  57. package/src/roles/reducers/roleRedirect.js +1 -1
  58. package/src/roles/sagas/deleteRole.js +1 -1
  59. package/src/roles/sagas/fetchRole.js +1 -1
  60. package/src/roles/sagas/fetchRolePermissions.js +1 -1
  61. package/src/roles/sagas/updateRole.js +1 -1
  62. package/src/roles/sagas/updateRolePermissions.js +1 -1
  63. package/src/sessions/components/Auth0Callback.js +5 -4
  64. package/src/sessions/components/Auth0LoginButton.js +2 -2
  65. package/src/sessions/components/AuthMethodsLoader.js +10 -19
  66. package/src/sessions/components/LoginButtons.js +4 -4
  67. package/src/sessions/components/NonceCallback.js +21 -38
  68. package/src/sessions/components/OidcLoginButton.js +0 -1
  69. package/src/sessions/components/OpenIDConnect.js +5 -4
  70. package/src/sessions/components/PrivateRoute.js +25 -57
  71. package/src/sessions/components/ProxyLoginCallback.js +0 -2
  72. package/src/sessions/components/SamlCallback.js +0 -2
  73. package/src/sessions/components/UnauthorizedRoute.js +28 -31
  74. package/src/sessions/components/__tests__/Auth0LoginButton.spec.js +12 -12
  75. package/src/sessions/components/__tests__/AuthMethodsLoader.spec.js +15 -12
  76. package/src/sessions/components/__tests__/NonceCallback.spec.js +84 -0
  77. package/src/sessions/components/__tests__/OidcLoginButton.spec.js +10 -10
  78. package/src/sessions/components/__tests__/OpenIDConnect.spec.js +7 -8
  79. package/src/sessions/components/__tests__/PrivateRoute.spec.js +90 -0
  80. package/src/sessions/components/__tests__/UnauthorizedRoute.spec.js +88 -0
  81. package/src/sessions/components/__tests__/__snapshots__/Auth0LoginButton.spec.js.snap +22 -24
  82. package/src/sessions/components/__tests__/__snapshots__/NonceCallback.spec.js.snap +18 -0
  83. package/src/sessions/components/__tests__/__snapshots__/OidcLoginButton.spec.js.snap +18 -18
  84. package/src/sessions/components/__tests__/__snapshots__/PrivateRoute.spec.js.snap +9 -0
  85. package/src/sessions/components/__tests__/__snapshots__/UnauthorizedRoute.spec.js.snap +9 -0
  86. package/src/sessions/components/index.js +1 -1
  87. package/src/sessions/sagas/__tests__/login.spec.js +4 -4
  88. package/src/sessions/sagas/__tests__/refresh.spec.js +2 -2
  89. package/src/sessions/sagas/__tests__/token.spec.js +4 -4
  90. package/src/sessions/sagas/login.js +5 -5
  91. package/src/sessions/sagas/refresh.js +2 -2
  92. package/src/sessions/sagas/token.js +2 -2
  93. package/src/users/components/AdminUserRoutes.js +35 -51
  94. package/src/users/components/EditUser.js +0 -1
  95. package/src/users/components/GroupUserCrumbs.js +8 -8
  96. package/src/users/components/InitialUser.js +0 -1
  97. package/src/users/components/NewUser.js +0 -1
  98. package/src/users/components/Password.js +0 -1
  99. package/src/users/components/User.js +2 -2
  100. package/src/users/components/UserAclRow.js +1 -2
  101. package/src/users/components/UserAcls.js +0 -1
  102. package/src/users/components/UserActions.js +1 -2
  103. package/src/users/components/UserBreadcrumbs.js +2 -3
  104. package/src/users/components/UserCard.js +3 -3
  105. package/src/users/components/UserCards.js +5 -4
  106. package/src/users/components/UserDomainsFilter.js +2 -5
  107. package/src/users/components/UserForm.js +8 -33
  108. package/src/users/components/UserGroupAclRow.js +1 -2
  109. package/src/users/components/UserGroupAcls.js +0 -1
  110. package/src/users/components/UserLoader.js +21 -48
  111. package/src/users/components/UserPassword.js +0 -1
  112. package/src/users/components/UserRoutes.js +73 -7
  113. package/src/users/components/UserSelector.js +0 -1
  114. package/src/users/components/UserTabs.js +1 -2
  115. package/src/users/components/UsersAndGroups.js +6 -6
  116. package/src/users/components/UsersLoader.js +2 -2
  117. package/src/users/components/UsersSearchLoader.js +2 -1
  118. package/src/users/components/__tests__/CanInitLoader.spec.js +6 -13
  119. package/src/users/components/__tests__/EditUser.spec.js +4 -33
  120. package/src/users/components/__tests__/InitialUser.spec.js +4 -34
  121. package/src/users/components/__tests__/NewUser.spec.js +4 -35
  122. package/src/users/components/__tests__/Password.spec.js +59 -69
  123. package/src/users/components/__tests__/User.spec.js +1 -2
  124. package/src/users/components/__tests__/UserAclRow.spec.js +5 -7
  125. package/src/users/components/__tests__/UserAcls.spec.js +8 -9
  126. package/src/users/components/__tests__/UserActions.spec.js +4 -5
  127. package/src/users/components/__tests__/UserCard.spec.js +11 -11
  128. package/src/users/components/__tests__/UserCards.spec.js +39 -31
  129. package/src/users/components/__tests__/UserDomainsFilter.spec.js +12 -22
  130. package/src/users/components/__tests__/UserForm.spec.js +24 -44
  131. package/src/users/components/__tests__/UserGroupAclRow.spec.js +1 -2
  132. package/src/users/components/__tests__/UserGroupAcls.spec.js +8 -9
  133. package/src/users/components/__tests__/UserLoader.spec.js +85 -0
  134. package/src/users/components/__tests__/UserPassword.spec.js +8 -21
  135. package/src/users/components/__tests__/UserRoutes.spec.js +129 -4
  136. package/src/users/components/__tests__/UserSelector.spec.js +0 -1
  137. package/src/users/components/__tests__/UsersAndGroups.spec.js +45 -5
  138. package/src/users/components/__tests__/UsersSearchLoader.spec.js +0 -1
  139. package/src/users/components/__tests__/__snapshots__/EditUser.spec.js.snap +23 -21
  140. package/src/users/components/__tests__/__snapshots__/InitialUser.spec.js.snap +22 -21
  141. package/src/users/components/__tests__/__snapshots__/NewUser.spec.js.snap +25 -23
  142. package/src/users/components/__tests__/__snapshots__/Password.spec.js.snap +8 -7
  143. package/src/users/components/__tests__/__snapshots__/User.spec.js.snap +7 -6
  144. package/src/users/components/__tests__/__snapshots__/UserAclRow.spec.js.snap +12 -11
  145. package/src/users/components/__tests__/__snapshots__/UserActions.spec.js.snap +56 -67
  146. package/src/users/components/__tests__/__snapshots__/UserCard.spec.js.snap +56 -70
  147. package/src/users/components/__tests__/__snapshots__/UserCards.spec.js.snap +117 -83
  148. package/src/users/components/__tests__/__snapshots__/UserDomainsFilter.spec.js.snap +2 -2
  149. package/src/users/components/__tests__/__snapshots__/UserForm.spec.js.snap +21 -20
  150. package/src/users/components/__tests__/__snapshots__/UserLoader.spec.js.snap +3 -0
  151. package/src/users/components/__tests__/__snapshots__/UserPassword.spec.js.snap +9 -7
  152. package/src/users/components/__tests__/__snapshots__/UserRoutes.spec.js.snap +170 -16
  153. package/src/users/components/__tests__/__snapshots__/UserSelector.spec.js.snap +1 -1
  154. package/src/users/components/__tests__/__snapshots__/UsersAndGroups.spec.js.snap +75 -14
  155. package/src/users/sagas/__tests__/fetchUser.spec.js +3 -5
  156. package/src/users/sagas/__tests__/updateUser.spec.js +1 -1
  157. package/src/users/sagas/deleteUser.js +1 -1
  158. package/src/users/sagas/fetchUser.js +1 -1
  159. package/src/users/sagas/updateUser.js +1 -1
  160. package/src/users/components/__tests__/__snapshots__/CanInitLoader.spec.js.snap +0 -3
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import { waitFor } from "@testing-library/react";
3
2
  import { render } from "@truedat/test/render";
4
3
  import UserGroupAclRow from "../UserGroupAclRow";
@@ -7,7 +6,7 @@ describe("<UserGroupAclRow />", () => {
7
6
  const props = {
8
7
  resource: "resource1",
9
8
  role: "role1",
10
- group: "grupo1"
9
+ group: "grupo1",
11
10
  };
12
11
 
13
12
  it("matches the latest snapshot", async () => {
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import { waitFor } from "@testing-library/react";
3
2
  import { render } from "@truedat/test/render";
4
3
  import { UserGroupAcls } from "../UserGroupAcls";
@@ -8,8 +7,8 @@ const renderOpts = {
8
7
  en: {
9
8
  "user.acl.role": "role",
10
9
  "user.acl.domain": "domain",
11
- "user.acl": "acl"
12
- }
10
+ "user.acl": "acl",
11
+ },
13
12
  },
14
13
  state: {
15
14
  user: {
@@ -17,16 +16,16 @@ const renderOpts = {
17
16
  {
18
17
  resource: { id: 1, name: "resource1", type: "domain" },
19
18
  role: { id: 2, name: "role1" },
20
- group: { id: 6, name: "group1" }
19
+ group: { id: 6, name: "group1" },
21
20
  },
22
21
  {
23
22
  resource: { id: 2, name: "resource2", type: "domain" },
24
23
  role: { id: 3, name: "role2" },
25
- group: { id: 3, name: "group2" }
26
- }
27
- ]
28
- }
29
- }
24
+ group: { id: 3, name: "group2" },
25
+ },
26
+ ],
27
+ },
28
+ },
30
29
  };
31
30
 
32
31
  describe("<UserGroupAcls />", () => {
@@ -0,0 +1,85 @@
1
+ import React from "react";
2
+ import { render, waitForLoad } from "@truedat/test/render";
3
+ import { useParams } from "react-router";
4
+ import UserLoader from "../UserLoader";
5
+ import { clearUser, fetchUser } from "../../routines";
6
+
7
+ jest.mock("react-router", () => ({
8
+ ...jest.requireActual("react-router"),
9
+ useParams: jest.fn(),
10
+ }));
11
+
12
+ describe("<UserLoader />", () => {
13
+ beforeEach(() => {
14
+ useParams.mockReturnValue({ id: null });
15
+ });
16
+
17
+ afterEach(() => {
18
+ jest.clearAllMocks();
19
+ });
20
+
21
+ it("matches the latest snapshot", async () => {
22
+ const rendered = render(<UserLoader />, {
23
+ state: {
24
+ userLoading: false,
25
+ },
26
+ });
27
+ await waitForLoad(rendered);
28
+ expect(rendered.container).toMatchSnapshot();
29
+ });
30
+
31
+ it("dispatches clearUser when no id is provided", async () => {
32
+ const mockDispatch = jest.fn();
33
+ useParams.mockReturnValue({ id: null });
34
+
35
+ render(<UserLoader />, {
36
+ dispatch: mockDispatch,
37
+ });
38
+
39
+ expect(mockDispatch).toHaveBeenCalledWith(clearUser());
40
+ });
41
+
42
+ it("dispatches fetchUser when id is provided", async () => {
43
+ const mockDispatch = jest.fn();
44
+ useParams.mockReturnValue({ id: "123" });
45
+
46
+ render(<UserLoader />, {
47
+ dispatch: mockDispatch,
48
+ });
49
+
50
+ expect(mockDispatch).toHaveBeenCalledWith(fetchUser({ id: "123" }));
51
+ });
52
+
53
+ it("renders loading component when userLoading is true", async () => {
54
+ const rendered = render(<UserLoader />, {
55
+ state: {
56
+ userLoading: true,
57
+ },
58
+ });
59
+
60
+ expect(rendered.container.firstChild).not.toBeNull();
61
+ });
62
+
63
+ it("renders nothing when userLoading is false", async () => {
64
+ const rendered = render(<UserLoader />, {
65
+ state: {
66
+ userLoading: false,
67
+ },
68
+ });
69
+ await waitForLoad(rendered);
70
+
71
+ expect(rendered.container.firstChild).toBeNull();
72
+ });
73
+
74
+ it("dispatches clearUser on unmount", async () => {
75
+ const mockDispatch = jest.fn();
76
+ const { unmount } = render(<UserLoader />, {
77
+ dispatch: mockDispatch,
78
+ });
79
+
80
+ mockDispatch.mockClear();
81
+ unmount();
82
+
83
+ expect(mockDispatch).toHaveBeenCalledWith(clearUser());
84
+ });
85
+ });
@@ -1,37 +1,24 @@
1
- import React from "react";
2
- import { waitFor } from "@testing-library/react";
3
- import { render } from "@truedat/test/render";
1
+ import { render, waitForLoad } from "@truedat/test/render";
4
2
  import { UserPassword } from "../UserPassword";
5
3
 
6
4
  const renderOpts = {
7
- messages: {
8
- en: {
9
- "actions.cancel": "cancel",
10
- "form.validation.minLength": "{prop} min length {value}",
11
- "form.validation.required": "{prop} required",
12
- "login.form.re_password.label": "re_password",
13
- "navigation.members.users": "users",
14
- "user.password.change": "change password",
15
- "user.password.new_password": "new_password",
16
- "user.password.save": "save"
17
- }
18
- },
19
5
  state: {
20
6
  authentication: {
21
- user_name: "foo"
22
- }
23
- }
7
+ user_name: "foo",
8
+ },
9
+ },
24
10
  };
25
11
 
26
12
  describe("<UserPassword />", () => {
27
13
  const user = {
28
14
  id: 1,
29
- user_name: "joe"
15
+ user_name: "joe",
30
16
  };
31
17
  const props = { user };
32
18
 
33
19
  it("matches the latest snapshot", async () => {
34
- const { container } = render(<UserPassword {...props} />, renderOpts);
35
- await waitFor(() => expect(container).toMatchSnapshot());
20
+ const rendered = render(<UserPassword {...props} />, renderOpts);
21
+ await waitForLoad(rendered);
22
+ expect(rendered.container).toMatchSnapshot();
36
23
  });
37
24
  });
@@ -1,10 +1,135 @@
1
1
  import React from "react";
2
- import { shallow } from "enzyme";
2
+ import { render, waitForLoad } from "@truedat/test/render";
3
3
  import { UserRoutes } from "../UserRoutes";
4
+ import { useAuthorized } from "@truedat/core/hooks/useAuthorized";
5
+
6
+ jest.mock("@truedat/core/hooks/useAuthorized", () => ({
7
+ useAuthorized: jest.fn(() => true),
8
+ }));
9
+
10
+ // Mock all components used in UserRoutes
11
+ jest.mock("../Password", () => () => <div>Password</div>);
12
+ jest.mock("../../../groups/components/GroupsLoader", () => () => (
13
+ <div>GroupsLoader</div>
14
+ ));
15
+ jest.mock("../../../groups/components/GroupLoader", () => () => (
16
+ <div>GroupLoader</div>
17
+ ));
18
+ jest.mock("../../../groups/components/Group", () => () => <div>Group</div>);
19
+ jest.mock("../../../groups/components/GroupUsers", () => () => (
20
+ <div>GroupUsers</div>
21
+ ));
22
+ jest.mock("../../../groups/components/NewGroup", () => () => (
23
+ <div>NewGroup</div>
24
+ ));
25
+ jest.mock("../../../groups/components/EditGroup", () => () => (
26
+ <div>EditGroup</div>
27
+ ));
28
+ jest.mock("../EditUser", () => () => <div>EditUser</div>);
29
+ jest.mock("../GroupUserCrumbs", () => () => <div>GroupUserCrumbs</div>);
30
+ jest.mock("../NewUser", () => () => <div>NewUser</div>);
31
+ jest.mock("../User", () => () => <div>User</div>);
32
+ jest.mock("../UserLoader", () => () => <div>UserLoader</div>);
33
+ jest.mock("../UsersAndGroups", () => () => <div>UsersAndGroups</div>);
34
+ jest.mock("../UsersLoader", () => () => <div>UsersLoader</div>);
35
+ jest.mock("../UserPassword", () => () => <div>UserPassword</div>);
36
+ jest.mock("@truedat/core/router/Unauthorized", () => () => (
37
+ <div>Unauthorized</div>
38
+ ));
4
39
 
5
40
  describe("<UserRoutes />", () => {
6
- it("matches the latest snapshot", () => {
7
- const wrapper = shallow(<UserRoutes />);
8
- expect(wrapper).toMatchSnapshot();
41
+ it("renders correctly with default route", async () => {
42
+ const rendered = render(<UserRoutes />);
43
+ await waitForLoad(rendered);
44
+ expect(rendered.container).toMatchSnapshot();
45
+ });
46
+
47
+ it("renders correctly with users route", async () => {
48
+ const rendered = render(<UserRoutes />, {
49
+ routes: ["/users"],
50
+ });
51
+ await waitForLoad(rendered);
52
+ expect(rendered.container).toMatchSnapshot();
53
+ });
54
+
55
+ it("renders correctly with users/new route", async () => {
56
+ const rendered = render(<UserRoutes />, {
57
+ routes: ["/users/new"],
58
+ });
59
+ await waitForLoad(rendered);
60
+ expect(rendered.container).toMatchSnapshot();
61
+ });
62
+
63
+ it("renders correctly with users/:id route", async () => {
64
+ const rendered = render(<UserRoutes />, {
65
+ routes: ["/users/123"],
66
+ });
67
+ await waitForLoad(rendered);
68
+ expect(rendered.container).toMatchSnapshot();
69
+ });
70
+
71
+ it("renders correctly with users/:id/edit route", async () => {
72
+ const rendered = render(<UserRoutes />, {
73
+ routes: ["/users/123/edit"],
74
+ });
75
+ await waitForLoad(rendered);
76
+ expect(rendered.container).toMatchSnapshot();
77
+ });
78
+
79
+ it("renders correctly with users/:id/password route", async () => {
80
+ const rendered = render(<UserRoutes />, {
81
+ routes: ["/users/123/password"],
82
+ });
83
+ await waitForLoad(rendered);
84
+ expect(rendered.container).toMatchSnapshot();
85
+ });
86
+
87
+ it("renders correctly with groups route", async () => {
88
+ const rendered = render(<UserRoutes />, {
89
+ routes: ["/groups"],
90
+ });
91
+ await waitForLoad(rendered);
92
+ expect(rendered.container).toMatchSnapshot();
93
+ });
94
+
95
+ it("renders correctly with groups/new route", async () => {
96
+ const rendered = render(<UserRoutes />, {
97
+ routes: ["/groups/new"],
98
+ });
99
+ await waitForLoad(rendered);
100
+ expect(rendered.container).toMatchSnapshot();
101
+ });
102
+
103
+ it("renders correctly with groups/:id route", async () => {
104
+ const rendered = render(<UserRoutes />, {
105
+ routes: ["/groups/123"],
106
+ });
107
+ await waitForLoad(rendered);
108
+ expect(rendered.container).toMatchSnapshot();
109
+ });
110
+
111
+ it("renders correctly with groups/:id/edit route", async () => {
112
+ const rendered = render(<UserRoutes />, {
113
+ routes: ["/groups/123/edit"],
114
+ });
115
+ await waitForLoad(rendered);
116
+ expect(rendered.container).toMatchSnapshot();
117
+ });
118
+
119
+ it("renders correctly with PASSWORD route", async () => {
120
+ const rendered = render(<UserRoutes />, {
121
+ routes: ["/password"],
122
+ });
123
+ await waitForLoad(rendered);
124
+ expect(rendered.container).toMatchSnapshot();
125
+ });
126
+
127
+ it("renders unauthorized component when not authorized", async () => {
128
+ useAuthorized.mockReturnValueOnce(false);
129
+ const rendered = render(<UserRoutes />, {
130
+ routes: ["/users"],
131
+ });
132
+ await waitForLoad(rendered);
133
+ expect(rendered.container).toMatchSnapshot();
9
134
  });
10
135
  });
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import { render } from "@truedat/test/render";
3
2
  import UserSelector from "../UserSelector";
4
3
 
@@ -1,10 +1,50 @@
1
- import React from "react";
2
- import { render } from "@truedat/test/render";
1
+ import { render, waitForLoad } from "@truedat/test/render";
2
+ import { USERS, GROUPS } from "@truedat/core/routes";
3
3
  import { UsersAndGroups } from "../UsersAndGroups";
4
4
 
5
+ // Mock the components used in UsersAndGroups
6
+ jest.mock(
7
+ "../UserCards",
8
+ () =>
9
+ function UserCards() {
10
+ return <div>UserCards</div>;
11
+ }
12
+ );
13
+ jest.mock(
14
+ "../UserTabs",
15
+ () =>
16
+ function UserTabs() {
17
+ return <div>UserTabs</div>;
18
+ }
19
+ );
20
+ jest.mock(
21
+ "../../../groups/components/GroupCards",
22
+ () =>
23
+ function GroupCards() {
24
+ return <div>GroupCards</div>;
25
+ }
26
+ );
27
+
5
28
  describe("<UsersAndGroups />", () => {
6
- it("matches the latest snapshot", () => {
7
- const { container } = render(<UsersAndGroups />);
8
- expect(container).toMatchSnapshot();
29
+ it("renders correctly with default route", async () => {
30
+ const rendered = render(<UsersAndGroups />);
31
+ await waitForLoad(rendered);
32
+ expect(rendered.container).toMatchSnapshot();
33
+ });
34
+
35
+ it("renders UserCards on USERS route", async () => {
36
+ const rendered = render(<UsersAndGroups />, {
37
+ routes: [USERS],
38
+ });
39
+ await waitForLoad(rendered);
40
+ expect(rendered.container).toMatchSnapshot();
41
+ });
42
+
43
+ it("renders GroupCards on GROUPS route", async () => {
44
+ const rendered = render(<UsersAndGroups />, {
45
+ routes: [GROUPS],
46
+ });
47
+ await waitForLoad(rendered);
48
+ expect(rendered.container).toMatchSnapshot();
9
49
  });
10
50
  });
@@ -1,4 +1,3 @@
1
- import React from "react";
2
1
  import { render } from "@truedat/test/render";
3
2
  import UsersSearchLoader from "../UsersSearchLoader";
4
3
 
@@ -7,9 +7,10 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
7
7
  >
8
8
  <a
9
9
  class="section"
10
+ data-discover="true"
10
11
  href="/users"
11
12
  >
12
- Users
13
+ navigation.members.users
13
14
  </a>
14
15
  <i
15
16
  aria-hidden="true"
@@ -18,7 +19,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
18
19
  <div
19
20
  class="active section"
20
21
  >
21
- edit
22
+ users.actions.edit
22
23
  </div>
23
24
  </div>
24
25
  <div
@@ -34,7 +35,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
34
35
  <div
35
36
  class="content"
36
37
  >
37
- edit
38
+ users.actions.edit
38
39
  </div>
39
40
  </h2>
40
41
  <form
@@ -46,7 +47,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
46
47
  <label
47
48
  for="user_name"
48
49
  >
49
- Username
50
+ user.form.user_name
50
51
  </label>
51
52
  <div
52
53
  class="ui input"
@@ -54,7 +55,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
54
55
  <input
55
56
  autocomplete="off"
56
57
  id="user_name"
57
- placeholder="pperez"
58
+ placeholder="user.form.placeholder.user_name"
58
59
  required=""
59
60
  type="text"
60
61
  value="fred"
@@ -67,7 +68,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
67
68
  <label
68
69
  for="external_id"
69
70
  >
70
- External ID
71
+ user.form.external_id
71
72
  </label>
72
73
  <div
73
74
  class="ui input"
@@ -75,7 +76,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
75
76
  <input
76
77
  autocomplete="off"
77
78
  id="external_id"
78
- placeholder="pperez"
79
+ placeholder="user.form.placeholder.external_id"
79
80
  type="text"
80
81
  value=""
81
82
  />
@@ -87,7 +88,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
87
88
  <label
88
89
  for="email"
89
90
  >
90
- Email address
91
+ user.form.email
91
92
  </label>
92
93
  <div
93
94
  class="ui input"
@@ -95,7 +96,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
95
96
  <input
96
97
  autocomplete="off"
97
98
  id="email"
98
- placeholder="pperez@example.com"
99
+ placeholder="user.form.placeholder.email"
99
100
  type="text"
100
101
  value=""
101
102
  />
@@ -107,7 +108,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
107
108
  <label
108
109
  for="full_name"
109
110
  >
110
- Full name
111
+ user.form.full_name
111
112
  </label>
112
113
  <div
113
114
  class="ui input"
@@ -115,7 +116,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
115
116
  <input
116
117
  autocomplete="off"
117
118
  id="full_name"
118
- placeholder="Pepe Perez"
119
+ placeholder="user.form.placeholder.full_name"
119
120
  required=""
120
121
  type="text"
121
122
  value="fredrik foobar"
@@ -126,7 +127,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
126
127
  class="required field"
127
128
  >
128
129
  <label>
129
- role
130
+ user.form.role
130
131
  </label>
131
132
  <div
132
133
  aria-expanded="false"
@@ -142,7 +143,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
142
143
  class="divider text"
143
144
  role="alert"
144
145
  >
145
- user
146
+ user.type.user
146
147
  </div>
147
148
  <i
148
149
  aria-hidden="true"
@@ -161,7 +162,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
161
162
  <span
162
163
  class="text"
163
164
  >
164
- user
165
+ user.type.user
165
166
  </span>
166
167
  </div>
167
168
  <div
@@ -174,7 +175,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
174
175
  <span
175
176
  class="text"
176
177
  >
177
- admin
178
+ user.type.admin
178
179
  </span>
179
180
  </div>
180
181
  <div
@@ -187,7 +188,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
187
188
  <span
188
189
  class="text"
189
190
  >
190
- service
191
+ user.type.service
191
192
  </span>
192
193
  </div>
193
194
  <div
@@ -200,7 +201,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
200
201
  <span
201
202
  class="text"
202
203
  >
203
- Ai Agent
204
+ user.type.agent
204
205
  </span>
205
206
  </div>
206
207
  </div>
@@ -210,7 +211,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
210
211
  class="field"
211
212
  >
212
213
  <label>
213
- Groups
214
+ user.form.groups
214
215
  </label>
215
216
  <div
216
217
  aria-expanded="false"
@@ -235,7 +236,7 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
235
236
  class="divider default text"
236
237
  role="alert"
237
238
  >
238
- Madrid DG
239
+ user.form.placeholder.groups
239
240
  </div>
240
241
  <i
241
242
  aria-hidden="true"
@@ -269,14 +270,15 @@ exports[`<EditUser /> matches the latest snapshot 1`] = `
269
270
  tabindex="-1"
270
271
  type="submit"
271
272
  >
272
- save
273
+ actions.save
273
274
  </button>
274
275
  <a
275
276
  class="ui secondary button"
277
+ data-discover="true"
276
278
  href="/"
277
279
  role="button"
278
280
  >
279
- cancel
281
+ actions.cancel
280
282
  </a>
281
283
  </div>
282
284
  </form>