import React from "react"; import { Button } from "./index"; import { fireEvent, render, screen } from "@testing-library/react"; import "@testing-library/jest-dom"; describe("Button", () => { it("renders children content", () => { render(); expect(screen.getByRole("button")).toHaveTextContent("Click me"); }); it("has correct displayName", () => { expect(Button.displayName).toBe("Button"); }); it("applies className", () => { render(); expect(screen.getByRole("button")).toHaveClass("btn-primary"); }); it("applies inline style", () => { render(); expect(screen.getByRole("button").style.color).toBe("red"); }); it("defaults className to empty string", () => { render(); expect(screen.getByRole("button")).toHaveAttribute("class", ""); }); it("disables button when disabled prop is true", () => { render(); expect(screen.getByRole("button")).toBeDisabled(); }); it("is enabled by default", () => { render(); expect(screen.getByRole("button")).not.toBeDisabled(); }); it("calls onClick handler when clicked", () => { const onClick = jest.fn(); render(); fireEvent.click(screen.getByRole("button")); expect(onClick).toHaveBeenCalledTimes(1); }); it("does not call onClick when disabled", () => { const onClick = jest.fn(); render( ); fireEvent.click(screen.getByRole("button")); expect(onClick).not.toHaveBeenCalled(); }); it("forwards ref to button element", () => { const ref = React.createRef(); render(); expect(ref.current).toBeInstanceOf(HTMLButtonElement); }); it("passes additional HTML attributes", () => { render( ); const btn = screen.getByTestId("custom-btn"); expect(btn).toHaveAttribute("id", "my-btn"); }); it("renders without children", () => { const { container } = render(); expect(screen.getByRole("button")).toHaveAttribute("type", "submit"); }); it("passes aria attributes", () => { render(); expect(screen.getByRole("button")).toHaveAttribute("aria-label", "Close"); }); });