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_ASSETS", path: "/studio/assets", 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"], ["asset-library", "/studio/assets"], ["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); const response = await page.goto(path, { waitUntil: "networkidle" }); await page.locator("body").waitFor({ state: "visible" }); if (response?.headers()["content-type"]?.startsWith("text/html")) { await page.locator("html[data-build-id][data-release-id]").waitFor(); await page.locator(".site-frame, .studio-app").waitFor(); } await settleTechLogPage(page); } export async function horizontalOverflow(page: Page) { return page.evaluate(() => ({ clientWidth: document.documentElement.clientWidth, scrollWidth: document.documentElement.scrollWidth, })); }