import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { describe, it, expect, vi } from "vitest"; import Button from "./Button"; describe("Button", () => { it("renders children", () => { render(); expect( screen.getByRole("button", { name: "Click me" }), ).toBeInTheDocument(); }); it("handles click events", async () => { const handleClick = vi.fn(); render(); await userEvent.click(screen.getByRole("button")); expect(handleClick).toHaveBeenCalledTimes(1); }); it("applies variant styles", () => { render(); const button = screen.getByRole("button"); expect(button).toHaveClass("bg-primary"); }); it("applies size styles", () => { render(); const button = screen.getByRole("button"); expect(button).toHaveClass("text-xs"); }); it("can be disabled", () => { render(); expect(screen.getByRole("button")).toBeDisabled(); }); it("shows spinner and disables when loading", () => { render(); const button = screen.getByRole("button"); expect(button).toBeDisabled(); expect(button.querySelector("svg")).toBeInTheDocument(); }); it("shows spinner alongside text when loading", () => { render(); expect(screen.getByText("Submit")).toBeInTheDocument(); expect(screen.getByRole("button").querySelector("svg")).toBeInTheDocument(); }); });