import { Field } from '../field/Field'; import { render, userEvent, fireEvent, screen } from '../test-utils'; import Switch from './Switch'; const props = { 'aria-label': 'a label', checked: true, className: 'a-class-name', id: 'id', onClick: jest.fn(), }; describe('Switch', () => { it('renders component when checked', () => { const { container } = render( , ); expect(screen.getByRole('switch')).toBeChecked(); }); it('renders component associated with label', () => { render( <> , , ); expect(screen.getByLabelText('A switch with a label')).toBeInTheDocument(); }); it('renders component when unchecked', () => { const { container } = render( , ); expect(screen.getByLabelText(props['aria-label'])).not.toBeChecked(); }); it('calls onClick when user press space or enter key', async () => { render( , ); expect(props.onClick).not.toHaveBeenCalled(); await userEvent.tab(); await userEvent.keyboard(' '); expect(props.onClick).toHaveBeenCalledTimes(1); await userEvent.keyboard('{Enter}'); expect(props.onClick).toHaveBeenCalledTimes(2); }); it('should not call onClick if disabled', () => { const mockCallback = jest.fn(); render(); const input = screen.getByRole('switch'); fireEvent.click(input); expect(mockCallback).not.toHaveBeenCalled(); }); it('supports `Field` for labeling', () => { render( , ); expect(screen.getByLabelText(/Dark mode/)).toHaveAttribute('role', 'switch'); }); });