import { expect, test } from "@playwright/test"; import { DESKTOP } from "./helpers"; /** * (d) Clicar em "Cases" no menu e depois num case navega sem recarregar o documento (um marcador em `window` * sobrevive) e cada troca de página dispara uma startViewTransition; a carga inicial, nenhuma. */ type Probe = { __marker?: string; __viewTransitions?: number }; test.use({ viewport: DESKTOP }); test("menu Cases e depois um case: sem recarregar o documento, uma transição de página por navegação", async ({ page, }) => { // conta as chamadas de document.startViewTransition, desde antes do primeiro script da página await page.addInitScript(() => { const probe = window as unknown as Probe; probe.__viewTransitions = 0; const original = document.startViewTransition?.bind(document); if (!original) return; document.startViewTransition = ((...args: Parameters) => { (probe.__viewTransitions as number) += 1; return original(...args); }) as typeof document.startViewTransition; }); const transitions = () => page.evaluate(() => (window as unknown as Probe).__viewTransitions); await page.goto("/", { waitUntil: "load" }); await page.waitForTimeout(1500); await page.evaluate(() => { (window as unknown as Probe).__marker = "mesmo-documento"; }); expect( await page.evaluate(() => "startViewTransition" in document), "o navegador precisa ter startViewTransition", ).toBe(true); expect(await transitions(), "carga inicial").toBe(0); await page .getByRole("navigation", { name: "Navegação principal" }) .getByRole("link", { name: "Cases" }) .click(); await page.waitForURL("**/cases"); await expect(page.getByRole("heading", { level: 1 })).toBeVisible(); await page.waitForTimeout(500); expect(await transitions(), "depois de Cases").toBe(1); await page .getByRole("link", { name: /^Ver case / }) .first() .click(); await page.waitForURL(/\/cases\/[^/]+$/); await expect(page.getByRole("heading", { level: 1 })).toBeVisible(); await page.waitForTimeout(500); expect(await transitions(), "depois de abrir um case").toBe(2); expect( await page.evaluate(() => (window as unknown as Probe).__marker), "o documento foi recarregado (o marcador sumiu)", ).toBe("mesmo-documento"); });