Skip to content
Open
Show file tree
Hide file tree
Changes from 13 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import { RESOURCE_TYPE, User } from '@geti/core/src/users/users.interface';
import { Flex, Text } from '@geti/ui';

import { useOrganization } from '../../../intel-admin-app/pages/organization/hooks/organization.hook';
import { OrganizationUserActions } from './actions/organization-user-actions.component';
import { Users } from './users.component';

Expand All @@ -12,6 +13,8 @@ interface UsersTabProps {
}

export const UsersTab = ({ activeUser }: UsersTabProps) => {
const { organizationId } = useOrganization();

if (!activeUser) return <></>;

return (
Expand All @@ -24,8 +27,8 @@ export const UsersTab = ({ activeUser }: UsersTabProps) => {
</Text>
<Users
activeUser={activeUser}
resourceType={[RESOURCE_TYPE.ORGANIZATION, RESOURCE_TYPE.WORKSPACE]}
resourceId={undefined}
resourceType={RESOURCE_TYPE.ORGANIZATION}
resourceId={organizationId}
UserActions={OrganizationUserActions}
/>
</Flex>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,7 @@ export const UserRoleCell = ({
);
}

const workspaceRole =
roles.find((role) => role.resourceType === RESOURCE_TYPE.WORKSPACE && role.resourceId === resourceId)?.role ??
'N/A';
const workspaceRole = roles.find((role) => role.resourceId === resourceId)?.role ?? 'N/A';

return (
<CasualCell
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,12 @@ export const UsersTable = ({
},
},
{
label: isEmpty(resourceId)
? 'Organization role'
: usersTableType === RESOURCE_TYPE.PROJECT
? 'Project role'
: 'Workspace role',
label:
usersTableType === RESOURCE_TYPE.ORGANIZATION
? 'Organization role'
: usersTableType === RESOURCE_TYPE.PROJECT
? 'Project role'
: 'Workspace role',
dataKey: USERS_TABLE_COLUMNS.ROLES,
width: 180,
isSortable: false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ export const Users = ({
const { sortBy, sortDirection, ...filteringParams } = usersQueryParams;
const hasFilters = !isEmpty(filteringParams);

const enableCreation = Array.isArray(resourceType) ? resourceType.length > 0 : resourceType === undefined;
const enableCreation = usersTableType === RESOURCE_TYPE.ORGANIZATION;
const shouldShowAddUserButton = enableCreation && !isSaasEnvironment && productInfo?.isSmtpDefined === false;
const shouldShowInviteUserButton = enableCreation && (isSaasEnvironment || productInfo?.isSmtpDefined === true);

Expand Down
88 changes: 50 additions & 38 deletions web_ui/tests/e2e/daily/members-management.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,51 +3,63 @@

import { v4 as uuid } from 'uuid';

import { USER_ROLE, WorkspaceRole } from '../../../packages/core/src/users/users.interface';
import { USER_ROLE } from '../../../packages/core/src/users/users.interface';
import { expect } from '../../fixtures/base-test';
import { MembersPage } from '../../fixtures/page-objects/members-page';
import { test } from '../fixtures';

const expectMemberToBeVisible = async (
membersPage: MembersPage,
member: { email: string; firstName: string; lastName: string; role: WorkspaceRole['role'] }
member: {
email: string;
firstName: string;
lastName: string;
organizationRole: USER_ROLE.ORGANIZATION_ADMIN | USER_ROLE.ORGANIZATION_CONTRIBUTOR;
}
) => {
const memberRow = membersPage.getMemberRow(member.email);

await expect(membersPage.getEmailCell(member.email, memberRow)).toBeVisible();
await expect(membersPage.getNameCell(member.firstName, member.lastName, memberRow)).toBeVisible();
await expect(membersPage.getRoleCell(member.role, memberRow)).toBeVisible();
await expect(membersPage.getRoleCell(member.organizationRole, memberRow)).toBeVisible();
};

const expectMemberNotToBeVisible = async (
membersPage: MembersPage,
member: { email: string; firstName: string; lastName: string; role: WorkspaceRole['role'] }
member: {
email: string;
firstName: string;
lastName: string;
organizationRole: USER_ROLE.ORGANIZATION_ADMIN | USER_ROLE.ORGANIZATION_CONTRIBUTOR;
}
) => {
await expect(membersPage.getMemberRow(member.email)).toBeHidden();
};

test.describe('Members management suite', () => {
const workspaceAdminMember = {
const organizationAdminMember = {
email: `test-admin-${uuid()}@intel.com`,
firstName: 'Test',
lastName: 'Admin',
password: 'Test1234',
role: USER_ROLE.WORKSPACE_ADMIN,
workspaceRole: USER_ROLE.WORKSPACE_ADMIN,
organizationRole: USER_ROLE.ORGANIZATION_ADMIN,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The user should not have the ORGNIZATION_ADMIN role and any other role simultaneously.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, updated

} as const;

const workspaceContributorMember = {
const organizationContributorMember = {
email: `test-contributor-${uuid()}@intel.com`,
firstName: 'Test',
lastName: 'Contributor',
password: 'Test1234',
role: USER_ROLE.WORKSPACE_CONTRIBUTOR,
workspaceRole: USER_ROLE.WORKSPACE_CONTRIBUTOR,
organizationRole: USER_ROLE.ORGANIZATION_CONTRIBUTOR,
} as const;

test.afterEach(async ({ membersPage }, testInfo) => {
if (testInfo.status !== 'passed') {
console.info('Cleanup');
await membersPage.removeMember(workspaceAdminMember.email);
await membersPage.removeMember(workspaceContributorMember.email);
await membersPage.removeMember(organizationAdminMember.email);
await membersPage.removeMember(organizationContributorMember.email);
}
});

Expand All @@ -65,63 +77,63 @@ test.describe('Members management suite', () => {

await membersPage.open();

await test.step('Creates new workspace admin and workspace contributor member', async () => {
await membersPage.addMember(workspaceContributorMember);
await test.step('Creates new organization admin and organization contributor members', async () => {
await membersPage.addMember(organizationContributorMember);

await expectMemberToBeVisible(membersPage, workspaceContributorMember);
await expectMemberToBeVisible(membersPage, organizationContributorMember);

await membersPage.addMember(workspaceAdminMember);
await membersPage.addMember(organizationAdminMember);

await expectMemberToBeVisible(membersPage, workspaceAdminMember);
await expectMemberToBeVisible(membersPage, organizationAdminMember);
});

await test.step('Filters by workspace admin and workspace contributor role', async () => {
await membersPage.filterByRole(USER_ROLE.WORKSPACE_ADMIN);
await test.step('Filters by organization admin and organization contributor role', async () => {
await membersPage.filterByRole(USER_ROLE.ORGANIZATION_ADMIN);

await expectMemberToBeVisible(membersPage, workspaceAdminMember);
await expectMemberNotToBeVisible(membersPage, workspaceContributorMember);
await expectMemberToBeVisible(membersPage, organizationAdminMember);
await expectMemberNotToBeVisible(membersPage, organizationContributorMember);

await membersPage.filterByRole(USER_ROLE.WORKSPACE_CONTRIBUTOR);
await membersPage.filterByRole(USER_ROLE.ORGANIZATION_CONTRIBUTOR);

await expectMemberToBeVisible(membersPage, workspaceContributorMember);
await expectMemberNotToBeVisible(membersPage, workspaceAdminMember);
await expectMemberToBeVisible(membersPage, organizationContributorMember);
await expectMemberNotToBeVisible(membersPage, organizationAdminMember);

await membersPage.filterByRole('All role');
await expectMemberToBeVisible(membersPage, workspaceAdminMember);
await expectMemberToBeVisible(membersPage, workspaceContributorMember);
await expectMemberToBeVisible(membersPage, organizationAdminMember);
await expectMemberToBeVisible(membersPage, organizationContributorMember);
});

await test.step("Filters by member's name and email", async () => {
await membersPage.filterByNameOrEmail(workspaceAdminMember.email);
await membersPage.filterByNameOrEmail(organizationAdminMember.email);

await expectMemberToBeVisible(membersPage, workspaceAdminMember);
await expectMemberNotToBeVisible(membersPage, workspaceContributorMember);
await expectMemberToBeVisible(membersPage, organizationAdminMember);
await expectMemberNotToBeVisible(membersPage, organizationContributorMember);

await membersPage.filterByNameOrEmail(workspaceContributorMember.lastName);
await membersPage.filterByNameOrEmail(organizationContributorMember.lastName);

await expectMemberToBeVisible(membersPage, workspaceContributorMember);
await expectMemberNotToBeVisible(membersPage, workspaceAdminMember);
await expectMemberToBeVisible(membersPage, organizationContributorMember);
await expectMemberNotToBeVisible(membersPage, organizationAdminMember);

await membersPage.resetSearchFilter();
});

await test.step('Edits workspace admin and workspace contributor member', async () => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this test and the next one be renamed?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, updated :)

const updatedWorkspaceAdminMember = {
...workspaceAdminMember,
...organizationAdminMember,
firstName: 'Updated',
lastName: 'Old Admin',
role: USER_ROLE.WORKSPACE_CONTRIBUTOR,
role: USER_ROLE.ORGANIZATION_CONTRIBUTOR,
} as const;

await membersPage.editMember(updatedWorkspaceAdminMember);

await expectMemberToBeVisible(membersPage, updatedWorkspaceAdminMember);

const updatedWorkspaceContributorMember = {
...workspaceContributorMember,
...organizationContributorMember,
firstName: 'Updated',
lastName: 'Old Contributor',
role: USER_ROLE.WORKSPACE_ADMIN,
role: USER_ROLE.ORGANIZATION_ADMIN,
} as const;

await membersPage.editMember(updatedWorkspaceContributorMember);
Expand All @@ -130,13 +142,13 @@ test.describe('Members management suite', () => {
});

await test.step('Removes workspace admin and workspace contributor member', async () => {
await membersPage.removeMember(workspaceContributorMember.email);
await membersPage.removeMember(organizationContributorMember.email);

await expectMemberNotToBeVisible(membersPage, workspaceContributorMember);
await expectMemberNotToBeVisible(membersPage, organizationContributorMember);

await membersPage.removeMember(workspaceAdminMember.email);
await membersPage.removeMember(organizationAdminMember.email);

await expectMemberNotToBeVisible(membersPage, workspaceAdminMember);
await expectMemberNotToBeVisible(membersPage, organizationAdminMember);
});
});
});
Loading
Loading