/** * Tests for SelectableCard component */ import { render, screen, fireEvent } from '@testing-library/react'; import { SelectableCard } from '@/components/projects/wizard/SelectableCard'; describe('SelectableCard', () => { const defaultProps = { selected: false, onClick: jest.fn(), children: Card Content, }; beforeEach(() => { jest.clearAllMocks(); }); it('renders children', () => { render(); expect(screen.getByText('Card Content')).toBeInTheDocument(); }); it('calls onClick when clicked', () => { render(); fireEvent.click(screen.getByRole('button')); expect(defaultProps.onClick).toHaveBeenCalledTimes(1); }); it('has aria-pressed false when not selected', () => { render(); expect(screen.getByRole('button')).toHaveAttribute('aria-pressed', 'false'); }); it('has aria-pressed true when selected', () => { render(); expect(screen.getByRole('button')).toHaveAttribute('aria-pressed', 'true'); }); it('applies custom aria-label', () => { render(); expect(screen.getByRole('button')).toHaveAttribute('aria-label', 'Select option A'); }); it('applies custom className', () => { render(); expect(screen.getByRole('button')).toHaveClass('my-custom-class'); }); it('applies selected styles when selected', () => { const { rerender } = render(); const button = screen.getByRole('button'); expect(button).toHaveClass('border-border'); expect(button).not.toHaveClass('border-primary'); rerender(); expect(button).toHaveClass('border-primary'); }); });