Files
tech-log-frontend/tests/support/browser/tech-log-fixtures.ts
T

141 lines
6.6 KiB
TypeScript

import type { Page } from "@playwright/test";
export const TECH_LOG_FIXED_TIME = "2026-08-14T01:00:00.000Z";
export const TECH_LOG_CANONICAL_ROUTES = [
{ routeId: "TECH_LOG_HOME", path: "/", layout: "PUBLIC" },
{ routeId: "TECH_LOG_EXPLORE", path: "/explore", layout: "PUBLIC" },
{ routeId: "TECH_LOG_EXPLORE_KIND", path: "/explore/cases", layout: "PUBLIC" },
{ routeId: "TECH_LOG_CASE", path: "/cases/collection-fetch-join-pagination", layout: "PUBLIC" },
{ routeId: "TECH_LOG_REFERENCE", path: "/references/state-and-nonce-boundary", layout: "PUBLIC" },
{ routeId: "TECH_LOG_QUESTION", path: "/questions/validate-edge-token-again", layout: "PUBLIC" },
{ routeId: "TECH_LOG_TOPIC", path: "/topics/jpa", layout: "PUBLIC" },
{ routeId: "TECH_LOG_PROJECTS", path: "/projects", layout: "PUBLIC" },
{ routeId: "TECH_LOG_PROJECT", path: "/projects/backend-skeleton", layout: "PUBLIC" },
{ routeId: "TECH_LOG_PROJECT_RECORDS", path: "/projects/backend-skeleton/records", layout: "PUBLIC" },
{ routeId: "TECH_LOG_PROJECT_DECISIONS", path: "/projects/backend-skeleton/decisions", layout: "PUBLIC" },
{ routeId: "TECH_LOG_PROJECT_ACTIVITY", path: "/projects/backend-skeleton/activity", layout: "PUBLIC" },
{ routeId: "TECH_LOG_RELEASES", path: "/releases", layout: "PUBLIC" },
{ routeId: "TECH_LOG_RELEASE", path: "/releases/0.1.0", layout: "PUBLIC" },
{ routeId: "TECH_LOG_PROFILE", path: "/profile", layout: "PUBLIC" },
{ routeId: "TECH_LOG_SEARCH", path: "/search?q=JPA", layout: "PUBLIC" },
{ routeId: "TECH_LOG_STUDIO_HOME", path: "/studio", layout: "STUDIO" },
{ routeId: "TECH_LOG_STUDIO_DOCUMENTS", path: "/studio/documents", layout: "STUDIO" },
{ routeId: "TECH_LOG_STUDIO_DOCUMENT_NEW", path: "/studio/documents/new", layout: "STUDIO" },
{ routeId: "TECH_LOG_STUDIO_DOCUMENT_EDIT", path: "/studio/documents/11111111-1111-4111-8111-111111111111/edit", layout: "STUDIO" },
{ routeId: "TECH_LOG_STUDIO_DOCUMENT_VALIDATION", path: "/studio/documents/11111111-1111-4111-8111-111111111113/validation", layout: "STUDIO" },
{ routeId: "TECH_LOG_STUDIO_DOCUMENT_PREVIEW", path: "/studio/documents/11111111-1111-4111-8111-111111111111/preview", layout: "STUDIO" },
{ routeId: "TECH_LOG_STUDIO_DOCUMENT_PUBLISH", path: "/studio/documents/11111111-1111-4111-8111-111111111113/publish", layout: "STUDIO" },
{ routeId: "TECH_LOG_STUDIO_PUBLICATIONS", path: "/studio/publications", layout: "STUDIO" },
{ routeId: "TECH_LOG_STUDIO_PUBLICATION_PREVIEW", path: "/studio/publications/66666666-6666-4666-8666-666666666661/preview", layout: "STUDIO" },
{ routeId: "TECH_LOG_STUDIO_NOT_FOUND", path: "/studio/unknown-screen", layout: "STUDIO" },
{ routeId: "NOT_FOUND", path: "/unknown-public-screen", layout: "PUBLIC" },
] as const;
export const TECH_LOG_PUBLIC_FIXTURE_PATHS = [
"/cases/collection-fetch-join-pagination",
"/cases/redis-adapter-ttl-boundary",
"/references/state-and-nonce-boundary",
"/references/jpa-list-fetch-strategy",
"/questions/validate-edge-token-again",
"/questions/collection-fetch-join-with-pagination",
"/topics/jpa",
"/topics/redis",
"/topics/authentication",
"/projects/backend-skeleton",
"/projects/backend-skeleton/records",
"/projects/backend-skeleton/decisions",
"/projects/backend-skeleton/activity",
"/projects/auth-lab",
"/projects/auth-lab/records",
"/projects/auth-lab/decisions",
"/projects/auth-lab/activity",
"/releases/0.1.0",
] as const;
export const TECH_LOG_UNKNOWN_PUBLIC_PATHS = [
["explore-kind", "/explore/unknown-kind"],
["case", "/cases/not-registered"],
["reference", "/references/not-registered"],
["question", "/questions/not-registered"],
["topic", "/topics/not-registered"],
["project", "/projects/missing-project"],
["project-records", "/projects/missing-project/records"],
["project-decisions", "/projects/missing-project/decisions"],
["project-activity", "/projects/missing-project/activity"],
["release", "/releases/9.9.9"],
] as const;
export const TECH_LOG_STUDIO_STATE_PATHS = [
["dashboard", "/studio"],
["document-list", "/studio/documents"],
["new-document", "/studio/documents/new"],
["case-editor", "/studio/documents/11111111-1111-4111-8111-111111111111/edit"],
["reference-editor", "/studio/documents/11111111-1111-4111-8111-111111111113/edit"],
["question-editor", "/studio/documents/11111111-1111-4111-8111-111111111114/edit"],
["conflict-editor", "/studio/documents/11111111-1111-4111-8111-111111111115/edit"],
["valid-validation", "/studio/documents/11111111-1111-4111-8111-111111111113/validation"],
["invalid-validation", "/studio/documents/11111111-1111-4111-8111-111111111114/validation"],
["current-preview", "/studio/documents/11111111-1111-4111-8111-111111111111/preview"],
["missing-preview", "/studio/documents/11111111-1111-4111-8111-111111111113/preview"],
["expired-preview", "/studio/documents/11111111-1111-4111-8111-111111111117/preview"],
["publish-ready", "/studio/documents/11111111-1111-4111-8111-111111111113/publish"],
["publish-blocked", "/studio/documents/11111111-1111-4111-8111-111111111114/publish"],
["publications", "/studio/publications"],
["publication-snapshot", "/studio/publications/66666666-6666-4666-8666-666666666661/preview"],
["missing-document", "/studio/documents/99999999-9999-4999-8999-999999999999/edit"],
["missing-publication", "/studio/publications/99999999-9999-4999-8999-999999999999/preview"],
["unknown-studio-route", "/studio/unknown-screen"],
] as const;
export const TECH_LOG_BREAKPOINT_WIDTHS = [
1180,
1179,
1050,
1024,
980,
900,
820,
768,
767,
420,
390,
375,
] as const;
export async function prepareTechLogPage(page: Page) {
await page.clock.setFixedTime(new Date(TECH_LOG_FIXED_TIME));
await page.emulateMedia({ colorScheme: "light", reducedMotion: "reduce" });
}
export async function settleTechLogPage(page: Page) {
await page.evaluate(async () => {
await document.fonts.ready;
});
await page.addStyleTag({
content: `
*, *::before, *::after {
animation-delay: 0s !important;
animation-duration: 0s !important;
caret-color: transparent !important;
transition-delay: 0s !important;
transition-duration: 0s !important;
}
`,
});
}
export async function gotoTechLog(page: Page, path: string) {
await prepareTechLogPage(page);
await page.goto(path);
await page.locator("body").waitFor({ state: "visible" });
await settleTechLogPage(page);
}
export async function horizontalOverflow(page: Page) {
return page.evaluate(() => ({
clientWidth: document.documentElement.clientWidth,
scrollWidth: document.documentElement.scrollWidth,
}));
}