import { fireEvent, queryByAttribute } from '@testing-library/react' import pick from 'lodash/pick' import * as React from 'react' import renderWithTheme from '../../tests/helpers/renderWithTheme' import RadioButtonField from './RadioButtonField' describe('component: RadioButtonField', () => { test('should generate a unique id when none is provided', () => { const { container, getByText } = renderWithTheme( ) const getById = queryByAttribute.bind(null, 'id') const labelElement = getByText('Find This') as HTMLLabelElement expect(labelElement.htmlFor).toContain('field_name') expect(getById(container, labelElement.htmlFor)).not.toBeNull() }) test('should trigger onChange event', () => { const box: any = {} const onChange = jest.fn((e) => Object.assign(box, pick(e.target, ['name', 'value']))) const { getByLabelText } = renderWithTheme( ) fireEvent.click(getByLabelText('Levi')) expect(onChange).toHaveBeenCalledTimes(1) expect(box).toEqual({ name: 'rbf', value: 'on' }) }) test('should trigger onFocus event', () => { const onFocus = jest.fn() const { getByLabelText } = renderWithTheme( ) fireEvent.focus(getByLabelText('Eren')) expect(onFocus).toHaveBeenCalled() }) test('should trigger onBlur event', () => { const onBlur = jest.fn() const { getByLabelText } = renderWithTheme( ) fireEvent.blur(getByLabelText('Aegon')) expect(onBlur).toHaveBeenCalled() }) test('should support margin space props', () => { const { getByTestId } = renderWithTheme( <> ) const blank = { marginTop: '', marginRight: '', marginBottom: '', marginLeft: '' } expect(getByTestId('first').parentElement?.parentElement).toHaveStyle(blank) expect(getByTestId('default').parentElement?.parentElement).toHaveStyle({ ...blank, marginTop: '8px', marginBottom: '4px', }) expect(getByTestId('override').parentElement?.parentElement).toHaveStyle({ ...blank, marginTop: '16px', }) }) test('should support flex item props', () => { const { getByTestId } = renderWithTheme( ) const radioField = getByTestId('flex-rbf').parentElement?.parentElement expect(radioField).toHaveStyle('flex: 1') expect(radioField).toHaveStyle('flex-grow: 1') expect(radioField).toHaveStyle('flex-shrink: 0') expect(radioField).toHaveStyle('flex-basis: 0') }) test('should support ref prop', () => { const ref = React.createRef() const { getByLabelText } = renderWithTheme( ) expect(getByLabelText('Oui')).toBe(ref.current) expect(ref.current).toBeChecked() }) })