import { describe, expect } from "vitest"; import { it } from "@/__tests__/fixtures"; import { render } from "@/__tests__/render-browser"; import { WizardStepper } from "./wizard-stepper"; // Like the modal frame: a marked size container, so lg: follows its width. function renderInWizardFrame(width: number) { return render(
, ); } function boxOf(element: Element) { const { width, height } = element.getBoundingClientRect(); return { width, height }; } describe("wizard stepper", () => { it("fits on one row naming only the current step while the wizard stacks", async () => { // When const screen = await renderInWizardFrame(720); // Then const progress = screen .getByRole("navigation", { name: "Wizard progress" }) .element(); expect(boxOf(progress).height).toBeLessThanOrEqual(40); await expect .element(screen.getByText("Authenticate Credentials")) .toBeVisible(); // Other steps keep their names for assistive tech but take no room. await expect.element( screen.getByRole("navigation", { name: "Wizard progress" }), ).toMatchAriaInlineSnapshot(` - navigation "Wizard progress": - text: Link a Provider Authenticate Credentials Validate Connection Launch Scan `); const otherStep = screen.getByText("Link a Provider").element(); expect(otherStep.checkVisibility()).toBe(true); // The block holding the name is clipped to 1px; the text inside overflows it. expect(boxOf(otherStep.closest("div")!).width).toBeLessThanOrEqual(1); await expect .element( screen.getByText( "Authorize a secure connection between Prowler and your provider.", ), ) .not.toBeVisible(); expect( screen .getByText("Authenticate Credentials") .element() .closest("[aria-current]"), ).toHaveAttribute("aria-current", "step"); }); it("lists every step with its description beside a wide wizard", async () => { // When const screen = await renderInWizardFrame(1200); // Then await expect .element( screen.getByText( "Enter the provider details you would like to add in Prowler.", ), ) .toBeVisible(); await expect.element(screen.getByText("Link a Provider")).toBeVisible(); expect( boxOf( screen.getByRole("navigation", { name: "Wizard progress" }).element(), ).height, ).toBeGreaterThan(300); }); });