Ctrl K
ComunidadGuías…

tests/e2e/team-domain-join.spec.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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();
});