Skip to content

Commit e53eefb

Browse files
authored
Fixed edit user issues (#1408)
1 parent 04de092 commit e53eefb

File tree

4 files changed

+30
-9
lines changed

4 files changed

+30
-9
lines changed

web_ui/src/pages/user-management/users/actions/edit-organization-user-dialog.component.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ export const EditOrganizationUserDialog = ({
8080
const isLastRemainingOrgAdmin = currentOrgRole === USER_ROLE.ORGANIZATION_ADMIN && orgAdmins.length === 1;
8181

8282
const canEditNames = isActiveOrgAdmin || isEditingSelf;
83+
const canEditRole = isActiveOrgAdmin && !(isLastRemainingOrgAdmin && isEditingSelf);
8384

8485
const nameChanged = firstName !== user.firstName || lastName !== user.lastName;
8586
const roleChanged = selectedOrgRole !== currentOrgRole;
@@ -182,7 +183,7 @@ export const EditOrganizationUserDialog = ({
182183
roles={[USER_ROLE.ORGANIZATION_ADMIN, USER_ROLE.ORGANIZATION_CONTRIBUTOR]}
183184
selectedRole={selectedOrgRole as USER_ROLE}
184185
setSelectedRole={setSelectedOrgRole}
185-
isDisabled={isLastRemainingOrgAdmin}
186+
isDisabled={!canEditRole}
186187
contextualHelp={
187188
<ContextualHelp>
188189
<Heading>What roles can there be in an organization?</Heading>

web_ui/src/pages/user-management/users/actions/edit-organization-user-dialog.test.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,4 +269,26 @@ describe('EditOrganizationUserDialog', () => {
269269

270270
expect(screen.getByTestId('roles-add-user')).toBeDisabled();
271271
});
272+
273+
it('disables role picker when active user is org contributor', async () => {
274+
const contributor = createOrgContributor({
275+
id: 'contributor',
276+
firstName: 'Dan',
277+
lastName: 'Contributor',
278+
279+
});
280+
281+
await render(
282+
<EditOrganizationUserDialog
283+
organizationId={organizationId}
284+
user={contributor}
285+
users={[contributor]}
286+
activeUser={contributor}
287+
isSaasEnvironment={false}
288+
closeDialog={jest.fn()}
289+
/>
290+
);
291+
292+
expect(screen.getByTestId('roles-add-user')).toBeDisabled();
293+
});
272294
});

web_ui/src/pages/user-management/users/workspace-users/actions/workspace-user-actions.component.tsx

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import { Key, useState } from 'react';
55

6-
import { isOrganizationAdmin, isWorkspaceAdmin, isWorkspaceContributor } from '@geti/core/src/users/user-role-utils';
6+
import { isOrganizationAdmin, isWorkspaceAdmin } from '@geti/core/src/users/user-role-utils';
77
import { User } from '@geti/core/src/users/users.interface';
88
import { DialogContainer } from '@geti/ui';
99
import { Delete, Edit } from '@geti/ui/icons';
@@ -40,7 +40,6 @@ export const WorkspaceUserActions = ({ activeUser, user, users, workspaceId }: U
4040

4141
const isOwnAccount = user.id === activeUser?.id;
4242
const isActiveUserOrgAdmin = isOrganizationAdmin(activeUser, organizationId);
43-
const isActiveMemberWorkspaceContributor = workspaceId ? isWorkspaceContributor(activeUser, workspaceId) : false;
4443
const isActiveUserWorkspaceAdmin = workspaceId ? isWorkspaceAdmin(activeUser, workspaceId) : false;
4544

4645
const editAction = {
@@ -55,9 +54,7 @@ export const WorkspaceUserActions = ({ activeUser, user, users, workspaceId }: U
5554
icon: <Delete />,
5655
};
5756

58-
const canContributorEdit = (isOwnAccount && !workspaceId) || (isActiveMemberWorkspaceContributor && isOwnAccount);
59-
const canEditUserRole =
60-
isActiveUserOrgAdmin || canContributorEdit || activeUser.isAdmin || isActiveUserWorkspaceAdmin;
57+
const canEditUserRole = isActiveUserOrgAdmin || activeUser.isAdmin || isActiveUserWorkspaceAdmin;
6158

6259
const workspaceAdmins = workspaceId ? users.filter((u) => isWorkspaceAdmin(u, workspaceId)) : [];
6360
const isTargetWorkspaceAdmin = workspaceId ? isWorkspaceAdmin(user, workspaceId) : false;

web_ui/src/pages/user-management/users/workspace-users/actions/workspace-user-actions.test.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ describe('WorkspaceUserActions', () => {
110110
expect(screen.getByText('Edit')).toBeInTheDocument();
111111
});
112112

113-
it('Workspace contributor can edit themselves (without role edition)', async () => {
113+
it('Workspace contributor cannot edit themselves', async () => {
114114
mockedUseActiveUser.mockImplementation(() => ({
115115
data: mockedContributorUser,
116116
isLoading: false,
@@ -124,8 +124,9 @@ describe('WorkspaceUserActions', () => {
124124
/>
125125
);
126126

127-
fireEvent.click(screen.getByRole('button', { name: `${mockedContributorUser.email} action menu` }));
128-
expect(screen.getByText('Edit')).toBeInTheDocument();
127+
expect(
128+
screen.queryByRole('button', { name: `${mockedContributorUser.email} action menu` })
129+
).not.toBeInTheDocument();
129130
});
130131

131132
it('Check if organization admin cannot delete him/herself', async () => {

0 commit comments

Comments
 (0)