import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { TextInput, TextInputBase } from '../TextInput'; import { ValidatedOptions } from '../../../helpers/constants'; import * as ReactCoreUtils from '../../../helpers/util'; const props = { onChange: jest.fn(), value: 'test input' }; describe('TextInput', () => { test('input passes value and event to onChange handler', async () => { const user = userEvent.setup(); render(); await user.type(screen.getByLabelText('test input'), 'a'); expect(props.onChange).toHaveBeenCalledWith(expect.any(Object), 'a'); }); test('simple text input', () => { const { asFragment } = render(); expect(asFragment()).toMatchSnapshot(); }); test('disabled text input', () => { const { asFragment } = render(); expect(asFragment()).toMatchSnapshot(); }); test('read only text input using isReadOnly', () => { const { asFragment } = render( ); expect(asFragment()).toMatchSnapshot(); }); test('default read only text input', () => { const { asFragment } = render( ); expect(asFragment()).toMatchSnapshot(); }); test('plain read only text input', () => { const { asFragment } = render( ); expect(asFragment()).toMatchSnapshot(); }); test('invalid text input', () => { const { asFragment } = render( ); expect(asFragment()).toMatchSnapshot(); }); test('validated text input success', () => { render(); expect(screen.getByLabelText('validated text input').parentElement).toHaveClass('pf-m-success'); }); test('validated text input warning', () => { render(); expect(screen.getByLabelText('validated text input').parentElement).toHaveClass('pf-m-warning'); }); test('validated text input error', () => { const { asFragment } = render( ); expect(asFragment()).toMatchSnapshot(); }); test('should throw console error when no aria-label, id or aria-labelledby is given', () => { const myMock = jest.fn(); global.console = { ...global.console, error: myMock }; render(); expect(myMock).toHaveBeenCalled(); }); test('should not throw console error when id is given but no aria-label or aria-labelledby', () => { const myMock = jest.fn(); global.console = { ...global.console, error: myMock }; render(); expect(myMock).not.toHaveBeenCalled(); }); test('should not throw console error when aria-label is given but no id or aria-labelledby', () => { const myMock = jest.fn(); global.console = { ...global.console, error: myMock }; render(); expect(myMock).not.toHaveBeenCalled(); }); test('should not throw console error when aria-labelledby is given but no id or aria-label', () => { const myMock = jest.fn(); global.console = { ...global.console, error: myMock }; render(); expect(myMock).not.toHaveBeenCalled(); }); test('trimLeft is called when isStartTruncated is true', async () => { const trimLeftFn = jest.spyOn(ReactCoreUtils, 'trimLeft').mockImplementation(); render(); expect(trimLeftFn).toHaveBeenCalled(); }); test('trimLeft is called when isLeftTruncated is true', async () => { const trimLeftFn = jest.spyOn(ReactCoreUtils, 'trimLeft').mockImplementation(); render(); expect(trimLeftFn).toHaveBeenCalled(); }); test('has aria-expanded set to true when ariaProps.isExpanded is true', () => { render(); const input = screen.getByLabelText('isExpanded'); expect(input).toHaveAttribute('aria-expanded', 'true'); expect(input).toHaveAttribute('role', 'combobox'); expect(input).toHaveAttribute('aria-controls', 'test'); }); });