Files
portifolio-evandrodevbr/e2e/navigation.spec.ts
T
Evandro Fonseca Junior 2cd4a98c55 test: e2e mais rígida e .gitattributes
Zero telas sem texto no computador e no celular; atalho de teclado em até 4 Tabs e linear em até 36 com o inventário das paradas; ciclo de foco do menu com a barra de cookies; oferta e cabeçalho levando ao formulário; foco vindo de outra página; separador da faixa de clientes; contagem de pôsteres da SEV. .gitattributes com eol=lf.
2026-10-14 19:14:49 -03:00

64 lines
2.3 KiB
TypeScript

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<typeof original>) => {
(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");
});