// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import '@testing-library/jest-dom'; import { fireEvent } from '@testing-library/dom'; import React from 'react'; import RadioGroup from '../../../../src/components/ui/RadioGroup'; import lightTheme from '../../../../src/theme/light'; import { renderWithTheme } from '../../../test-helpers'; describe('RadioGroup', () => { let mockFunction: any; const value = 'bananas'; const options = [ { value: 'bananas', label: 'Bananas', }, { value: 'oranges', label: 'Oranges', }, { value: 'grapefruit', label: 'Grapefruit', }, ]; beforeEach(() => { mockFunction = jest.fn(); }); it('should render a RadioGroup with 3 options', () => { const component = ( ); const { getAllByTestId } = renderWithTheme(lightTheme, component); const radios = getAllByTestId('styled-radio'); expect(radios).toHaveLength(3); }); it('should render a RadioGroup with 1st radio button checked only', () => { const component = ( ); const { getAllByTestId } = renderWithTheme(lightTheme, component); const radiobuttons = getAllByTestId('hidden-radio'); expect(radiobuttons[0]).toHaveAttribute('checked'); expect(radiobuttons[1]).not.toHaveAttribute('checked'); expect(radiobuttons[2]).not.toHaveAttribute('checked'); }); it('should call onChange event handler once if switch radio', () => { const component = ( ); const { getByText } = renderWithTheme(lightTheme, component); const radio = getByText('Oranges'); fireEvent.click(radio); expect(mockFunction).toHaveBeenCalledTimes(1); }); it('should become focused if selects the Radio', () => { const component = ( ); const { getAllByTestId } = renderWithTheme(lightTheme, component); const styledRadios = getAllByTestId('styled-radio'); const hiddenRadios = getAllByTestId('hidden-radio'); fireEvent.click(styledRadios[1]); expect(hiddenRadios[1]).toHaveFocus(); }); });