import { Spinner } from "./index";
import { render, screen } from "@testing-library/react";
describe("Spinner", () => {
it("renders with role status", () => {
render();
expect(screen.getByRole("status")).toBeInTheDocument();
});
it("renders a screen-reader-only loading text", () => {
render();
expect(screen.getByText("Loading...")).toBeInTheDocument();
});
it("applies medium size class by default", () => {
const { container } = render();
const svg = container.querySelector("svg");
const classes = svg?.getAttribute("class") || "";
expect(classes).toContain("w-6");
expect(classes).toContain("h-6");
});
it("applies small size class", () => {
const { container } = render();
const svg = container.querySelector("svg");
const classes = svg?.getAttribute("class") || "";
expect(classes).toContain("w-4");
expect(classes).toContain("h-4");
});
it("applies large size class", () => {
const { container } = render();
const svg = container.querySelector("svg");
const classes = svg?.getAttribute("class") || "";
expect(classes).toContain("w-8");
expect(classes).toContain("h-8");
});
it("applies xlarge size class", () => {
const { container } = render();
const svg = container.querySelector("svg");
const classes = svg?.getAttribute("class") || "";
expect(classes).toContain("w-12");
expect(classes).toContain("h-12");
});
it("uses white as default color", () => {
const { container } = render();
const svg = container.querySelector("svg");
expect(svg).toHaveAttribute("fill", "#fff");
});
it("uses custom color when provided", () => {
const { container } = render();
const svg = container.querySelector("svg");
expect(svg).toHaveAttribute("fill", "#ff0000");
});
it("applies custom className to the svg", () => {
const { container } = render();
const svg = container.querySelector("svg");
const classes = svg?.getAttribute("class") || "";
expect(classes).toContain("custom-spinner");
});
it("svg has aria-hidden true", () => {
const { container } = render();
const svg = container.querySelector("svg");
expect(svg).toHaveAttribute("aria-hidden", "true");
});
it("has the correct displayName", () => {
expect(Spinner.displayName).toBe("Spinner");
});
});