import { DensityProvider } from "$lib/density-context";
import { cleanup, fireEvent, render, screen } from "@solidjs/testing-library";
import { afterEach, describe, expect, it, vi } from "vitest";
import { Button } from "../Button";
describe("Button", () => {
afterEach(cleanup);
it("renders with default props", () => {
render(() => );
const button = screen.getByRole("button", { name: /click me/i });
expect(button).toBeInTheDocument();
});
it("renders with correct variant", () => {
render(() => );
const button = screen.getByRole("button", { name: /secondary/i });
expect(button).toHaveClass("bg-gray-800");
});
it("renders with correct size", () => {
render(() => );
const button = screen.getByRole("button", { name: /large/i });
expect(button).toHaveClass("px-6 py-3");
});
it("handles click events", () => {
const handleClick = vi.fn();
render(() => );
const button = screen.getByRole("button", { name: /click me/i });
fireEvent.click(button);
expect(handleClick).toHaveBeenCalled();
});
describe("density support", () => {
it("renders with density prop", () => {
render(() => );
const button = screen.getByRole("button", { name: /button/i });
expect(button).toBeInTheDocument();
});
it("renders within DensityProvider", () => {
render(() => (
));
const button = screen.getByRole("button", { name: /button/i });
expect(button).toBeInTheDocument();
});
it("accepts all density modes", () => {
const { unmount } = render(() => );
expect(screen.getByRole("button")).toBeInTheDocument();
unmount();
render(() => );
expect(screen.getByRole("button")).toBeInTheDocument();
});
});
});