test(site): add e2e tests for appearance (#12950)

This commit is contained in:
Marcin Tojek 2024-04-12 14:46:44 +02:00 committed by GitHub
parent b71af32113
commit cf2d2a98bd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 93 additions and 1 deletions

View File

@ -0,0 +1,82 @@
import { chromium, expect, test } from "@playwright/test";
import { expectUrl } from "../../expectUrl";
import { randomName, requiresEnterpriseLicense } from "../../helpers";
test("set application name", async ({ page }) => {
requiresEnterpriseLicense();
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 }) => {
requiresEnterpriseLicense();
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");
await expect(logo).toHaveAttribute("src", imageLink);
// Shut down browser
await incognitoPage.close();
await browser.close();
});
test("set service banner", async ({ page }) => {
requiresEnterpriseLicense();
await page.goto("/deployment/appearance", { waitUntil: "domcontentloaded" });
const message = "Mary has a little lamb.";
// Fill out the form
const form = page.locator("form", { hasText: "Service Banner" });
await form.getByLabel("Enabled", { exact: true }).check();
await form.getByLabel("Message", { exact: true }).fill(message);
await form.getByRole("button", { name: "Submit" }).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();
});

View File

@ -16,7 +16,7 @@ export const ServiceBannerView: FC<ServiceBannerViewProps> = ({
isPreview,
}) => {
return (
<div css={[styles.banner, { backgroundColor }]}>
<div css={[styles.banner, { backgroundColor }]} className="service-banner">
{isPreview && <Pill type="info">Preview</Pill>}
<div
css={[

View File

@ -105,6 +105,9 @@ export const AppearanceSettingsPageView: FC<
fullWidth
placeholder='Leave empty to display "Coder".'
disabled={!isEntitled}
inputProps={{
"aria-label": "Application name",
}}
/>
</Fieldset>
@ -150,6 +153,9 @@ export const AppearanceSettingsPageView: FC<
</InputAdornment>
),
}}
inputProps={{
"aria-label": "Logo URL",
}}
/>
</Fieldset>
@ -208,6 +214,7 @@ export const AppearanceSettingsPageView: FC<
);
await serviceBannerForm.setFieldValue("enabled", newState);
}}
data-testid="switch-service-banner"
/>
}
label="Enabled"
@ -221,6 +228,9 @@ export const AppearanceSettingsPageView: FC<
fullWidth
label="Message"
multiline
inputProps={{
"aria-label": "Message",
}}
/>
</Stack>