import { Button } from "@/components/ui/button" import { render, screen } from "@testing-library/react" import { Search } from "lucide-react" import { describe, it, expect } from "vitest" describe("Button", () => { it("renders with default variant and size", () => { render() const button = screen.getByRole("button", { name: /click me/i }) expect(button).toBeInTheDocument() expect(button).toHaveClass("h-10", "py-2", "px-4", "text-lg") }) it("applies different variants correctly", () => { const { rerender } = render() let button = screen.getByRole("button") expect(button).toHaveClass("bg-orangeDark", "text-white") rerender() button = screen.getByRole("button") expect(button).toHaveClass("bg-anakiwa-400") }) it("applies different sizes correctly", () => { const { rerender } = render() let button = screen.getByRole("button") expect(button).toHaveClass("h-9", "px-3", "text-sm") rerender() button = screen.getByRole("button") expect(button).toHaveClass("h-11", "px-8", "text-lg") }) it("renders with an icon", () => { render() const button = screen.getByRole("button") expect(button).toBeInTheDocument() // Check that icon is rendered (Search icon creates an svg) const svg = button.querySelector("svg") expect(svg).toBeInTheDocument() }) it("handles disabled state", () => { render() const button = screen.getByRole("button") expect(button).toBeDisabled() expect(button).toHaveClass( "disabled:opacity-50", "disabled:pointer-events-none" ) }) it("accepts custom className", () => { render() const button = screen.getByRole("button") expect(button).toHaveClass("custom-class") }) it("forwards ref correctly", () => { const ref = { current: null } render() expect(ref.current).toBeInstanceOf(HTMLButtonElement) }) })