import React from 'react'; import { render, screen, fireEvent } from '@testing-library/react'; import { Button } from '../Button'; describe('Button', () => { it('renders children correctly', () => { render(); expect(screen.getByText('Click me')).toBeInTheDocument(); }); it('applies primary variant by default', () => { render(); const button = screen.getByRole('button'); expect(button).toHaveClass('bg-primary'); }); it('applies secondary variant when specified', () => { render(); const button = screen.getByRole('button'); expect(button).toHaveClass('bg-secondary'); }); it('applies outline variant when specified', () => { render(); const button = screen.getByRole('button'); expect(button).toHaveClass('border-2'); expect(button).toHaveClass('border-primary'); }); it('applies danger variant when specified', () => { render(); const button = screen.getByRole('button'); expect(button).toHaveClass('bg-error'); }); it('applies small size correctly', () => { render(); const button = screen.getByRole('button'); expect(button).toHaveClass('px-3'); expect(button).toHaveClass('py-1.5'); }); it('applies large size correctly', () => { render(); const button = screen.getByRole('button'); expect(button).toHaveClass('px-6'); expect(button).toHaveClass('py-3'); }); it('applies full width when specified', () => { render(); const button = screen.getByRole('button'); expect(button).toHaveClass('w-full'); }); it('disables button when disabled prop is true', () => { render(); const button = screen.getByRole('button'); expect(button).toBeDisabled(); }); it('shows loading spinner when loading', () => { render(); const button = screen.getByRole('button'); expect(button).toBeDisabled(); expect(button.querySelector('svg')).toBeInTheDocument(); }); it('calls onClick when clicked', () => { const handleClick = jest.fn(); render(); const button = screen.getByRole('button'); fireEvent.click(button); expect(handleClick).toHaveBeenCalledTimes(1); }); it('does not call onClick when disabled', () => { const handleClick = jest.fn(); render( ); const button = screen.getByRole('button'); fireEvent.click(button); expect(handleClick).not.toHaveBeenCalled(); }); it('applies custom className', () => { render(); const button = screen.getByRole('button'); expect(button).toHaveClass('custom-class'); }); });