tests/e2e/team-domain-join.spec.ts
Rama main · réplica de lectura del repositorio original.
import {
expect,
fulfillJson,
mockTeamSettings,
TEAM,
TEAM_SETTINGS_PATH,
test,
} from "./helpers/run-checks-fixtures";
test("an owner saves domain joining, reloads it, and adds an existing teammate", async ({
page,
}) => {
await mockTeamSettings(page);
let domain: string | null = null;
let enabled = false;
const additions: unknown[] = [];
await page.route(`**/api/teams/${TEAM.id}/signup-domain`, async (route) => {
if (route.request().method() === "PATCH") {
const body = route.request().postDataJSON() as { enabled: boolean };
enabled = body.enabled;
domain = "example.com";
}
await fulfillJson(route, {
domain,
enabled,
eligibleDomain: "example.com",
viewer: { canManage: true },
});
});
await page.route(`**/api/teams/${TEAM.id}/members/add`, async (route) => {
additions.push(route.request().postDataJSON());
await fulfillJson(
route,
{ member: { userId: "person", role: "developer" } },
201
);
});
await page.goto(`${TEAM_SETTINGS_PATH}/members`);
const toggle = page.getByRole("switch", {
name: "Allow people from @example.com to join",
});
await expect(toggle).not.toBeChecked();
await toggle.click();
await expect(toggle).toBeChecked();
await page.reload();
await expect(toggle).toBeChecked();
await toggle.click();
await expect(toggle).not.toBeChecked();
await expect(
page.getByText("Allow people from @example.com to join")
).toBeVisible();
await toggle.click();
await expect(toggle).toBeChecked();
await page
.getByLabel("Add someone who already signed up")
.fill("person@example.com");
await page.getByRole("button", { name: "Add member", exact: true }).click();
await expect(page.getByRole("status")).toHaveText(
"Member added with Developer access."
);
expect(additions).toEqual([
{ email: "person@example.com", role: "developer" },
]);
});
test("a failed save retains the domain setting and reports the error", async ({
page,
}) => {
await mockTeamSettings(page);
await page.route(`**/api/teams/${TEAM.id}/signup-domain`, (route) =>
route.request().method() === "PATCH"
? fulfillJson(route, { error: "Unable to save this setting." }, 500)
: fulfillJson(route, {
domain: null,
enabled: false,
eligibleDomain: "example.com",
viewer: { canManage: true },
})
);
await page.goto(`${TEAM_SETTINGS_PATH}/members`);
const toggle = page.getByRole("switch", {
name: "Allow people from @example.com to join",
});
await toggle.click();
await expect(page.getByRole("status")).toHaveText(
"Unable to save this setting."
);
await expect(toggle).not.toBeChecked();
});
test("a developer can read but cannot change the domain setting or add a member", async ({
page,
}) => {
await mockTeamSettings(page, "developer");
await page.route(`**/api/teams/${TEAM.id}/signup-domain`, (route) =>
fulfillJson(route, {
domain: "example.com",
enabled: true,
eligibleDomain: "example.com",
viewer: { canManage: false },
})
);
await page.goto(`${TEAM_SETTINGS_PATH}/members`);
await expect(
page.getByRole("switch", { name: "Allow people from @example.com to join" })
).toBeDisabled();
await expect(
page.getByRole("button", { name: "Add member", exact: true })
).toHaveCount(0);
});
test("a manager from another domain can turn joins off without changing the saved domain", async ({
page,
}) => {
await mockTeamSettings(page, "admin");
let enabled = true;
await page.route(`**/api/teams/${TEAM.id}/signup-domain`, async (route) => {
if (route.request().method() === "PATCH") enabled = false;
await fulfillJson(route, {
domain: "example.com",
enabled,
eligibleDomain: "other.test",
viewer: { canManage: true },
});
});
await page.goto(`${TEAM_SETTINGS_PATH}/members`);
const toggle = page.getByRole("switch", {
name: "Allow people from @example.com to join",
});
await expect(toggle).toBeChecked();
await toggle.click();
await expect(toggle).not.toBeChecked();
await expect(toggle).toBeDisabled();
await expect(
page.getByText("Use a verified @example.com email to turn this on.")
).toBeVisible();
});