import React, { useState } from 'react'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { RadioGroup } from './'; import { RadioField } from '../RadioField'; import { FormField } from '../FormField'; describe('RadioGroup component', () => { describe('given default props', () => { describe('given no selected value', () => { it('has an array of `RadioField` components as children with inherited props and none is checked', async () => { const className = 'MyRadioGroup'; let currentValue; const Container = () => { const [value, setValue] = useState(''); currentValue = value; return ( setValue(e.target.value)} className={className} > ); }; render(); expect( screen.getByRole('radiogroup', { name: 'Frequency' }), ).toHaveClass(className); expect(screen.getByRole('radio', { name: 'Daily' })).not.toBeChecked(); expect(screen.getByRole('radio', { name: 'Weekly' })).not.toBeChecked(); expect(screen.getByRole('radio', { name: 'Yearly' })).not.toBeChecked(); await userEvent.click(screen.getByRole('radio', { name: 'Weekly' })); expect(screen.getByRole('radio', { name: 'Weekly' })).toBeChecked(); expect(screen.getByRole('radio', { name: 'Daily' })).not.toBeChecked(); expect(screen.getByRole('radio', { name: 'Yearly' })).not.toBeChecked(); await userEvent.click(screen.getByRole('radio', { name: 'Weekly' })); expect(screen.getByRole('radio', { name: 'Weekly' })).toBeChecked(); expect(currentValue).toBe('weekly'); }); }); describe('given a selected value', () => { it('has an array of `RadioField` components as children with inherited props and the second one is checked', async () => { const selectedValue = 'yearly'; const Container = () => { const [value, setValue] = useState(selectedValue); return ( setValue(e.target.value)} > ); }; render(); expect(screen.getByRole('radio', { name: 'Daily' })).not.toBeChecked(); expect(screen.getByRole('radio', { name: 'Weekly' })).not.toBeChecked(); expect(screen.getByRole('radio', { name: 'Yearly' })).toBeChecked(); await userEvent.click(screen.getByRole('radio', { name: 'Daily' })); expect(screen.getByRole('radio', { name: 'Daily' })).toBeChecked(); await userEvent.click(screen.getByRole('radio', { name: 'Weekly' })); expect(screen.getByRole('radio', { name: 'Daily' })).toBeChecked(); }); }); }); it('given a `direction` props displays the RadioInput in column', () => { render( , ); expect( screen.getByRole('radiogroup', { name: 'Frequency' }), ).toHaveAttribute('aria-orientation', 'vertical'); }); });