Files
portifolio-evandrodevbr/app/jogo/Relatorio.test.tsx
T
evandro 67b32fcab3
CI / audit (push) Successful in 10m48s
CI / verify (push) Successful in 19m2s
CI / deploy (push) Successful in 2m14s
CI / e2e (push) Failing after 36m15s
feat(jogo): expediente dos mortos, jogo de zumbis em primeira pessoa
Etapa 1 inteira (logica com 100% de cobertura, cena 3D, toque, sons, bancada de desempenho, e2e) e a base da etapa 2 (mapa novo no Tiled, texturas, imagens dos itens, sons conferidos, golpe recortado e medido). Pagina /jogo fora do menu e do sitemap ate a medicao no celular.
2026-11-10 19:37:10 -03:00

81 lines
2.5 KiB
TypeScript

import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { PROBLEMAS, problemaPorId } from "@/lib/jogo/problemas";
import type { Resultado } from "./contrato";
import Relatorio from "./Relatorio";
const [a, b, c] = PROBLEMAS;
const base: Resultado = {
vitoria: true,
problemaId: c.id,
dificuldade: "facil",
resolvidos: [a.id, b.id, c.id],
placar: { jogador: 9, drones: 5 },
drones: [],
segundos: 300,
};
describe("Relatorio", () => {
it("na vitória mostra o título, o placar e foca o título", () => {
render(<Relatorio resultado={base} aoJogarDeNovo={jest.fn()} />);
const titulo = screen.getByRole("heading", {
level: 1,
name: "Problemas resolvidos",
});
expect(titulo).toHaveFocus();
expect(screen.getByText("Você 9 · Drones 5")).toBeInTheDocument();
});
it("na derrota mostra o outro título", () => {
render(
<Relatorio
resultado={{ ...base, vitoria: false }}
aoJogarDeNovo={jest.fn()}
/>,
);
expect(
screen.getByRole("heading", {
level: 1,
name: "Os problemas venceram desta vez",
}),
).toBeInTheDocument();
});
it("cada cartão aponta para o destino do problema", () => {
render(<Relatorio resultado={base} aoJogarDeNovo={jest.fn()} />);
const links = screen.getAllByRole("link", {
name: /Ver como eu resolvo isso/,
});
expect(links).toHaveLength(3);
for (const [i, id] of base.resolvidos.entries()) {
expect(links[i]).toHaveAttribute("href", problemaPorId(id)?.destino);
}
});
it("o WhatsApp cita o problema escolhido, mesmo sem ter sido resolvido", () => {
render(
<Relatorio
resultado={{ ...base, vitoria: false, resolvidos: [a.id] }}
aoJogarDeNovo={jest.fn()}
/>,
);
const link = screen.getByRole("link", { name: "Chamar no WhatsApp" });
const href = link.getAttribute("href") ?? "";
expect(href).toMatch(/^https:\/\/wa\.me\/\d+\?text=/);
expect(href).toContain(encodeURIComponent(c.nome));
expect(
screen.getAllByRole("link", { name: /Ver como eu resolvo isso/ }),
).toHaveLength(1);
});
it("Jogar de novo chama a ação", async () => {
const aoJogarDeNovo = jest.fn();
render(<Relatorio resultado={base} aoJogarDeNovo={aoJogarDeNovo} />);
await userEvent.click(
screen.getByRole("button", { name: "Jogar de novo" }),
);
expect(aoJogarDeNovo).toHaveBeenCalledTimes(1);
});
});