import AvatarView from '../avatarView'; import { render, screen, mockMatchMedia } from '../test-utils'; import { userEvent } from '@testing-library/user-event'; import Radio from '.'; jest.mock('../common/hooks'); mockMatchMedia(); describe('Radio', () => { const props = { label: 'This is a label', name: 'name', onChange: jest.fn(), checked: false, disabled: false, secondary: '', }; it('shows the avatar when supplied', () => { render(} />); expect(screen.getByText('HD')).toBeInTheDocument(); }); it('displays the given label', () => { render(); expect(screen.getByText(props.label)).toBeInTheDocument(); }); it('passes radio button id', () => { render(); expect(screen.getByRole('radio')).toHaveAttribute('id', 'some-id'); }); it('passes radio button name', () => { render(); expect(screen.getByRole('radio')).toHaveAttribute('name', 'a-name'); }); it('handles checked state correctly', () => { render(); expect(screen.getByRole('radio')).toBeChecked(); }); it('handles unchecked state correctly', () => { render(); expect(screen.getByRole('radio')).not.toBeChecked(); }); it('handles disabled state correctly', () => { render(); expect(screen.getByRole('radio')).toBeDisabled(); }); it('displays secondary text when supplied', () => { render(); expect(screen.getByText('additional info')).toBeInTheDocument(); }); it('calls onChange when clicked', async () => { const onChange = jest.fn(); render(); await userEvent.click(screen.getByRole('radio')); expect(onChange).toHaveBeenCalled(); }); it('does not call onChange when disabled', async () => { const onChange = jest.fn(); render(); await userEvent.click(screen.getByRole('radio')); expect(onChange).not.toHaveBeenCalled(); }); });