196 lines
5.6 KiB
TypeScript
196 lines
5.6 KiB
TypeScript
import { expect } from "@playwright/test";
|
|
|
|
import prisma from "@calcom/prisma";
|
|
|
|
import { test } from "../lib/fixtures";
|
|
|
|
test.describe.configure({ mode: "parallel" });
|
|
|
|
test.afterEach(async ({ users, orgs }) => {
|
|
await users.deleteAll();
|
|
await orgs.deleteAll();
|
|
});
|
|
|
|
test.describe("Organization - Privacy", () => {
|
|
test(`Private Org \n
|
|
1) Org Member cannot see members of orgs\n
|
|
2) Org Owner/Admin can see members`, async ({ page, users, orgs }) => {
|
|
const org = await orgs.create({
|
|
name: "TestOrg",
|
|
isPrivate: true,
|
|
});
|
|
const teamMatesObj = [
|
|
{ name: "teammate-1" },
|
|
{ name: "teammate-2" },
|
|
{ name: "teammate-3" },
|
|
{ name: "teammate-4" },
|
|
];
|
|
|
|
const owner = await users.create(
|
|
{
|
|
username: "pro-user",
|
|
name: "pro-user",
|
|
organizationId: org.id,
|
|
roleInOrganization: "OWNER",
|
|
},
|
|
{
|
|
hasTeam: true,
|
|
teammates: teamMatesObj,
|
|
}
|
|
);
|
|
const memberInOrg = await users.create({
|
|
username: "org-member-user",
|
|
name: "org-member-user",
|
|
organizationId: org.id,
|
|
roleInOrganization: "MEMBER",
|
|
});
|
|
|
|
await owner.apiLogin();
|
|
await page.goto("/settings/organizations/members");
|
|
await page.waitForLoadState("domcontentloaded");
|
|
|
|
const tableLocator = await page.getByTestId("user-list-data-table");
|
|
|
|
await expect(tableLocator).toBeVisible();
|
|
|
|
await memberInOrg.apiLogin();
|
|
await page.goto("/settings/organizations/members");
|
|
await page.waitForLoadState("domcontentloaded");
|
|
const userDataTable = await page.getByTestId("user-list-data-table");
|
|
const membersPrivacyWarning = await page.getByTestId("members-privacy-warning");
|
|
await expect(userDataTable).toBeHidden();
|
|
await expect(membersPrivacyWarning).toBeVisible();
|
|
});
|
|
test(`Private Org - Private Team\n
|
|
1) Team Member cannot see members in team\n
|
|
2) Team Admin/Owner can see members in team`, async ({ page, users, orgs }) => {
|
|
const org = await orgs.create({
|
|
name: "TestOrg",
|
|
isPrivate: true,
|
|
});
|
|
const teamMatesObj = [
|
|
{ name: "teammate-1" },
|
|
{ name: "teammate-2" },
|
|
{ name: "teammate-3" },
|
|
{ name: "teammate-4" },
|
|
];
|
|
|
|
const owner = await users.create(
|
|
{
|
|
username: "pro-user",
|
|
name: "pro-user",
|
|
organizationId: org.id,
|
|
roleInOrganization: "OWNER",
|
|
},
|
|
{
|
|
hasTeam: true,
|
|
teammates: teamMatesObj,
|
|
}
|
|
);
|
|
|
|
await owner.apiLogin();
|
|
const membership = await owner.getFirstTeamMembership();
|
|
const teamId = membership.team.id;
|
|
|
|
// Update team to be private
|
|
await page.goto(`/settings/teams/${teamId}/members`);
|
|
await page.waitForLoadState("domcontentloaded");
|
|
const togglePrivateSwitch = await page.getByTestId("make-team-private-check");
|
|
await togglePrivateSwitch.click();
|
|
|
|
// As admin/owner we can see the user list
|
|
const tableLocator = await page.getByTestId("team-member-list-container");
|
|
await expect(tableLocator).toBeVisible();
|
|
|
|
const memberUser = await prisma.membership.findFirst({
|
|
where: {
|
|
teamId,
|
|
role: "MEMBER",
|
|
},
|
|
select: {
|
|
user: {
|
|
select: {
|
|
email: true,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
expect(memberUser?.user.email).toBeDefined();
|
|
// @ts-expect-error expect doesnt assert on a type level
|
|
const memberOfTeam = await users.set(memberUser?.user.email);
|
|
await memberOfTeam.apiLogin();
|
|
|
|
await page.goto(`/settings/teams/${teamId}/members`);
|
|
await page.waitForLoadState("domcontentloaded");
|
|
|
|
// As a user we can not see the user list when a team is private
|
|
const hiddenTableLocator = await page.getByTestId("team-member-list-container");
|
|
await expect(hiddenTableLocator).toBeHidden();
|
|
});
|
|
test(`Private Org - Public Team\n
|
|
1) All team members can see members in team \n
|
|
2) Team Admin/Owner can see members in team`, async ({ page, users, orgs }) => {
|
|
const org = await orgs.create({
|
|
name: "TestOrg",
|
|
});
|
|
const teamMatesObj = [
|
|
{ name: "teammate-1" },
|
|
{ name: "teammate-2" },
|
|
{ name: "teammate-3" },
|
|
{ name: "teammate-4" },
|
|
];
|
|
|
|
const owner = await users.create(
|
|
{
|
|
username: "pro-user",
|
|
name: "pro-user",
|
|
organizationId: org.id,
|
|
roleInOrganization: "OWNER",
|
|
},
|
|
{
|
|
hasTeam: true,
|
|
teammates: teamMatesObj,
|
|
}
|
|
);
|
|
|
|
await owner.apiLogin();
|
|
const membership = await owner.getFirstTeamMembership();
|
|
const teamId = membership.team.id;
|
|
|
|
// Update team to be private
|
|
await page.goto(`/settings/teams/${teamId}/members`);
|
|
await page.waitForLoadState("domcontentloaded");
|
|
|
|
// As admin/owner we can see the user list
|
|
const tableLocator = await page.getByTestId("team-member-list-container");
|
|
await expect(tableLocator).toBeVisible();
|
|
|
|
const memberUser = await prisma.membership.findFirst({
|
|
where: {
|
|
teamId,
|
|
role: "MEMBER",
|
|
},
|
|
select: {
|
|
user: {
|
|
select: {
|
|
email: true,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
expect(memberUser?.user.email).toBeDefined();
|
|
// @ts-expect-error expect doesnt assert on a type level
|
|
const memberOfTeam = await users.set(memberUser?.user.email);
|
|
await memberOfTeam.apiLogin();
|
|
|
|
await page.goto(`/settings/teams/${teamId}/members`);
|
|
await page.waitForLoadState("domcontentloaded");
|
|
|
|
// As a user we can not see the user list when a team is private
|
|
const hiddenTableLocator = await page.getByTestId("team-member-list-container");
|
|
await expect(hiddenTableLocator).toBeVisible();
|
|
});
|
|
});
|