import { render, screen, fireEvent } from '@testing-library/react'; import '@testing-library/jest-dom'; const MockRippleButton = ({ children, onClick, disabled, variant, size }: { children: React.ReactNode; onClick?: () => void; disabled?: boolean; variant?: string; size?: string; }) => { return ( ); }; jest.mock('framer-motion', () => ({ motion: { div: ({ children, onClick }: { children: React.ReactNode; onClick?: () => void }) => (
{children}
), }, AnimatePresence: ({ children }: { children: React.ReactNode }) => <>{children}, })); describe('RippleButton', () => { beforeEach(() => { jest.clearAllMocks(); }); describe('Rendering', () => { it('should render button', () => { render(Click me); const button = screen.getByRole('button', { name: /click me/i }); expect(button).toBeInTheDocument(); }); it('should render children', () => { render(Test Button); expect(screen.getByText('Test Button')).toBeInTheDocument(); }); it('should apply variant classes', () => { render(Secondary); const button = screen.getByRole('button'); expect(button).toHaveClass('secondary'); }); it('should apply size classes', () => { render(Large); const button = screen.getByRole('button'); expect(button).toHaveClass('lg'); }); }); describe('Functionality', () => { it('should handle click events', () => { const handleClick = jest.fn(); render(Click me); const button = screen.getByRole('button'); fireEvent.click(button); expect(handleClick).toHaveBeenCalled(); }); it('should be disabled when disabled prop is true', () => { render(Disabled); const button = screen.getByRole('button'); expect(button).toBeDisabled(); }); }); describe('Accessibility', () => { it('should be focusable', () => { render(Focus me); const button = screen.getByRole('button'); expect(button).not.toHaveAttribute('tabindex', '-1'); }); }); });