import { describe, expect, it, vi } from 'vitest';
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { Button } from './button';
describe('Button', () => {
it('renders as a button element by default', () => {
render();
expect(screen.getByRole('button', { name: 'Save' })).toBeInTheDocument();
});
it('calls onClick when pressed', async () => {
const onClick = vi.fn();
render();
await userEvent.click(screen.getByRole('button', { name: 'Save' }));
expect(onClick).toHaveBeenCalledOnce();
});
it('does not fire onClick while disabled', async () => {
const onClick = vi.fn();
render(
);
await userEvent.click(screen.getByRole('button', { name: 'Save' }));
expect(onClick).not.toHaveBeenCalled();
});
it('renders the child element when asChild is set', () => {
render(
);
const link = screen.getByRole('link', { name: 'Docs' });
expect(link).toHaveAttribute('href', '/docs');
expect(screen.queryByRole('button')).not.toBeInTheDocument();
});
it('lets a consumer className override a built-in utility', () => {
render();
// tailwind-merge should drop `bg-primary` in favour of the passed class.
expect(screen.getByRole('button')).toHaveClass('bg-red-500');
expect(screen.getByRole('button')).not.toHaveClass('bg-primary');
});
});