import { render, screen } from "@testing-library/react"; import { describe, expect, it } from "vitest"; import { Button } from "./button"; describe("Button", () => { it("uses semibold text for primary buttons", () => { const { rerender } = render(); expect(screen.getByRole("button", { name: "Primary" })).toHaveClass( "font-semibold", ); rerender(); expect(screen.getByRole("button", { name: "Outline" })).toHaveClass( "font-medium", ); expect(screen.getByRole("button", { name: "Outline" })).not.toHaveClass( "font-semibold", ); }); it("supports extra-small text buttons", () => { render( , ); const button = screen.getByRole("button", { name: "Create Jira ticket" }); expect(button).toHaveClass("h-7"); expect(button).toHaveClass("text-xs"); }); it("supports extra-small link buttons", () => { render( , ); expect(screen.getByRole("button", { name: "Open link" })).toHaveClass( "text-xs", ); }); it("supports extra-small icon buttons", () => { render( , ); expect(screen.getByRole("button", { name: "Open tour" })).toHaveClass( "size-7", ); }); it("supports circular icon buttons without changing the default shape", () => { // Given / When const { rerender } = render( , ); // Then expect(screen.getByRole("button", { name: "Give feedback" })).toHaveClass( "rounded-full", "size-10", ); // When rerender(); // Then expect(screen.getByRole("button", { name: "Default shape" })).toHaveClass( "rounded-[8px]", ); }); it("renders the bare variant chrome-free (no background or border)", () => { render( , ); const button = screen.getByRole("button", { name: "Toggle sidebar" }); expect(button).toHaveClass("bg-transparent"); expect(button).toHaveClass("border-0"); expect(button).toHaveClass("p-0"); }); });