/** * @jest-environment jsdom */ import * as React from 'react'; import 'jest-canvas-mock'; import { fireEvent, render, screen } from '@testing-library/react'; import { RadioButtons, InputOption } from '../../../src/ts'; describe('Radio Buttons', () => { const options = ['Red', 'Green', 'Blue'].map(function (e) { return new InputOption(e, e); }); test('Default selection', () => { const { container } = render( ); expect( container.querySelector('input:checked').getAttribute('value') ).toBe('Green'); }); test('No default', () => { const { container } = render( ); expect( container.querySelector('input:checked').getAttribute('value') ).toBe('Red'); }); test('No options', () => { global.console = { ...global.console, warn: jest.fn() }; render(); expect(console.warn).toBeCalledWith( 'RadioButtons: No options are available.' ); }); test('Selection', () => { const selectionHandler = jest.fn(); render( ); const blueRadio = screen.getByRole('radio', { name: 'Blue', }) as HTMLInputElement; const redRadio = screen.getByRole('radio', { name: 'Red', }) as HTMLInputElement; expect(blueRadio.checked).toEqual(false); expect(redRadio.checked).toEqual(false); fireEvent.click(blueRadio); expect(blueRadio.checked).toEqual(true); expect(selectionHandler).toHaveBeenCalled(); fireEvent.click(redRadio); expect(blueRadio.checked).toEqual(false); expect(redRadio.checked).toEqual(true); }); });