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.
81 lines
2.5 KiB
TypeScript
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);
|
|
});
|
|
});
|