Files
SnapOtter/tests/e2e-docs/search-and-theme.spec.ts
T
SnapOtterandGitHub 91ac583e87 feat(docs): Two-Doors home, otter-orange brand, Pagefind search, and enterprise SSO/SCIM/roles guides
Docs site redesign: Two-Doors home, otter-orange brand, Pagefind search, enterprise SSO/SCIM/roles guides.
2026-06-19 18:46:59 +08:00

67 lines
2.5 KiB
TypeScript

import { expect, test } from "@playwright/test";
test.describe("docs search (Pagefind)", () => {
test("search button is visible", async ({ page }) => {
await page.goto("/");
await expect(page.locator(".blog-search").first()).toBeVisible();
});
test("clicking search opens the dialog with an input", async ({ page }) => {
await page.goto("/");
await page.locator(".blog-search").first().click();
await expect(page.locator('input[placeholder="Search Docs"]')).toBeVisible();
});
test("typing a query shows results", async ({ page }) => {
await page.goto("/");
await page.locator(".blog-search").first().click();
const input = page.locator('input[placeholder="Search Docs"]');
await input.fill("docker");
await expect(page.locator('[role="option"]').first()).toBeVisible({ timeout: 10000 });
});
});
test.describe("Theme Toggle", () => {
test("theme toggle exists in DOM", async ({ page }) => {
await page.goto("/guide/getting-started");
const toggle = page.locator(
'button[role="switch"][title*="dark"], button[role="switch"][title*="light"]',
);
await expect(toggle.first()).toBeAttached();
});
test("clicking theme toggle changes appearance", async ({ page }) => {
await page.goto("/guide/getting-started");
const html = page.locator("html");
const initialClass = await html.getAttribute("class");
const wasDark = initialClass?.includes("dark") ?? false;
// Click the visible toggle inside our custom nav area (the hidden default
// VPNavBarAppearance is first in DOM order, so a bare querySelector would
// hit it instead). Playwright's click auto-waits for hydration.
await page.locator('.nav-bar-right button[role="switch"]').click();
// Assert the dark class actually toggled
if (wasDark) {
await expect(html).not.toHaveClass(/dark/);
} else {
await expect(html).toHaveClass(/dark/);
}
});
});
test.describe("GitHub Stars Component", () => {
test("GitHub star button is visible in navbar", async ({ page }) => {
await page.goto("/");
const githubBtn = page.locator(".github-btn, .github-btn-wrapper").first();
await expect(githubBtn).toBeVisible();
});
test("GitHub star button links to correct repo", async ({ page }) => {
await page.goto("/");
const starLink = page.locator('a[title="Star on GitHub"]').first();
await expect(starLink).toHaveAttribute("href", "https://github.com/snapotter-hq/snapotter");
await expect(starLink).toHaveAttribute("target", "_blank");
});
});