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.
This commit is contained in:
1 parent
c7d09d63d4
commit
67b32fcab3
118 files changed
+16730
No files matched your search
@@ -0,0 +1,80 @@
|
||||
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);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user