@truedat/auth 7.5.9 → 7.5.11

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 (162) 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 +17 -9
  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/reducers/__tests__/userRedirect.spec.js +1 -1
  156. package/src/users/reducers/userRedirect.js +1 -1
  157. package/src/users/sagas/__tests__/fetchUser.spec.js +3 -5
  158. package/src/users/sagas/__tests__/updateUser.spec.js +1 -1
  159. package/src/users/sagas/deleteUser.js +1 -1
  160. package/src/users/sagas/fetchUser.js +1 -1
  161. package/src/users/sagas/updateUser.js +1 -1
  162. package/src/users/components/__tests__/__snapshots__/CanInitLoader.spec.js.snap +0 -3
@@ -1,40 +1,10 @@
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 InitialUser from "../InitialUser";
5
3
 
6
- const renderOpts = {
7
- messages: {
8
- en: {
9
- "actions.cancel": "cancel",
10
- "actions.save": "save",
11
- "form.validation.minLength": "{prop} min length {value}",
12
- "form.validation.required": "{prop} required",
13
- "users.actions.create_admin_account": "Configure Admin Account",
14
- "user.form.email": "Email address",
15
- "user.form.external_id": "External ID",
16
- "user.form.full_name": "Full name",
17
- "user.form.groups": "Groups",
18
- "user.form.password": "password",
19
- "user.form.user_name": "Username",
20
- "user.form.password_confirmation": "confirm",
21
- "user.form.placeholder.email": "pperez@example.com",
22
- "user.form.placeholder.external_id": "pperez",
23
- "user.form.placeholder.full_name": "Pepe Perez",
24
- "user.form.placeholder.user_name": "pperez",
25
- "user.form.placeholder.groups": "Madrid DG",
26
- "user.form.role": "role",
27
- "user.type.admin": "admin",
28
- "user.type.service": "service",
29
- "user.type.user": "user",
30
- "user.type.agent": "Ai Agent",
31
- },
32
- },
33
- };
34
-
35
4
  describe("<InitialUser />", () => {
36
5
  it("matches the latest snapshot", async () => {
37
- const { container } = render(<InitialUser />, renderOpts);
38
- await waitFor(() => expect(container).toMatchSnapshot());
6
+ const rendered = render(<InitialUser />);
7
+ await waitForLoad(rendered);
8
+ expect(rendered.container).toMatchSnapshot();
39
9
  });
40
10
  });
@@ -1,41 +1,10 @@
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 NewUser from "../NewUser";
5
3
 
6
- const renderOpts = {
7
- messages: {
8
- en: {
9
- "actions.cancel": "cancel",
10
- "actions.save": "save",
11
- "form.validation.minLength": "{prop} min length {value}",
12
- "form.validation.required": "{prop} required",
13
- "navigation.members.users": "Users",
14
- "user.form.email": "Email address",
15
- "user.form.external_id": "External ID",
16
- "user.form.full_name": "Full name",
17
- "user.form.groups": "Groups",
18
- "user.form.password": "password",
19
- "user.form.user_name": "Username",
20
- "user.form.password_confirmation": "confirm",
21
- "user.form.placeholder.email": "pperez@example.com",
22
- "user.form.placeholder.external_id": "pperez",
23
- "user.form.placeholder.full_name": "Pepe Perez",
24
- "user.form.placeholder.user_name": "pperez",
25
- "user.form.placeholder.groups": "Madrid DG",
26
- "user.form.role": "role",
27
- "user.type.admin": "admin",
28
- "user.type.service": "service",
29
- "user.type.user": "user",
30
- "user.type.agent": "Ai Agent",
31
- "users.actions.create": "create",
32
- },
33
- },
34
- };
35
-
36
4
  describe("<NewUser />", () => {
37
5
  it("matches the latest snapshot", async () => {
38
- const { container } = render(<NewUser />, renderOpts);
39
- await waitFor(() => expect(container).toMatchSnapshot());
6
+ const rendered = render(<NewUser />);
7
+ await waitForLoad(rendered);
8
+ expect(rendered.container).toMatchSnapshot();
40
9
  });
41
10
  });
