@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.
- package/package.json +40 -64
- package/src/groups/components/EditGroup.js +0 -1
- package/src/groups/components/Group.js +0 -1
- package/src/groups/components/GroupBreadcrumbs.js +1 -2
- package/src/groups/components/GroupCard.js +3 -3
- package/src/groups/components/GroupCards.js +2 -3
- package/src/groups/components/GroupForm.js +0 -1
- package/src/groups/components/GroupLoader.js +19 -51
- package/src/groups/components/GroupUsers.js +4 -3
- package/src/groups/components/GroupUsersTable.js +4 -4
- package/src/groups/components/GroupsLoader.js +2 -2
- package/src/groups/components/GroupsSearchLoader.js +1 -1
- package/src/groups/components/NewGroup.js +0 -1
- package/src/groups/components/__tests__/Group.spec.js +0 -1
- package/src/groups/components/__tests__/GroupCard.spec.js +23 -7
- package/src/groups/components/__tests__/GroupCards.spec.js +9 -6
- package/src/groups/components/__tests__/GroupLoader.spec.js +71 -0
- package/src/groups/components/__tests__/GroupUsers.spec.js +8 -12
- package/src/groups/components/__tests__/GroupUsersTable.spec.js +34 -42
- package/src/groups/components/__tests__/GroupsSearchLoader.spec.js +0 -1
- package/src/groups/components/__tests__/__snapshots__/Group.spec.js.snap +1 -2
- package/src/groups/components/__tests__/__snapshots__/GroupCard.spec.js.snap +43 -94
- package/src/groups/components/__tests__/__snapshots__/GroupCards.spec.js.snap +118 -53
- package/src/groups/components/__tests__/__snapshots__/GroupLoader.spec.js.snap +11 -0
- package/src/groups/components/__tests__/__snapshots__/GroupUsers.spec.js.snap +38 -45
- package/src/groups/components/__tests__/__snapshots__/GroupUsersTable.spec.js.snap +121 -213
- package/src/groups/components/index.js +1 -1
- package/src/groups/sagas/__tests__/deleteGroupUser.spec.js +6 -6
- package/src/groups/sagas/deleteGroup.js +1 -1
- package/src/groups/sagas/deleteGroupUser.js +2 -2
- package/src/groups/sagas/fetchGroup.js +1 -1
- package/src/groups/sagas/updateGroup.js +1 -1
- package/src/roles/components/NewRole.js +0 -1
- package/src/roles/components/PermissionGroup.js +0 -1
- package/src/roles/components/Role.js +8 -3
- package/src/roles/components/RoleCards.js +2 -3
- package/src/roles/components/RoleForm.js +1 -1
- package/src/roles/components/RoleLoader.js +26 -39
- package/src/roles/components/RoleRoutes.js +29 -32
- package/src/roles/components/RoleSelector.js +0 -1
- package/src/roles/components/Roles.js +1 -3
- package/src/roles/components/RolesLoader.js +2 -2
- package/src/roles/components/__tests__/PermissionGroup.spec.js +7 -17
- package/src/roles/components/__tests__/Role.spec.js +0 -1
- package/src/roles/components/__tests__/RoleCards.spec.js +11 -10
- package/src/roles/components/__tests__/RoleRoutes.spec.js +53 -7
- package/src/roles/components/__tests__/RoleSelector.spec.js +0 -1
- package/src/roles/components/__tests__/Roles.spec.js +2 -3
- package/src/roles/components/__tests__/__snapshots__/PermissionGroup.spec.js.snap +3 -5
- package/src/roles/components/__tests__/__snapshots__/Role.spec.js.snap +4 -4
- package/src/roles/components/__tests__/__snapshots__/RoleCards.spec.js.snap +57 -127
- package/src/roles/components/__tests__/__snapshots__/RoleRoutes.spec.js.snap +38 -5
- package/src/roles/components/__tests__/__snapshots__/RoleSelector.spec.js.snap +1 -1
- package/src/roles/components/__tests__/__snapshots__/Roles.spec.js.snap +6 -3
- package/src/roles/components/index.js +1 -1
- package/src/roles/reducers/rolePermissions.js +1 -1
- package/src/roles/reducers/roleRedirect.js +1 -1
- package/src/roles/sagas/deleteRole.js +1 -1
- package/src/roles/sagas/fetchRole.js +1 -1
- package/src/roles/sagas/fetchRolePermissions.js +1 -1
- package/src/roles/sagas/updateRole.js +1 -1
- package/src/roles/sagas/updateRolePermissions.js +1 -1
- package/src/sessions/components/Auth0Callback.js +5 -4
- package/src/sessions/components/Auth0LoginButton.js +2 -2
- package/src/sessions/components/AuthMethodsLoader.js +10 -19
- package/src/sessions/components/LoginButtons.js +4 -4
- package/src/sessions/components/NonceCallback.js +21 -38
- package/src/sessions/components/OidcLoginButton.js +0 -1
- package/src/sessions/components/OpenIDConnect.js +5 -4
- package/src/sessions/components/PrivateRoute.js +25 -57
- package/src/sessions/components/ProxyLoginCallback.js +0 -2
- package/src/sessions/components/SamlCallback.js +0 -2
- package/src/sessions/components/UnauthorizedRoute.js +28 -31
- package/src/sessions/components/__tests__/Auth0LoginButton.spec.js +12 -12
- package/src/sessions/components/__tests__/AuthMethodsLoader.spec.js +15 -12
- package/src/sessions/components/__tests__/NonceCallback.spec.js +84 -0
- package/src/sessions/components/__tests__/OidcLoginButton.spec.js +10 -10
- package/src/sessions/components/__tests__/OpenIDConnect.spec.js +7 -8
- package/src/sessions/components/__tests__/PrivateRoute.spec.js +90 -0
- package/src/sessions/components/__tests__/UnauthorizedRoute.spec.js +88 -0
- package/src/sessions/components/__tests__/__snapshots__/Auth0LoginButton.spec.js.snap +22 -24
- package/src/sessions/components/__tests__/__snapshots__/NonceCallback.spec.js.snap +18 -0
- package/src/sessions/components/__tests__/__snapshots__/OidcLoginButton.spec.js.snap +18 -18
- package/src/sessions/components/__tests__/__snapshots__/PrivateRoute.spec.js.snap +9 -0
- package/src/sessions/components/__tests__/__snapshots__/UnauthorizedRoute.spec.js.snap +9 -0
- package/src/sessions/components/index.js +1 -1
- package/src/sessions/sagas/__tests__/login.spec.js +4 -4
- package/src/sessions/sagas/__tests__/refresh.spec.js +2 -2
- package/src/sessions/sagas/__tests__/token.spec.js +4 -4
- package/src/sessions/sagas/login.js +5 -5
- package/src/sessions/sagas/refresh.js +2 -2
- package/src/sessions/sagas/token.js +2 -2
- package/src/users/components/AdminUserRoutes.js +35 -51
- package/src/users/components/EditUser.js +0 -1
- package/src/users/components/GroupUserCrumbs.js +8 -8
- package/src/users/components/InitialUser.js +0 -1
- package/src/users/components/NewUser.js +0 -1
- package/src/users/components/Password.js +0 -1
- package/src/users/components/User.js +2 -2
- package/src/users/components/UserAclRow.js +1 -2
- package/src/users/components/UserAcls.js +0 -1
- package/src/users/components/UserActions.js +1 -2
- package/src/users/components/UserBreadcrumbs.js +2 -3
- package/src/users/components/UserCard.js +3 -3
- package/src/users/components/UserCards.js +5 -4
- package/src/users/components/UserDomainsFilter.js +2 -5
- package/src/users/components/UserForm.js +8 -33
- package/src/users/components/UserGroupAclRow.js +1 -2
- package/src/users/components/UserGroupAcls.js +0 -1
- package/src/users/components/UserLoader.js +21 -48
- package/src/users/components/UserPassword.js +0 -1
- package/src/users/components/UserRoutes.js +73 -7
- package/src/users/components/UserSelector.js +0 -1
- package/src/users/components/UserTabs.js +1 -2
- package/src/users/components/UsersAndGroups.js +6 -6
- package/src/users/components/UsersLoader.js +2 -2
- package/src/users/components/UsersSearchLoader.js +2 -1
- package/src/users/components/__tests__/CanInitLoader.spec.js +6 -13
- package/src/users/components/__tests__/EditUser.spec.js +4 -33
- package/src/users/components/__tests__/InitialUser.spec.js +4 -34
- package/src/users/components/__tests__/NewUser.spec.js +4 -35
- package/src/users/components/__tests__/Password.spec.js +59 -69
- package/src/users/components/__tests__/User.spec.js +1 -2
- package/src/users/components/__tests__/UserAclRow.spec.js +5 -7
- package/src/users/components/__tests__/UserAcls.spec.js +8 -9
- package/src/users/components/__tests__/UserActions.spec.js +4 -5
- package/src/users/components/__tests__/UserCard.spec.js +11 -11
- package/src/users/components/__tests__/UserCards.spec.js +39 -31
- package/src/users/components/__tests__/UserDomainsFilter.spec.js +12 -22
- package/src/users/components/__tests__/UserForm.spec.js +24 -44
- package/src/users/components/__tests__/UserGroupAclRow.spec.js +1 -2
- package/src/users/components/__tests__/UserGroupAcls.spec.js +8 -9
- package/src/users/components/__tests__/UserLoader.spec.js +85 -0
- package/src/users/components/__tests__/UserPassword.spec.js +8 -21
- package/src/users/components/__tests__/UserRoutes.spec.js +129 -4
- package/src/users/components/__tests__/UserSelector.spec.js +0 -1
- package/src/users/components/__tests__/UsersAndGroups.spec.js +45 -5
- package/src/users/components/__tests__/UsersSearchLoader.spec.js +0 -1
- package/src/users/components/__tests__/__snapshots__/EditUser.spec.js.snap +23 -21
- package/src/users/components/__tests__/__snapshots__/InitialUser.spec.js.snap +22 -21
- package/src/users/components/__tests__/__snapshots__/NewUser.spec.js.snap +25 -23
- package/src/users/components/__tests__/__snapshots__/Password.spec.js.snap +8 -7
- package/src/users/components/__tests__/__snapshots__/User.spec.js.snap +7 -6
- package/src/users/components/__tests__/__snapshots__/UserAclRow.spec.js.snap +12 -11
- package/src/users/components/__tests__/__snapshots__/UserActions.spec.js.snap +56 -67
- package/src/users/components/__tests__/__snapshots__/UserCard.spec.js.snap +56 -70
- package/src/users/components/__tests__/__snapshots__/UserCards.spec.js.snap +117 -83
- package/src/users/components/__tests__/__snapshots__/UserDomainsFilter.spec.js.snap +2 -2
- package/src/users/components/__tests__/__snapshots__/UserForm.spec.js.snap +21 -20
- package/src/users/components/__tests__/__snapshots__/UserLoader.spec.js.snap +3 -0
- package/src/users/components/__tests__/__snapshots__/UserPassword.spec.js.snap +9 -7
- package/src/users/components/__tests__/__snapshots__/UserRoutes.spec.js.snap +170 -16
- package/src/users/components/__tests__/__snapshots__/UserSelector.spec.js.snap +1 -1
- package/src/users/components/__tests__/__snapshots__/UsersAndGroups.spec.js.snap +75 -14
- package/src/users/sagas/__tests__/fetchUser.spec.js +3 -5
- package/src/users/sagas/__tests__/updateUser.spec.js +1 -1
- package/src/users/sagas/deleteUser.js +1 -1
- package/src/users/sagas/fetchUser.js +1 -1
- package/src/users/sagas/updateUser.js +1 -1
- package/src/users/components/__tests__/__snapshots__/CanInitLoader.spec.js.snap +0 -3
|
@@ -1,41 +1,10 @@
|
|
|
1
|
-
import
|
|
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
|
|
39
|
-
await
|
|
6
|
+
const rendered = render(<NewUser />);
|
|
7
|
+
await waitForLoad(rendered);
|
|
8
|
+
expect(rendered.container).toMatchSnapshot();
|
|
40
9
|
});
|
|
41
10
|
});
|
|
@@ -1,75 +1,57 @@
|
|
|
1
|
-
import
|
|
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
|
|
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
|
|
38
|
-
|
|
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: /
|
|
22
|
+
expect(rendered.getByRole("button", { name: /save/i })).toBeDisabled()
|
|
45
23
|
);
|
|
46
24
|
|
|
47
|
-
|
|
48
|
-
getByLabelText(
|
|
25
|
+
await user.type(
|
|
26
|
+
rendered.getByLabelText(/user.password.current/i, { selector: "input" }),
|
|
49
27
|
"oldPassword"
|
|
50
28
|
);
|
|
51
|
-
|
|
52
|
-
getByLabelText(
|
|
29
|
+
await user.type(
|
|
30
|
+
rendered.getByLabelText(/user.password.new_password/i, {
|
|
31
|
+
selector: "input",
|
|
32
|
+
}),
|
|
53
33
|
"Va1id.pa$$w0rd!"
|
|
54
34
|
);
|
|
55
|
-
|
|
56
|
-
getByLabelText(
|
|
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: /
|
|
43
|
+
expect(rendered.getByRole("button", { name: /save/i })).not.toBeDisabled()
|
|
62
44
|
);
|
|
63
45
|
|
|
64
46
|
// Submit
|
|
65
|
-
|
|
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
|
|
85
|
-
|
|
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: /
|
|
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(
|
|
76
|
+
await rendered.queryByLabelText(/user.password.current/i, {
|
|
77
|
+
selector: "input",
|
|
78
|
+
})
|
|
97
79
|
).toBeNull();
|
|
98
80
|
|
|
99
|
-
|
|
100
|
-
getByLabelText(
|
|
81
|
+
await user.type(
|
|
82
|
+
rendered.getByLabelText(/user.password.new_password/i, {
|
|
83
|
+
selector: "input",
|
|
84
|
+
}),
|
|
101
85
|
"Va1id.pa$$w0rd!"
|
|
102
86
|
);
|
|
103
|
-
|
|
104
|
-
getByLabelText(
|
|
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: /
|
|
95
|
+
expect(rendered.getByRole("button", { name: /save/i })).not.toBeDisabled()
|
|
110
96
|
);
|
|
111
97
|
|
|
112
98
|
// Submit
|
|
113
|
-
|
|
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
|
|
128
|
-
|
|
129
|
-
renderOpts
|
|
130
|
-
);
|
|
113
|
+
const rendered = render(<Password {...props} />);
|
|
114
|
+
const user = userEvent.setup({ delay: null });
|
|
131
115
|
|
|
132
|
-
|
|
133
|
-
getByLabelText(
|
|
116
|
+
await user.type(
|
|
117
|
+
rendered.getByLabelText(/user.password.current/i, { selector: "input" }),
|
|
134
118
|
"short"
|
|
135
119
|
);
|
|
136
120
|
|
|
137
|
-
expect(
|
|
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
|
|
143
|
-
|
|
144
|
-
renderOpts
|
|
145
|
-
);
|
|
128
|
+
const rendered = render(<Password {...props} />);
|
|
129
|
+
const user = userEvent.setup({ delay: null });
|
|
146
130
|
|
|
147
131
|
await waitFor(() => {
|
|
148
|
-
|
|
149
|
-
getByLabelText(
|
|
132
|
+
user.type(
|
|
133
|
+
rendered.getByLabelText(/user.password.new_password/i, {
|
|
134
|
+
selector: "input",
|
|
135
|
+
}),
|
|
150
136
|
"Va1id.pa$$w0rd!"
|
|
151
137
|
);
|
|
152
|
-
|
|
153
|
-
getByLabelText(
|
|
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(
|
|
146
|
+
expect(
|
|
147
|
+
await rendered.findByText(/user.password.must.match/i)
|
|
148
|
+
).not.toBeNull();
|
|
159
149
|
});
|
|
160
150
|
});
|
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
import
|
|
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
|
|
15
|
-
|
|
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
|
|
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
|
|
15
|
-
expect(
|
|
13
|
+
const rendered = render(<UserActions {...props} />);
|
|
14
|
+
expect(rendered.container).toMatchSnapshot();
|
|
16
15
|
});
|
|
17
16
|
});
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import
|
|
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
|
|
20
|
-
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
|
2
|
-
import {
|
|
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
|
|
38
|
-
|
|
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
|
|
44
|
-
|
|
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
|
|
43
|
+
it("contains a card for each user matching the filter", async () => {
|
|
48
44
|
const props = { users };
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
|
9
|
+
const renderOpts = {
|
|
10
|
+
mocks: [domainsMock({ action: "viewDomain" })],
|
|
11
|
+
};
|
|
11
12
|
|
|
12
13
|
it("matches the latest snapshot", async () => {
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
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
|
|
25
|
-
|
|
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(
|
|
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(
|
|
40
|
-
userEvent.click(await findByText(
|
|
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]);
|
|
@@ -1,39 +1,9 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { waitFor } from "@testing-library/react";
|
|
3
1
|
import userEvent from "@testing-library/user-event";
|
|
4
|
-
import {
|
|
2
|
+
import { waitFor } from "@testing-library/react";
|
|
3
|
+
import { render, waitForLoad } from "@truedat/test/render";
|
|
5
4
|
import UserForm from "../UserForm";
|
|
6
5
|
|
|
7
6
|
const renderOpts = {
|
|
8
|
-
messages: {
|
|
9
|
-
en: {
|
|
10
|
-
"actions.cancel": "cancel",
|
|
11
|
-
"actions.save": "save",
|
|
12
|
-
"form.validation.minLength": "{prop} min length {value}",
|
|
13
|
-
"form.validation.required": "{prop} required",
|
|
14
|
-
"navigation.members.users": "Users",
|
|
15
|
-
"user.form.email": "Email address",
|
|
16
|
-
"user.form.external_id": "External ID",
|
|
17
|
-
"user.form.full_name": "Full name",
|
|
18
|
-
"user.form.groups": "Groups",
|
|
19
|
-
"user.form.password": "password",
|
|
20
|
-
"user.form.user_name": "Username",
|
|
21
|
-
"user.form.password_confirmation": "confirm",
|
|
22
|
-
"user.form.password_confirmation.invalid": "Does not match",
|
|
23
|
-
"user.form.placeholder.email": "pperez@example.com",
|
|
24
|
-
"user.form.placeholder.external_id": "pperez",
|
|
25
|
-
"user.form.placeholder.full_name": "Pepe Perez",
|
|
26
|
-
"user.form.placeholder.user_name": "pperez",
|
|
27
|
-
"user.form.placeholder.groups": "Madrid DG",
|
|
28
|
-
"user.form.role": "role",
|
|
29
|
-
"user.type.admin": "admin",
|
|
30
|
-
"user.type.service": "service",
|
|
31
|
-
"user.type.agent": "Ai Agent",
|
|
32
|
-
"user.type.user": "user",
|
|
33
|
-
"users.actions.create": "create",
|
|
34
|
-
"users.actions.edit": "edit",
|
|
35
|
-
},
|
|
36
|
-
},
|
|
37
7
|
state: {
|
|
38
8
|
user: { id: 123, user_name: "fred", full_name: "fredrik foobar" },
|
|
39
9
|
},
|
|
@@ -41,39 +11,49 @@ const renderOpts = {
|
|
|
41
11
|
|
|
42
12
|
describe("<UserForm />", () => {
|
|
43
13
|
it("matches the latest snapshot", async () => {
|
|
44
|
-
const
|
|
45
|
-
await
|
|
14
|
+
const rendered = render(<UserForm />, renderOpts);
|
|
15
|
+
await waitForLoad(rendered);
|
|
16
|
+
expect(rendered.container).toMatchSnapshot();
|
|
46
17
|
});
|
|
47
18
|
|
|
48
19
|
it("calls the onSubmit function when submitted", async () => {
|
|
49
20
|
const onSubmit = jest.fn();
|
|
50
|
-
const
|
|
21
|
+
const rendered = render(
|
|
51
22
|
<UserForm onSubmit={(props) => onSubmit(props)} />,
|
|
52
23
|
renderOpts
|
|
53
24
|
);
|
|
25
|
+
await waitForLoad(rendered);
|
|
26
|
+
|
|
27
|
+
const user = userEvent.setup({ delay: null });
|
|
54
28
|
|
|
55
29
|
// Submit button should initially be disabled
|
|
56
30
|
await waitFor(() =>
|
|
57
|
-
expect(getByRole("button", { name: /save/ })).toBeDisabled()
|
|
31
|
+
expect(rendered.getByRole("button", { name: /save/i })).toBeDisabled()
|
|
58
32
|
);
|
|
59
33
|
|
|
60
34
|
// Input name, full name, password, password confirmation
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
35
|
+
await user.type(
|
|
36
|
+
rendered.getByRole("textbox", { name: /user_name/i }),
|
|
37
|
+
"fred"
|
|
38
|
+
);
|
|
39
|
+
await user.type(
|
|
40
|
+
rendered.getByRole("textbox", { name: /full_name/i }),
|
|
41
|
+
"Fred"
|
|
42
|
+
);
|
|
43
|
+
await user.type(rendered.getByText("user.form.password"), "abc123456");
|
|
44
|
+
await user.type(rendered.getByText(/confirm/i), "abc123456");
|
|
65
45
|
|
|
66
46
|
// Select type
|
|
67
|
-
|
|
68
|
-
|
|
47
|
+
await user.click(rendered.getByText(/role/i));
|
|
48
|
+
await user.click(rendered.getByRole("option", { name: /admin/i }));
|
|
69
49
|
|
|
70
50
|
// Submit button should now be enabled
|
|
71
51
|
await waitFor(() =>
|
|
72
|
-
expect(getByRole("button", { name: /save/ })).not.toBeDisabled()
|
|
52
|
+
expect(rendered.getByRole("button", { name: /save/i })).not.toBeDisabled()
|
|
73
53
|
);
|
|
74
54
|
|
|
75
55
|
// Submit
|
|
76
|
-
|
|
56
|
+
await user.click(rendered.getByRole("button", { name: /save/i }));
|
|
77
57
|
|
|
78
58
|
await waitFor(() =>
|
|
79
59
|
expect(onSubmit).toHaveBeenCalledWith({
|