import { describe, it, expect, 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 with default variant', () => { render() const button = screen.getByRole('button', { name: 'Click me' }) expect(button).toBeInTheDocument() }) it('renders as disabled', () => { render() const button = screen.getByRole('button', { name: 'Disabled' }) expect(button).toBeDisabled() }) it('handles click events', async () => { const user = userEvent.setup() const onClick = vi.fn() render() await user.click(screen.getByRole('button')) expect(onClick).toHaveBeenCalledTimes(1) }) it('does not fire click when disabled', async () => { const user = userEvent.setup() const onClick = vi.fn() render() await user.click(screen.getByRole('button')) expect(onClick).not.toHaveBeenCalled() }) it('renders with destructive variant', () => { render() const button = screen.getByRole('button', { name: 'Delete' }) expect(button.className).toContain('bg-destructive') }) it('renders with outline variant', () => { render() const button = screen.getByRole('button', { name: 'Outline' }) expect(button.className).toContain('border') }) it('renders with different sizes', () => { const { rerender } = render() expect(screen.getByRole('button').className).toContain('h-9') rerender() expect(screen.getByRole('button').className).toContain('h-11') }) it('renders as child with asChild prop', () => { render( ) const link = screen.getByRole('link', { name: 'Link' }) expect(link).toBeInTheDocument() expect(link.tagName).toBe('A') }) it('applies custom className', () => { render() expect(screen.getByRole('button').className).toContain('custom-class') }) })