fix(editor): Add confirmation toast when changing user role (#10592)
Some checks are pending
Test Master / install-and-build (push) Waiting to run
Test Master / Unit tests (18.x) (push) Blocked by required conditions
Test Master / Unit tests (20.x) (push) Blocked by required conditions
Test Master / Unit tests (22.4) (push) Blocked by required conditions
Test Master / Lint (push) Blocked by required conditions
Test Master / Notify Slack on failure (push) Blocked by required conditions

This commit is contained in:
Raúl Gómez Morales 2024-08-29 12:37:21 +02:00 committed by GitHub
parent c988931898
commit 95da4d4797
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 58 additions and 1 deletions

View file

@ -1678,6 +1678,9 @@
"settings.users.usersInvitedError": "Could not invite users",
"settings.users.advancedPermissions.warning": "{link} to unlock the ability to create additional admin users",
"settings.users.advancedPermissions.warning.link": "Upgrade",
"settings.users.userRoleUpdated": "Changes saved",
"settings.users.userRoleUpdated.message": "{user} has been successfully updated to a {role}",
"settings.users.userRoleUpdatedError": "Unable to updated role",
"settings.api": "API",
"settings.n8napi": "n8n API",
"settings.log-streaming": "Log Streaming",

View file

@ -17,6 +17,16 @@ import { useSettingsStore } from '@/stores/settings.store';
import { defaultSettings } from '@/__tests__/defaults';
import { ProjectTypes } from '@/types/projects.types';
const showToast = vi.fn();
const showError = vi.fn();
vi.mock('@/composables/useToast', () => ({
useToast: () => ({
showToast,
showError,
}),
}));
const wrapperComponentWithModal = {
components: { SettingsUsersView, ModalRoot, DeleteUserModal },
template: `
@ -71,6 +81,9 @@ describe('SettingsUsersView', () => {
vi.spyOn(projectsStore, 'projects', 'get').mockReturnValue(projects);
usersStore.currentUserId = loggedInUser.id;
showToast.mockReset();
showError.mockReset();
});
afterEach(() => {
@ -156,4 +169,28 @@ describe('SettingsUsersView', () => {
id: users[0].id,
});
});
it("should show success toast when changing a user's role", async () => {
const updateGlobalRoleSpy = vi.spyOn(usersStore, 'updateGlobalRole').mockResolvedValue();
const { getByTestId } = createComponentRenderer(SettingsUsersView)({
pinia,
});
const userListItem = getByTestId(`user-list-item-${users.at(-1)?.email}`);
expect(userListItem).toBeInTheDocument();
const roleSelect = within(userListItem).getByTestId('user-role-select');
const roleDropdownItems = await getDropdownItems(roleSelect);
await userEvent.click(roleDropdownItems[0]);
expect(updateGlobalRoleSpy).toHaveBeenCalledWith(
expect.objectContaining({ newRoleName: 'global:member' }),
);
expect(showToast).toHaveBeenCalledWith(
expect.objectContaining({ type: 'success', message: expect.stringContaining('Member') }),
);
});
});

View file

@ -211,7 +211,24 @@ function goToUpgradeAdvancedPermissions() {
void uiStore.goToUpgrade('settings-users', 'upgrade-advanced-permissions');
}
async function onRoleChange(user: IUser, newRoleName: UpdateGlobalRolePayload['newRoleName']) {
await usersStore.updateGlobalRole({ id: user.id, newRoleName });
try {
await usersStore.updateGlobalRole({ id: user.id, newRoleName });
const role = userRoles.value.find(({ value }) => value === newRoleName)?.label || newRoleName;
showToast({
type: 'success',
title: i18n.baseText('settings.users.userRoleUpdated'),
message: i18n.baseText('settings.users.userRoleUpdated.message', {
interpolate: {
user: user.fullName ?? '',
role,
},
}),
});
} catch (e) {
showError(e, i18n.baseText('settings.users.userReinviteError'));
}
}
</script>