52 lines
1.9 KiB
TypeScript
52 lines
1.9 KiB
TypeScript
import { expect, test, type Page } from "@playwright/test";
|
|
|
|
const API_ORIGIN = "http://127.0.0.1:8765";
|
|
|
|
const APP_ROUTES = [
|
|
{ label: "Chat", path: "/chat", command: "Open Chat" },
|
|
{ label: "Trace", path: "/trace", command: "Open Trace" },
|
|
{ label: "Replay", path: "/replay", command: "Open Replay" },
|
|
{ label: "Proposals", path: "/proposals", command: "Open Proposals" },
|
|
{ label: "Evals", path: "/evals", command: "Open Evals" },
|
|
{ label: "Runs", path: "/runs", command: "Open Runs" },
|
|
{ label: "Packs", path: "/packs", command: "Open Packs" },
|
|
{ label: "Vault", path: "/vault", command: "Open Vault" },
|
|
{ label: "Audit", path: "/audit", command: "Open Audit" },
|
|
{ label: "Settings", path: "/settings", command: "Open Settings" },
|
|
] as const;
|
|
|
|
async function makeBackendAbsent(page: Page) {
|
|
await page.route(`${API_ORIGIN}/**`, (route) => route.abort("failed"));
|
|
}
|
|
|
|
async function expectUsableRoute(page: Page) {
|
|
const main = page.locator('[data-region="main"]');
|
|
await expect(main).toBeVisible();
|
|
await expect(main).not.toHaveText(/^\s*$/);
|
|
}
|
|
|
|
async function openPalette(page: Page) {
|
|
await page.keyboard.press("ControlOrMeta+K");
|
|
await expect(page.getByRole("dialog", { name: "Command Palette" })).toBeVisible();
|
|
}
|
|
|
|
test.describe("command palette route smoke", () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await makeBackendAbsent(page);
|
|
});
|
|
|
|
for (const startRoute of APP_ROUTES) {
|
|
test(`opens with Meta+K and reaches every route from ${startRoute.label}`, async ({ page }) => {
|
|
for (const targetRoute of APP_ROUTES) {
|
|
await page.goto(startRoute.path);
|
|
await expectUsableRoute(page);
|
|
|
|
await openPalette(page);
|
|
await page.getByRole("button", { name: targetRoute.command }).click();
|
|
|
|
await expect(page).toHaveURL(new RegExp(`${targetRoute.path}$`));
|
|
await expectUsableRoute(page);
|
|
}
|
|
});
|
|
}
|
|
});
|