Files
coder/site/e2e/tests/deployment/appearance.spec.ts
T
ケイラ 962608cde0 chore: allow signing in as non-admin users in e2e tests (#15892)
Closes coder/internal#168

Gets rid of the "global state" authentication, and adds a `login` helper
which should be called at the beginning of each test. This means that
not every test needs to authenticated as admin, and we can even have
tests that encompass multiple permission levels.

We also now create more than just the single admin user during setup, so
that we can have a set of users to pick from as appropriate.
2024-12-19 16:16:34 -07:00

89 lines
2.9 KiB
TypeScript

import { chromium, expect, test } from "@playwright/test";
import { expectUrl } from "../../expectUrl";
import { login, randomName, requiresLicense } from "../../helpers";
import { beforeCoderTest } from "../../hooks";
test.beforeEach(async ({ page }) => {
beforeCoderTest(page);
await login(page);
});
test("set application name", async ({ page }) => {
requiresLicense();
await page.goto("/deployment/appearance", { waitUntil: "domcontentloaded" });
const applicationName = randomName();
// Fill out the form
const form = page.locator("form", { hasText: "Application name" });
await form
.getByLabel("Application name", { exact: true })
.fill(applicationName);
await form.getByRole("button", { name: "Submit" }).click();
// Open a new session without cookies to see the login page
const browser = await chromium.launch();
const incognitoContext = await browser.newContext();
await incognitoContext.clearCookies();
const incognitoPage = await incognitoContext.newPage();
await incognitoPage.goto("/", { waitUntil: "domcontentloaded" });
// Verify the application name
const name = incognitoPage.locator("h1", { hasText: applicationName });
await expect(name).toBeVisible();
// Shut down browser
await incognitoPage.close();
await browser.close();
});
test("set application logo", async ({ page }) => {
requiresLicense();
await page.goto("/deployment/appearance", { waitUntil: "domcontentloaded" });
const imageLink = "/icon/azure.png";
// Fill out the form
const form = page.locator("form", { hasText: "Logo URL" });
await form.getByLabel("Logo URL", { exact: true }).fill(imageLink);
await form.getByRole("button", { name: "Submit" }).click();
// Open a new session without cookies to see the login page
const browser = await chromium.launch();
const incognitoContext = await browser.newContext();
await incognitoContext.clearCookies();
const incognitoPage = await incognitoContext.newPage();
await incognitoPage.goto("/", { waitUntil: "domcontentloaded" });
// Verify banner
const logo = incognitoPage.locator("img.application-logo");
await expect(logo).toHaveAttribute("src", imageLink);
// Shut down browser
await incognitoPage.close();
await browser.close();
});
test("set service banner", async ({ page }) => {
requiresLicense();
await page.goto("/deployment/appearance", { waitUntil: "domcontentloaded" });
const message = "Mary has a little lamb.";
// Fill out the form
await page.getByRole("button", { name: "New" }).click();
const form = page.getByRole("presentation");
await form.getByLabel("Message", { exact: true }).fill(message);
await form.getByRole("button", { name: "Update" }).click();
// Verify service banner
await page.goto("/workspaces", { waitUntil: "domcontentloaded" });
await expectUrl(page).toHavePathName("/workspaces");
const bar = page.locator("div.service-banner", { hasText: message });
await expect(bar).toBeVisible();
});