import { cleanup, fireEvent, render, screen } from "@testing-library/react";
import React from "react";
import { afterEach, describe, expect, it, vi } from "vitest";
import { Button } from "./button";
afterEach(cleanup);
describe("Button Component", () => {
    it("should render children correctly", () => {
        render(<Button>Click me</Button>);
        const button = screen.getByRole("button", { name: "Click me" });
        expect(button).toBeTruthy();
    });
    it("should have type='submit' by default", () => {
        render(<Button>Submit</Button>);
        const button = screen.getByRole("button");
        expect(button.type).toBe("submit");
    });
    it("should respect the type prop", () => {
        render(<Button type="button">Action</Button>);
        const button = screen.getByRole("button");
        expect(button.type).toBe("button");
    });
    it("should be disabled when disabled prop is true", () => {
        render(<Button disabled>Disabled</Button>);
        const button = screen.getByRole("button");
        expect(button.disabled).toBe(true);
    });
    it("should be disabled and show loading state when loading prop is true", () => {
        render(<Button loading>Loading</Button>);
        const button = screen.getByRole("button");
        expect(button.disabled).toBe(true);
        // Assuming Pulse component renders something recognizable or we just check text content
        // The text "Loading" should still be there
        expect(screen.getByText("Loading")).toBeTruthy();
    });
    it("should call onClick handler when clicked", () => {
        const handleClick = vi.fn();
        render(<Button onClick={handleClick}>Click</Button>);
        const button = screen.getByRole("button");
        fireEvent.click(button);
        expect(handleClick).toHaveBeenCalledTimes(1);
    });
    it("should not call onClick handler when disabled", () => {
        const handleClick = vi.fn();
        render(<Button disabled onClick={handleClick}>Click</Button>);
        const button = screen.getByRole("button");
        fireEvent.click(button);
        expect(handleClick).toHaveBeenCalledTimes(0);
    });
    it("should not call onClick handler when loading", () => {
        const handleClick = vi.fn();
        render(<Button loading onClick={handleClick}>Click</Button>);
        const button = screen.getByRole("button");
        fireEvent.click(button);
        expect(handleClick).toHaveBeenCalledTimes(0);
    });
});
