145 lines
6.8 KiB
TypeScript
145 lines
6.8 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);
|
|
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,
|
|
}));
|
|
}
|