import { render, screen, fireEvent } from '@testing-library/react' import { Button } from '../button' describe('Button Component', () => { it('renders correctly with default props', () => { render() const button = screen.getByRole('button', { name: /click me/i }) expect(button).toBeInTheDocument() expect(button).toHaveClass('bg-primary') }) it('renders different variants correctly', () => { const { rerender } = render() expect(screen.getByRole('button')).toHaveClass('bg-secondary') expect(screen.getByRole('button')).toHaveClass('text-secondary-foreground') rerender() expect(screen.getByRole('button')).toHaveClass('bg-background') expect(screen.getByRole('button')).toHaveClass('text-foreground') rerender() expect(screen.getByRole('button')).toHaveClass('text-foreground') rerender() expect(screen.getByRole('button')).toHaveClass('text-primary') expect(screen.getByRole('button')).toHaveClass('underline-offset-4') }) it('renders different sizes correctly', () => { const { rerender } = render() expect(screen.getByRole('button')).toHaveClass('h-8') expect(screen.getByRole('button')).toHaveClass('px-3') expect(screen.getByRole('button')).toHaveClass('text-sm') rerender() expect(screen.getByRole('button')).toHaveClass('h-12') expect(screen.getByRole('button')).toHaveClass('px-6') expect(screen.getByRole('button')).toHaveClass('text-lg') rerender() const button = screen.getByRole('button') expect(button).toHaveClass('h-10') expect(button).toHaveClass('w-10') }) it('handles disabled state correctly', () => { render() const button = screen.getByRole('button') expect(button).toBeDisabled() expect(button).toHaveClass('disabled:pointer-events-none') }) it('handles click events', () => { const handleClick = jest.fn() render() fireEvent.click(screen.getByRole('button')) expect(handleClick).toHaveBeenCalledTimes(1) }) it('does not trigger click when disabled', () => { const handleClick = jest.fn() render() fireEvent.click(screen.getByRole('button')) expect(handleClick).not.toHaveBeenCalled() }) it('renders as child component when asChild is true', () => { render( ) const link = screen.getByRole('link') expect(link).toBeInTheDocument() expect(link).toHaveAttribute('href', '/test') }) it('applies custom className', () => { render() expect(screen.getByRole('button')).toHaveClass('custom-class') }) it('forwards ref correctly', () => { const ref = jest.fn() render() expect(ref).toHaveBeenCalled() }) })