You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
1.6 KiB
TypeScript

// frontend/playwright/shell.spec.ts
import { test, expect } from "@playwright/test";
test("/ → /dashboard 리다이렉트", async ({ page }) => {
await page.goto("/");
await expect(page).toHaveURL(/\/dashboard$/);
});
test("내비 항목이 모든 페이지에서 보인다", async ({ page }) => {
await page.goto("/tasks");
for (const label of ["대시보드", "인박스", "결재함", "작업", "메일"]) {
await expect(page.getByRole("link", { name: new RegExp(label) })).toBeVisible();
}
});
test("마지막 라우트(journey)도 실제 페이지로 승격됨 — '준비 중' 없음", async ({ page }) => {
await page.goto("/journey");
await expect(page.getByRole("heading", { name: "오늘의 여정" })).toBeVisible();
await expect(page.getByText("준비 중")).toHaveCount(0);
});
test("작업 라우트에서 '작업' 내비가 active", async ({ page }) => {
await page.goto("/tasks");
await expect(page.getByRole("link", { name: /작업/ })).toHaveClass(/active/);
});
test("테마 토글이 새로고침 후에도 유지된다", async ({ page }) => {
await page.goto("/dashboard");
await page.getByLabel("테마 전환").click();
await expect(page.locator("html")).toHaveAttribute("data-theme", "dark");
await page.reload();
await expect(page.locator("html")).toHaveAttribute("data-theme", "dark"); // localStorage 영속
});
test("/journey 는 셸(Topbar) 유지", async ({ page }) => {
await page.goto("/journey");
await expect(page.getByRole("link", { name: "아리 홈" })).toBeVisible();
await expect(page.locator(".shell-page")).toBeVisible();
});