@@ -1,75 +1,57 @@
1
- import React from "react";
1
+ import { waitFor } from "@testing-library/react";
2
2
  import userEvent from "@testing-library/user-event";
3
3
  import { render } from "@truedat/test/render";
4
- import { waitFor } from "@testing-library/react";
5
4
  import { Password } from "../Password";
6
5
 
7
6
  describe("<Password />", () => {
8
7
  const updatePassword = jest.fn();
9
8
 
10
- const renderOpts = {
11
- messages: {
12
- en: {
13
- "actions.cancel": "Cancel",
14
- "form.validation.minLength": "{prop} min length {value}",
15
- "form.validation.required": "{prop} required",
16
- "login.form.re_password.label": "Re password",
17
- "user.password.cancel": "Cancel",
18
- "user.password.change": "Change password",
19
- "user.password.current": "Current password",
20
- "user.password.header": "Password",
21
- "user.password.must.match": "Passwords must match",
22
- "user.password.new_password": "New password",
23
- "user.password.save": "Save",
24
- "user.password.success.change": "The password has been updated"
25
- }
26
- }
27
- };
28
-
29
9
  it("matches the latest snapshot", async () => {
30
10
  const props = {};
31
- const { container } = render(<Password {...props} />, renderOpts);
32
- await waitFor(() => expect(container).toMatchSnapshot());
11
+ const rendered = render(<Password {...props} />);
12
+ await waitFor(() => expect(rendered.container).toMatchSnapshot());
33
13
  });
34
14
 
35
15
  it("calls updatePassword for non admin user", async () => {
36
16
  const props = { userName: "joe", authUserName: "joe", updatePassword };
37
- const { getByLabelText, getByRole, findByRole } = render(
38
- <Password {...props} />,
39
- renderOpts
40
- );
17
+ const rendered = render(<Password {...props} />);
18
+ const user = userEvent.setup({ delay: null });
41
19
 
42
20
  // Submit button should initially be disabled
43
21
  await waitFor(() =>
44
- expect(getByRole("button", { name: /Save/ })).toBeDisabled()
22
+ expect(rendered.getByRole("button", { name: /save/i })).toBeDisabled()
45
23
  );
46
24
 
47
- userEvent.type(
48
- getByLabelText("Current password", { selector: "input" }),
25
+ await user.type(
26
+ rendered.getByLabelText(/user.password.current/i, { selector: "input" }),
49
27
  "oldPassword"
50
28
  );
51
- userEvent.type(
52
- getByLabelText("New password", { selector: "input" }),
29
+ await user.type(
30
+ rendered.getByLabelText(/user.password.new_password/i, {
31
+ selector: "input",
32
+ }),
53
33
  "Va1id.pa$$w0rd!"
54
34
  );
55
- userEvent.type(
56
- getByLabelText("Re password", { selector: "input" }),
35
+ await user.type(
36
+ rendered.getByLabelText(/login.form.re_password.label/i, {
37
+ selector: "input",
38
+ }),
57
39
  "Va1id.pa$$w0rd!"
58
40
  );
59
41
 
60
42
  await waitFor(() =>
61
- expect(getByRole("button", { name: /Save/ })).not.toBeDisabled()
43
+ expect(rendered.getByRole("button", { name: /save/i })).not.toBeDisabled()
62
44
  );
63
45
 
64
46
  // Submit
65
- userEvent.click(await findByRole("button", { name: /Save/ }));
47
+ await user.click(await rendered.findByRole("button", { name: /save/i }));
66
48
 
67
49
  await waitFor(() =>
68
50
  expect(updatePassword).toHaveBeenCalledWith({
69
51
  user: {
70
52
  old_password: "oldPassword",
71
- new_password: "Va1id.pa$$w0rd!"
72
- }
53
+ new_password: "Va1id.pa$$w0rd!",
54
+ },
73
55
  })
74
56
  );
75
57
  });
@@ -79,82 +61,90 @@ describe("<Password />", () => {
79
61
  id: 42,
80
62
  userName: "joe",
81
63
  authUserName: "bob",
82
- updatePassword
64
+ updatePassword,
83
65
  };
84
- const { queryByLabelText, getByLabelText, getByRole, findByRole } = render(
85
- <Password {...props} />,
86
- renderOpts
87
- );
66
+ const rendered = render(<Password {...props} />);
67
+ const user = userEvent.setup({ delay: null });
88
68
 
89
69
  // Submit button should initially be disabled
90
70
  await waitFor(() =>
91
- expect(getByRole("button", { name: /Save/ })).toBeDisabled()
71
+ expect(rendered.getByRole("button", { name: /save/i })).toBeDisabled()
92
72
  );
93
73
 
94
74
  // No current password id needed for admin users
95
75
  expect(
96
- await queryByLabelText("Current password", { selector: "input" })
76
+ await rendered.queryByLabelText(/user.password.current/i, {
77
+ selector: "input",
78
+ })
97
79
  ).toBeNull();
98
80
 
99
- userEvent.type(
100
- getByLabelText("New password", { selector: "input" }),
81
+ await user.type(
82
+ rendered.getByLabelText(/user.password.new_password/i, {
83
+ selector: "input",
84
+ }),
101
85
  "Va1id.pa$$w0rd!"
102
86
  );
103
- userEvent.type(
104
- getByLabelText("Re password", { selector: "input" }),
87
+ await user.type(
88
+ rendered.getByLabelText(/login.form.re_password.label/i, {
89
+ selector: "input",
90
+ }),
105
91
  "Va1id.pa$$w0rd!"
106
92
  );
107
93
 
108
94
  await waitFor(() =>
109
- expect(getByRole("button", { name: /Save/ })).not.toBeDisabled()
95
+ expect(rendered.getByRole("button", { name: /save/i })).not.toBeDisabled()
110
96
  );
111
97
 
112
98
  // Submit
113
- userEvent.click(await findByRole("button", { name: /Save/ }));
99
+ await user.click(await rendered.findByRole("button", { name: /save/i }));
114
100
 
115
101
  await waitFor(() =>
116
102
  expect(updatePassword).toHaveBeenCalledWith({
117
103
  user: {
118
104
  id: 42,
119
- new_password: "Va1id.pa$$w0rd!"
120
- }
105
+ new_password: "Va1id.pa$$w0rd!",
106
+ },
121
107
  })
122
108
  );
123
109
  });
124
110
 
125
111
  it("requires current password to have min length", async () => {
126
112
  const props = { userName: "joe", authUserName: "joe", updatePassword };
127
- const { getByLabelText, findByText } = render(
128
- <Password {...props} />,
129
- renderOpts
130
- );
113
+ const rendered = render(<Password {...props} />);
114
+ const user = userEvent.setup({ delay: null });
131
115
 
132
- userEvent.type(
133
- getByLabelText("Current password", { selector: "input" }),
116
+ await user.type(
117
+ rendered.getByLabelText(/user.password.current/i, { selector: "input" }),
134
118
  "short"
135
119
  );
136
120
 
137
- expect(await findByText(/Current password min length 6/)).not.toBeNull();
121
+ expect(
122
+ await rendered.findByText(/form.validation.minLength/i)
123
+ ).not.toBeNull();
138
124
  });
139
125
 
140
126
  it("requires new password to password confirmation to be the same", async () => {
141
127
  const props = { userName: "joe", authUserName: "joe", updatePassword };
142
- const { getByLabelText, findByText } = render(
143
- <Password {...props} />,
144
- renderOpts
145
- );
128
+ const rendered = render(<Password {...props} />);
129
+ const user = userEvent.setup({ delay: null });
146
130
 
147
131
  await waitFor(() => {
148
- userEvent.type(
149
- getByLabelText("New password", { selector: "input" }),
132
+ user.type(
133
+ rendered.getByLabelText(/user.password.new_password/i, {
134
+ selector: "input",
135
+ }),
150
136
  "Va1id.pa$$w0rd!"
151
137
  );
152
- userEvent.type(
153
- getByLabelText("Re password", { selector: "input" }),
138
+ user.type(
139
+ rendered.getByLabelText(/login.form.re_password.label/i, {
140
+ selector: "input",
141
+ }),
154
142
  "different"
155
143
  );
156
144
  });
157
145
 
158
- expect(await findByText(/Passwords must match/)).not.toBeNull();
146
+ expect(
147
+ await rendered.findByText(/user.password.must.match/i)
148
+ ).not.toBeNull();
159
149
  });
160
150
  });
@@ -1,10 +1,9 @@
1
- import React from "react";
2
1
  import { render } from "@truedat/test/render";
3
2
  import User from "../User";
4
3
 
5
4
  describe("<User />", () => {
6
5
  const user = {
7
- id: 1,
6
+ id: "1",
8
7
  user_name: "joe",
9
8
  role: "admin",
10
9
  full_name: "Joe Bloggs",
@@ -1,17 +1,15 @@
1
- import React from "react";
2
- import { shallow } from "enzyme";
1
+ import { render } from "@truedat/test/render";
3
2
  import { UserAclRow } from "../UserAclRow";
4
3
 
5
4
  describe("<UserAclRow />", () => {
6
5
  const acl = {
7
6
  resource: "resource1",
8
- role: "role1"
7
+ role: "role1",
9
8
  };
10
9
 
11
- const props = { acl };
12
-
13
10
  it("matches the latest snapshot", () => {
14
- const wrapper = shallow(<UserAclRow {...props} />);
15
- expect(wrapper).toMatchSnapshot();
11
+ const props = { acl };
12
+ const rendered = render(<UserAclRow {...props} />);
13
+ expect(rendered.container).toMatchSnapshot();
16
14
  });
17
15
  });
@@ -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 UserAcls from "../UserAcls";
@@ -8,23 +7,23 @@ 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: {
16
15
  acls: [
17
16
  {
18
17
  resource: { id: 1, name: "resource1", type: "domain" },
19
- role: { id: 2, name: "role1" }
18
+ role: { id: 2, name: "role1" },
20
19
  },
21
20
  {
22
21
  resource: { id: 2, name: "resource2", type: "domain" },
23
- role: { id: 3, name: "role2" }
24
- }
25
- ]
26
- }
27
- }
22
+ role: { id: 3, name: "role2" },
23
+ },
24
+ ],
25
+ },
26
+ },
28
27
  };
29
28
 
30
29
  describe("<UserAcls />", () => {
@@ -1,17 +1,16 @@
1
- import React from "react";
2
- import { shallow } from "enzyme";
1
+ import { render } from "@truedat/test/render";
3
2
  import { UserActions } from "../UserActions";
4
3
 
5
4
  describe("<UserActions />", () => {
6
5
  const user = {
7
6
  id: "2",
8
- userName: "userTest"
7
+ userName: "userTest",
9
8
  };
10
9
  const deleteUser = jest.fn();
11
10
 
12
11
  const props = { user, deleteUser };
13
12
  it("matches the latest snapshot", () => {
14
- const wrapper = shallow(<UserActions {...props} />);
15
- expect(wrapper).toMatchSnapshot();
13
+ const rendered = render(<UserActions {...props} />);
14
+ expect(rendered.container).toMatchSnapshot();
16
15
  });
17
16
  });
@@ -1,26 +1,26 @@
1
- import React from "react";
2
- import { shallow } from "enzyme";
1
+ import { render } from "@truedat/test/render";
3
2
  import { UserCard } from "../UserCard";
4
3
 
5
4
  describe("<UserCard />", () => {
6
5
  const deleteUser = jest.fn();
7
6
  const user = {
8
- id: 1,
7
+ id: "1",
9
8
  user_name: "joe",
10
9
  role: "admin",
11
10
  full_name: "Joe Bloggs",
12
11
  email: "joe@bloggs.net",
13
12
  uid: "uID00001",
14
13
  };
15
- const props_fullname = { user, deleteUser, showFullname: true };
16
- const props_uid = { user, deleteUser, showFullname: false };
17
14
 
18
- it("matches the latest snapshot", () => {
19
- const wrapper = shallow(<UserCard {...props_fullname} />);
20
- expect(wrapper).toMatchSnapshot();
15
+ it("matches the latest snapshot when showing full name", () => {
16
+ const props = { user, deleteUser, showFullname: true };
17
+ const rendered = render(<UserCard {...props} />);
18
+ expect(rendered.container).toMatchSnapshot();
21
19
  });
22
- it("matches the latest snapshot", () => {
23
- const wrapper = shallow(<UserCard {...props_uid} />);
24
- expect(wrapper).toMatchSnapshot();
20
+
21
+ it("matches the latest snapshot when showing UID", () => {
22
+ const props = { user, deleteUser, showFullname: false };
23
+ const rendered = render(<UserCard {...props} />);
24
+ expect(rendered.container).toMatchSnapshot();
25
25
  });
26
26
  });
@@ -1,62 +1,70 @@
1
- import React from "react";
2
- import { shallow } from "enzyme";
3
- import { Message } from "semantic-ui-react";
4
- import { intl } from "@truedat/test/intl-stub";
1
+ import userEvent from "@testing-library/user-event";
2
+ import { render, waitForLoad } from "@truedat/test/render";
5
3
  import { UserCards } from "../UserCards";
6
4
 
7
- // workaround for enzyme issue with React.useContext
8
- // see https://github.com/airbnb/enzyme/issues/2176#issuecomment-532361526
9
- jest.spyOn(React, "useContext").mockImplementation(() => intl);
10
-
11
5
  describe("<UserCards />", () => {
12
6
  const users = [
13
7
  {
14
- id: 1,
8
+ id: "1",
15
9
  email: "email@email.com",
16
10
  full_name: "Pepito Pérez",
17
11
  user_name: "user",
18
- role: "admin"
12
+ role: "admin",
19
13
  },
20
14
  {
21
- id: 2,
15
+ id: "2",
22
16
  email: "email2@email.com",
23
17
  full_name: "Miguel Muñoz",
24
18
  user_name: "user2",
25
- role: "user"
19
+ role: "user",
26
20
  },
27
21
  {
28
- id: 3,
22
+ id: "3",
29
23
  email: "email3@email.com",
30
24
  full_name: "Rosa Martin",
31
25
  user_name: "user3",
32
- role: "user"
33
- }
26
+ role: "user",
27
+ },
34
28
  ];
35
29
 
36
- it("matches the latest snapshot", () => {
37
- const wrapper = shallow(<UserCards users={users} />);
38
- expect(wrapper).toMatchSnapshot();
30
+ it("matches the latest snapshot", async () => {
31
+ const rendered = render(<UserCards users={users} />);
32
+ await waitForLoad(rendered);
33
+ expect(rendered.container).toMatchSnapshot();
39
34
  });
40
35
 
41
- it("contains a card for each user", () => {
36
+ it("contains a card for each user", async () => {
42
37
  const props = { users };
43
- const wrapper = shallow(<UserCards {...props} />);
44
- expect(wrapper.findWhere(n => n.prop("user"))).toHaveLength(3);
38
+ const rendered = render(<UserCards {...props} />);
39
+ await waitForLoad(rendered);
40
+ expect(rendered.container.querySelectorAll(".card")).toHaveLength(3);
45
41
  });
46
42
 
47
- it("contains a card for each use matching the filter", () => {
43
+ it("contains a card for each user matching the filter", async () => {
48
44
  const props = { users };
49
- const wrapper = shallow(<UserCards {...props} />);
50
- wrapper.find("SearchInput").prop("onChange")({}, { value: " MUÑoZ " });
51
- expect(wrapper.findWhere(n => n.prop("user"))).toHaveLength(1);
52
- expect(wrapper.find(Message)).toHaveLength(0);
45
+ const rendered = render(<UserCards {...props} />);
46
+ await waitForLoad(rendered);
47
+
48
+ const user = userEvent.setup({ delay: null });
49
+ const searchInput = rendered.getByPlaceholderText(/search/i);
50
+ await user.type(searchInput, " MUÑoZ ");
51
+
52
+ expect(rendered.container.querySelectorAll(".card")).toHaveLength(1);
53
+ expect(
54
+ rendered.queryByText(/user.search.no_results/i)
55
+ ).not.toBeInTheDocument();
53
56
  });
54
57
 
55
- it("contains a message when no users are found", () => {
58
+ it("contains a message when no users are found", async () => {
56
59
  const props = { users };
57
- const wrapper = shallow(<UserCards {...props} />);
58
- wrapper.find("SearchInput").prop("onChange")({}, { value: "foo" });
59
- expect(wrapper.findWhere(n => n.prop("user"))).toHaveLength(0);
60
- expect(wrapper.find(Message)).toHaveLength(1);
60
+ const rendered = render(<UserCards {...props} />);
61
+ await waitForLoad(rendered);
62
+
63
+ const user = userEvent.setup({ delay: null });
64
+ const searchInput = rendered.getByPlaceholderText(/search/i);
65
+ await user.type(searchInput, "foo");
66
+
67
+ expect(rendered.container.querySelectorAll(".card")).toHaveLength(0);
68
+ expect(rendered.getByText(/user.search.no_results/i)).toBeInTheDocument();
61
69
  });
62
70
  });
@@ -1,43 +1,33 @@
1
- import React from "react";
2
1
  import userEvent from "@testing-library/user-event";
3
2
  import { waitFor } from "@testing-library/react";
4
- import { render } from "@truedat/test/render";
3
+ import { render, waitForLoad } from "@truedat/test/render";
5
4
  import { domainsMock } from "@truedat/test/mocks";
6
5
  import { UserDomainsFilter } from "../UserDomainsFilter";
7
6
 
8
7
  describe("<UserDomainsFilter />", () => {
9
8
  const props = { setDashboardDomains: jest.fn() };
10
- const mocks = [domainsMock({ action: "viewDomain" })];
9
+ const renderOpts = {
10
+ mocks: [domainsMock({ action: "viewDomain" })],
11
+ };
11
12
 
12
13
  it("matches the latest snapshot", async () => {
13
- const { container, queryByText } = render(
14
- <UserDomainsFilter {...props} />,
15
- { mocks }
16
- );
17
- await waitFor(() => {
18
- expect(queryByText(/fooDomain/)).toBeInTheDocument();
19
- });
20
- expect(container).toMatchSnapshot();
14
+ const rendered = render(<UserDomainsFilter {...props} />, renderOpts);
15
+ await waitForLoad(rendered);
16
+ expect(rendered.container).toMatchSnapshot();
21
17
  });
22
18
 
23
19
  it("calls setDashboardDomains when clicking button", async () => {
24
- const { queryByText, findByText } = render(
25
- <UserDomainsFilter {...props} />,
26
- { mocks }
27
- );
28
-
29
- await waitFor(() => {
30
- expect(queryByText(/fooDomain/)).toBeInTheDocument();
31
- });
20
+ const rendered = render(<UserDomainsFilter {...props} />, renderOpts);
21
+ await waitForLoad(rendered);
32
22
 
33
- userEvent.click(await findByText("Filter"));
23
+ userEvent.click(await rendered.findByText(/userDomainsFilter.button/i));
34
24
 
35
25
  await waitFor(() => {
36
26
  expect(props.setDashboardDomains).toHaveBeenCalledWith([1, 2, 3, 33]);
37
27
  });
38
28
 
39
- userEvent.click(await findByText("fooDomain"));
40
- userEvent.click(await findByText("Filter"));
29
+ userEvent.click(await rendered.findByText(/foodomain/i));
30
+ userEvent.click(await rendered.findByText(/userDomainsFilter.button/i));
41
31
 
42
32
  await waitFor(() => {
43
33
  expect(props.setDashboardDomains).toHaveBeenCalledWith([1]);