import { describe, expect, it } from "vitest";
import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { axe } from "vitest-axe";
import { Button } from "./Button";
describe("Button", () => {
it("rend le label", () => {
render();
expect(screen.getByRole("button", { name: "Continuer" })).toBeInTheDocument();
});
it("appelle onClick quand cliqué", async () => {
const user = userEvent.setup();
let clicks = 0;
render();
await user.click(screen.getByRole("button"));
expect(clicks).toBe(1);
});
it("est focusable au clavier (Tab)", async () => {
const user = userEvent.setup();
render();
await user.tab();
expect(screen.getByRole("button")).toHaveFocus();
});
it("active onClick avec Espace ou Entrée", async () => {
const user = userEvent.setup();
let clicks = 0;
render();
const btn = screen.getByRole("button");
btn.focus();
await user.keyboard("{Enter}");
await user.keyboard(" ");
expect(clicks).toBe(2);
});
it("respecte disabled", async () => {
const user = userEvent.setup();
let clicks = 0;
render(
,
);
await user.click(screen.getByRole("button"));
expect(clicks).toBe(0);
});
it("loading rend le bouton inactif aux clics", async () => {
const user = userEvent.setup();
let clicks = 0;
render(
,
);
await user.click(screen.getByRole("button"));
expect(clicks).toBe(0);
});
it("n'a pas de violations axe-core (a11y)", async () => {
const { container } = render(
<>
>,
);
expect(await axe(container)).toHaveNoViolations();
});
});