/**
* 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');
});
});