ai-chatbot/tests/routes/settings-visual-consistency.test.ts

56 lines
2.0 KiB
TypeScript

import { expect, test } from "@playwright/test";
import { readFileSync } from "node:fs";
import { resolve } from "node:path";
function readSource(path: string) {
return readFileSync(resolve(process.cwd(), path), "utf8");
}
test.describe("settings visual consistency", () => {
test("keeps access security surfaces readable in dark mode", () => {
const source = readSource(
"app/(admin)/settings/_components/access-security-dashboard.tsx"
);
expect(source).toContain("dark:bg-slate-900/70");
expect(source).toContain("dark:bg-sky-950/45");
expect(source).toContain("dark:bg-orange-950/45");
expect(source).toContain("dark:bg-emerald-950/45");
expect(source).toContain("dark:bg-slate-800");
expect(source).toContain("dark:bg-zinc-900/70");
expect(source).toContain("dark:bg-red-950/30");
});
test("keeps Style Pro inside the shared settings shell", () => {
const mainSource = readSource(
"app/(admin)/settings/admin-settings-client.tsx"
);
const styleProSource = readSource(
"app/(admin)/settings/style-pro/style-pro-settings-client.tsx"
);
const sharedShell =
"settings-workspace w-full px-3 py-3 sm:px-4 xl:px-5";
expect(mainSource).toContain(sharedShell);
expect(styleProSource).toContain(sharedShell);
expect(styleProSource).toContain("<AdminSettingsNavigation");
expect(styleProSource).toContain('activeTab="style-pro"');
expect(styleProSource).toContain("router.push(");
expect(styleProSource).toContain("/settings?tab=");
expect(styleProSource).not.toContain("max-w-7xl");
expect(styleProSource).not.toContain("返回设置");
});
test("restores the requested settings tab after cross-page navigation", () => {
const source = readSource(
"app/(admin)/settings/admin-settings-client.tsx"
);
expect(source).toContain(
'new URLSearchParams(window.location.search).get("tab")'
);
expect(source).toContain("ADMIN_SETTINGS_NAV_ITEMS.some");
expect(source).toContain('url.searchParams.set("tab", value)');
});
});