diff --git a/package.json b/package.json index 7ff43319e43..6066f2dfb0a 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "@octokit/rest": "^16.43.2", "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^12.1.5", - "@testing-library/user-event": "^13.5.0", + "@testing-library/user-event": "14.4.3", "@types/jest": "27.0.2", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", diff --git a/packages/react-catalog-view-extension/src/components/CatalogTile/CatalogTile.test.tsx b/packages/react-catalog-view-extension/src/components/CatalogTile/CatalogTile.test.tsx index 97fed602682..6906fd8eb23 100644 --- a/packages/react-catalog-view-extension/src/components/CatalogTile/CatalogTile.test.tsx +++ b/packages/react-catalog-view-extension/src/components/CatalogTile/CatalogTile.test.tsx @@ -104,8 +104,9 @@ test('CatalogTile href renders properly', () => { expect(asFragment()).toMatchSnapshot(); }); -test('CatalogTile onClick behaves properly', () => { +test('CatalogTile onClick behaves properly', async () => { const onClickMock = jest.fn(); + const user = userEvent.setup(); render( { /> ); - userEvent.click(screen.getByText('Patternfly')); + await user.click(screen.getByText('Patternfly')); expect(onClickMock).toHaveBeenCalled(); }); diff --git a/packages/react-catalog-view-extension/src/components/VerticalTabs/VerticalTabs.test.tsx b/packages/react-catalog-view-extension/src/components/VerticalTabs/VerticalTabs.test.tsx index 4a2d6f94661..3f5da413d11 100644 --- a/packages/react-catalog-view-extension/src/components/VerticalTabs/VerticalTabs.test.tsx +++ b/packages/react-catalog-view-extension/src/components/VerticalTabs/VerticalTabs.test.tsx @@ -84,11 +84,12 @@ test('Vertical Tabs renders restricted tabs properly', () => { expect(component.container).toMatchSnapshot(); }); -test('Vertical Tabs Tab onActivate is called correctly', () => { +test('Vertical Tabs Tab onActivate is called correctly', async () => { const onActivateMock = jest.fn(); + const user = userEvent.setup(); const component = render(); - userEvent.click(screen.getByText('Click Me')); + await user.click(screen.getByText('Click Me')); expect(component.container).toMatchSnapshot(); expect(onActivateMock).toHaveBeenCalled(); diff --git a/packages/react-console/src/components/AccessConsoles/__tests__/AccessConsoles.test.tsx b/packages/react-console/src/components/AccessConsoles/__tests__/AccessConsoles.test.tsx index 6207f69d4fb..c51ea51ac91 100644 --- a/packages/react-console/src/components/AccessConsoles/__tests__/AccessConsoles.test.tsx +++ b/packages/react-console/src/components/AccessConsoles/__tests__/AccessConsoles.test.tsx @@ -72,7 +72,9 @@ describe('AccessConsoles', () => { expect(asFragment()).toMatchSnapshot(); }); - test('switching SerialConsole and VncConsole', () => { + test('switching SerialConsole and VncConsole', async () => { + const user = userEvent.setup(); + render( @@ -85,8 +87,8 @@ describe('AccessConsoles', () => { expect(screen.getByText('VNC console text')).toBeInTheDocument(); // Open dropdown and select "Serial console" option - userEvent.click(screen.getByRole('button', { name: 'Options menu' })); - userEvent.click(screen.getByText('Serial console', { selector: 'button' })); + await user.click(screen.getByRole('button', { name: 'Options menu' })); + await user.click(screen.getByText('Serial console', { selector: 'button' })); // VNC content is no longer visible, and loading contents of the Serial console are visible. expect(screen.getByText(/Loading/)).toBeInTheDocument(); diff --git a/packages/react-console/src/components/DesktopViewer/__tests__/DesktopViewer.test.tsx b/packages/react-console/src/components/DesktopViewer/__tests__/DesktopViewer.test.tsx index 8c6cb469dc7..30315053582 100644 --- a/packages/react-console/src/components/DesktopViewer/__tests__/DesktopViewer.test.tsx +++ b/packages/react-console/src/components/DesktopViewer/__tests__/DesktopViewer.test.tsx @@ -52,29 +52,33 @@ describe('DesktopViewer', () => { expect(asFragment()).toMatchSnapshot(); }); - test('launch button', () => { + test('launch button', async () => { const onDownload = jest.fn(); const onGenerate = jest.fn().mockReturnValue({ content: 'Foo' }); + const user = userEvent.setup(); render(); - userEvent.click(screen.getByRole('button', { name: 'Launch Remote Viewer' })); + await user.click(screen.getByRole('button', { name: 'Launch Remote Viewer' })); expect(onGenerate).toHaveBeenCalledTimes(1); expect(onDownload).toHaveBeenCalledTimes(1); }); - test('RDP launch button', () => { + test('RDP launch button', async () => { const onDownload = jest.fn(); const onGenerate = jest.fn().mockReturnValue({ content: 'Foo' }); + const user = userEvent.setup(); render(); - userEvent.click(screen.getByRole('button', { name: 'Launch Remote Desktop' })); + await user.click(screen.getByRole('button', { name: 'Launch Remote Desktop' })); expect(onGenerate).toHaveBeenCalledTimes(1); expect(onDownload).toHaveBeenCalledTimes(1); }); - test('with custom more-info content', () => { + test('with custom more-info content', async () => { + const user = userEvent.setup(); + render(

My more-info content

@@ -83,7 +87,7 @@ describe('DesktopViewer', () => { expect(screen.queryByText('My more-info content')).toBeNull(); - userEvent.click(screen.getByRole('button', { name: 'Remote Viewer Details' })); + await user.click(screen.getByRole('button', { name: 'Remote Viewer Details' })); // If one of the items is shown in the description list, the rest will be in the document as well. expect(screen.getByText('RHEL, CentOS')).toBeInTheDocument(); }); diff --git a/packages/react-console/src/components/VncConsole/__tests__/VncActions.test.tsx b/packages/react-console/src/components/VncConsole/__tests__/VncActions.test.tsx index a6d0a8adc40..5ccd1a173ae 100644 --- a/packages/react-console/src/components/VncConsole/__tests__/VncActions.test.tsx +++ b/packages/react-console/src/components/VncConsole/__tests__/VncActions.test.tsx @@ -35,8 +35,9 @@ describe('VncActions', () => { expect(asFragment()).toMatchSnapshot(); }); - test('VncActions calls ctrl+alt+del action', () => { + test('VncActions calls ctrl+alt+del action', async () => { const onCtrlAltDel = jest.fn(); + const user = userEvent.setup(); render( { /> ); - userEvent.click(screen.getByRole('button', { name: 'My Send Shortcut description' })); - userEvent.click(screen.getByText('CtrlAltDel')); + await user.click(screen.getByRole('button', { name: 'My Send Shortcut description' })); + await user.click(screen.getByText('CtrlAltDel')); expect(onCtrlAltDel).toHaveBeenCalledTimes(1); }); diff --git a/packages/react-core/src/components/AboutModal/AboutModal.tsx b/packages/react-core/src/components/AboutModal/AboutModal.tsx index 25e3b5b8638..ab107bea736 100644 --- a/packages/react-core/src/components/AboutModal/AboutModal.tsx +++ b/packages/react-core/src/components/AboutModal/AboutModal.tsx @@ -3,7 +3,7 @@ import * as ReactDOM from 'react-dom'; import { css } from '@patternfly/react-styles'; import styles from '@patternfly/react-styles/css/components/Backdrop/backdrop'; import { canUseDOM } from '../../helpers'; -import { KEY_CODES } from '../../helpers/constants'; +import { KeyTypes } from '../../helpers/constants'; import { AboutModalContainer } from './AboutModalContainer'; import { PickOptional } from '../../helpers/typeUtils'; @@ -71,7 +71,7 @@ export class AboutModal extends React.Component { } handleEscKeyClick = (event: KeyboardEvent) => { - if (event.keyCode === KEY_CODES.ESCAPE_KEY && this.props.isOpen) { + if (event.key === KeyTypes.Escape && this.props.isOpen) { this.props.onClose(); } }; diff --git a/packages/react-core/src/components/AboutModal/__tests__/AboutModal.test.tsx b/packages/react-core/src/components/AboutModal/__tests__/AboutModal.test.tsx index 6f03b9422b5..9156d923f9e 100644 --- a/packages/react-core/src/components/AboutModal/__tests__/AboutModal.test.tsx +++ b/packages/react-core/src/components/AboutModal/__tests__/AboutModal.test.tsx @@ -4,6 +4,7 @@ import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { AboutModal, AboutModalProps } from '../AboutModal'; +import { KeyTypes } from '../../../helpers'; const props: AboutModalProps = { onClose: jest.fn(), @@ -15,10 +16,12 @@ const props: AboutModalProps = { }; describe('AboutModal', () => { - test('closes with escape', () => { + test('closes with escape', async () => { + const user = userEvent.setup(); + render(); - userEvent.type(screen.getByRole('dialog'), '{esc}'); + await user.type(screen.getByRole('dialog'), `{${KeyTypes.Escape}}`); expect(props.onClose).toHaveBeenCalled(); }); diff --git a/packages/react-core/src/components/Alert/__tests__/Alert.test.tsx b/packages/react-core/src/components/Alert/__tests__/Alert.test.tsx index 006095e89b0..21fff0c47d1 100644 --- a/packages/react-core/src/components/Alert/__tests__/Alert.test.tsx +++ b/packages/react-core/src/components/Alert/__tests__/Alert.test.tsx @@ -52,8 +52,9 @@ describe('Alert', () => { expect(asFragment()).toMatchSnapshot(); }); - test('Action Close Button', () => { + test('Action Close Button', async () => { const onClose = jest.fn(); + const user = userEvent.setup(); render( { ); - userEvent.click(screen.getByLabelText('Close')); + await user.click(screen.getByLabelText('Close')); expect(onClose).toHaveBeenCalled(); }); diff --git a/packages/react-core/src/components/AlertGroup/__tests__/AlertGroup.test.tsx b/packages/react-core/src/components/AlertGroup/__tests__/AlertGroup.test.tsx index d34d82d8381..89e54553919 100644 --- a/packages/react-core/src/components/AlertGroup/__tests__/AlertGroup.test.tsx +++ b/packages/react-core/src/components/AlertGroup/__tests__/AlertGroup.test.tsx @@ -23,9 +23,10 @@ describe('AlertGroup', () => { expect(asFragment()).toBeTruthy(); }); - test('Alert group overflow shows up', () => { + test('Alert group overflow shows up', async () => { const overflowMessage = 'View 2 more alerts'; const onOverflowClick = jest.fn(); + const user = userEvent.setup(); render( @@ -38,7 +39,7 @@ describe('AlertGroup', () => { const overflowButton = screen.getByRole('button', { name: 'View 2 more alerts' }); expect(overflowButton).toBeInTheDocument(); - userEvent.click(overflowButton); + await user.click(overflowButton); expect(onOverflowClick).toHaveBeenCalled(); }); @@ -62,8 +63,9 @@ describe('AlertGroup', () => { expect(screen.getByLabelText('group label')).toHaveClass('pf-m-toast'); }); - test('alertgroup closes when alerts are closed', () => { + test('alertgroup closes when alerts are closed', async () => { const onClose = jest.fn(); + const user = userEvent.setup(); render( @@ -75,7 +77,7 @@ describe('AlertGroup', () => { ); - userEvent.click(screen.getByLabelText('Close')); + await user.click(screen.getByLabelText('Close')); expect(onClose).toHaveBeenCalled(); }); }); diff --git a/packages/react-core/src/components/Card/examples/CardLegacySelectable.tsx b/packages/react-core/src/components/Card/examples/CardLegacySelectable.tsx index 32e9e5ac0d3..024856dc7cb 100644 --- a/packages/react-core/src/components/Card/examples/CardLegacySelectable.tsx +++ b/packages/react-core/src/components/Card/examples/CardLegacySelectable.tsx @@ -19,7 +19,7 @@ export const CardLegacySelectable: React.FunctionComponent = () => { if (event.target !== event.currentTarget) { return; } - if ([13, 32].includes(event.keyCode)) { + if (['Enter', ' '].includes(event.key)) { event.preventDefault(); const newSelected = event.currentTarget.id === selected ? null : event.currentTarget.id; setSelected(newSelected); diff --git a/packages/react-core/src/components/Checkbox/__tests__/Checkbox.test.tsx b/packages/react-core/src/components/Checkbox/__tests__/Checkbox.test.tsx index 8a8060c5aa0..e89c3a7b284 100644 --- a/packages/react-core/src/components/Checkbox/__tests__/Checkbox.test.tsx +++ b/packages/react-core/src/components/Checkbox/__tests__/Checkbox.test.tsx @@ -67,11 +67,13 @@ describe('Checkbox', () => { expect(screen.getByText('This is where custom content goes.')).toBeInTheDocument(); }); - test('checkbox onChange handler called when component is clicked', () => { + test('checkbox onChange handler called when component is clicked', async () => { const onChangeHandler = jest.fn(); + const user = userEvent.setup(); + render(); - userEvent.click(screen.getByLabelText('check')); + await user.click(screen.getByLabelText('check')); expect(onChangeHandler).toHaveBeenCalled(); }); diff --git a/packages/react-core/src/components/ChipGroup/__tests__/ChipGroup.test.tsx b/packages/react-core/src/components/ChipGroup/__tests__/ChipGroup.test.tsx index 8c69c75e61d..69055dcc3ef 100644 --- a/packages/react-core/src/components/ChipGroup/__tests__/ChipGroup.test.tsx +++ b/packages/react-core/src/components/ChipGroup/__tests__/ChipGroup.test.tsx @@ -35,7 +35,9 @@ describe('ChipGroup', () => { expect(asFragment()).toMatchSnapshot(); }); - test('chip group expanded', () => { + test('chip group expanded', async () => { + const user = userEvent.setup(); + render( 1 @@ -48,7 +50,7 @@ describe('ChipGroup', () => { const moreText = screen.getByText('1 more'); expect(moreText).toBeInTheDocument(); - userEvent.click(moreText); + await user.click(moreText); expect(screen.getByText('Show Less')).toBeInTheDocument(); }); diff --git a/packages/react-core/src/components/ClipboardCopy/__tests__/ClipboardCopyButton.test.tsx b/packages/react-core/src/components/ClipboardCopy/__tests__/ClipboardCopyButton.test.tsx index 805d57c0d85..c87ccb90f51 100644 --- a/packages/react-core/src/components/ClipboardCopy/__tests__/ClipboardCopyButton.test.tsx +++ b/packages/react-core/src/components/ClipboardCopy/__tests__/ClipboardCopyButton.test.tsx @@ -22,14 +22,16 @@ test('copy button render', () => { expect(asFragment()).toMatchSnapshot(); }); -test('copy button onClick', () => { +test('copy button onClick', async () => { const onclick = jest.fn(); + const user = userEvent.setup(); + render( Copy to Clipboard ); - userEvent.click(screen.getByRole('button')); + await user.click(screen.getByRole('button')); expect(onclick).toHaveBeenCalled(); }); diff --git a/packages/react-core/src/components/ClipboardCopy/__tests__/ClipboardCopyToggle.test.tsx b/packages/react-core/src/components/ClipboardCopy/__tests__/ClipboardCopyToggle.test.tsx index d6c1c7494fc..b3885e985ab 100644 --- a/packages/react-core/src/components/ClipboardCopy/__tests__/ClipboardCopyToggle.test.tsx +++ b/packages/react-core/src/components/ClipboardCopy/__tests__/ClipboardCopyToggle.test.tsx @@ -22,11 +22,13 @@ describe('ClipboardCopyToggle', () => { expect(asFragment()).toMatchSnapshot(); }); - test('toggle button onClick', () => { + test('toggle button onClick', async () => { const onclick = jest.fn(); + const user = userEvent.setup(); + render(); - userEvent.click(screen.getByRole('button')); + await user.click(screen.getByRole('button')); expect(onclick).toHaveBeenCalled(); }); diff --git a/packages/react-core/src/components/ContextSelector/ContextSelector.tsx b/packages/react-core/src/components/ContextSelector/ContextSelector.tsx index 65cd8a10897..a7ea188509b 100644 --- a/packages/react-core/src/components/ContextSelector/ContextSelector.tsx +++ b/packages/react-core/src/components/ContextSelector/ContextSelector.tsx @@ -8,7 +8,7 @@ import { ContextSelectorContext } from './contextSelectorConstants'; import { Button, ButtonVariant } from '../Button'; import { TextInput } from '../TextInput'; import { InputGroup } from '../InputGroup'; -import { KEY_CODES } from '../../helpers/constants'; +import { KeyTypes } from '../../helpers/constants'; import { FocusTrap, getUniqueId } from '../../helpers'; import { ToggleMenuBaseProps } from '../../helpers/Popper/Popper'; import { Popper } from '../../helpers/Popper/Popper'; @@ -102,7 +102,7 @@ export class ContextSelector extends React.Component = React.createRef(); onEnterPressed = (event: any) => { - if (event.charCode === KEY_CODES.ENTER) { + if (event.key === KeyTypes.Enter) { this.props.onSearchButtonClick(); } }; diff --git a/packages/react-core/src/components/ContextSelector/ContextSelectorToggle.tsx b/packages/react-core/src/components/ContextSelector/ContextSelectorToggle.tsx index 9278911d2a8..b0af9aecd4a 100644 --- a/packages/react-core/src/components/ContextSelector/ContextSelectorToggle.tsx +++ b/packages/react-core/src/components/ContextSelector/ContextSelectorToggle.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import CaretDownIcon from '@patternfly/react-icons/dist/esm/icons/caret-down-icon'; import styles from '@patternfly/react-styles/css/components/ContextSelector/context-selector'; import { css } from '@patternfly/react-styles'; -import { KEY_CODES } from '../../helpers/constants'; +import { KeyTypes } from '../../helpers/constants'; import { PickOptional } from '../../helpers/typeUtils'; export interface ContextSelectorToggleProps { @@ -67,8 +67,7 @@ export class ContextSelectorToggle extends React.Component { const { isOpen, onToggle } = this.props; - const keyCode = event.keyCode || event.which; - if (isOpen && keyCode === KEY_CODES.ESCAPE_KEY) { + if (isOpen && event.key === KeyTypes.Escape) { onToggle(null, false); this.toggle.current.focus(); } @@ -76,16 +75,13 @@ export class ContextSelectorToggle extends React.Component { const { isOpen, onToggle, onEnter } = this.props; - if ((event.keyCode === KEY_CODES.TAB && !isOpen) || event.key !== KEY_CODES.ENTER) { + if ((event.key === KeyTypes.Tab && !isOpen) || event.key !== KeyTypes.Enter) { return; } event.preventDefault(); - if ( - (event.keyCode === KEY_CODES.TAB || event.keyCode === KEY_CODES.ENTER || event.key !== KEY_CODES.SPACE) && - isOpen - ) { + if ((event.key === KeyTypes.Tab || event.key === KeyTypes.Enter || event.key !== KeyTypes.Space) && isOpen) { onToggle(null, !isOpen); - } else if ((event.keyCode === KEY_CODES.ENTER || event.key === ' ') && !isOpen) { + } else if ((event.key === KeyTypes.Enter || event.key === ' ') && !isOpen) { onToggle(null, !isOpen); onEnter(); } diff --git a/packages/react-core/src/components/ContextSelector/__tests__/ContextSelector.test.tsx b/packages/react-core/src/components/ContextSelector/__tests__/ContextSelector.test.tsx index fa4fae9ebd5..79971100815 100644 --- a/packages/react-core/src/components/ContextSelector/__tests__/ContextSelector.test.tsx +++ b/packages/react-core/src/components/ContextSelector/__tests__/ContextSelector.test.tsx @@ -25,11 +25,13 @@ describe('ContextSelector', () => { expect(asFragment()).toMatchSnapshot(); }); - test('Verify onToggle is called ', () => { + test('Verify onToggle is called ', async () => { const mockfn = jest.fn(); + const user = userEvent.setup(); + render({items}); - userEvent.click(screen.getByRole('button')); + await user.click(screen.getByRole('button')); expect(mockfn.mock.calls).toHaveLength(1); }); }); diff --git a/packages/react-core/src/components/ContextSelector/__tests__/ContextSelectorItem.test.tsx b/packages/react-core/src/components/ContextSelector/__tests__/ContextSelectorItem.test.tsx index bc61448d42b..ef8dfc648d1 100644 --- a/packages/react-core/src/components/ContextSelector/__tests__/ContextSelectorItem.test.tsx +++ b/packages/react-core/src/components/ContextSelector/__tests__/ContextSelectorItem.test.tsx @@ -23,15 +23,16 @@ test('Renders ContextSelectorItem disabled and hovered', () => { expect(asFragment()).toMatchSnapshot(); }); -test('Verify onClick is called ', () => { +test('Verify onClick is called ', async () => { const mockfn = jest.fn(); + const user = userEvent.setup(); render( My Project ); - userEvent.click(screen.getByRole('button')); + await user.click(screen.getByRole('button')); expect(mockfn.mock.calls).toHaveLength(1); }); diff --git a/packages/react-core/src/components/ContextSelector/__tests__/ContextSelectorToggle.test.tsx b/packages/react-core/src/components/ContextSelector/__tests__/ContextSelectorToggle.test.tsx index 1da4b3240ae..6b8cb274323 100644 --- a/packages/react-core/src/components/ContextSelector/__tests__/ContextSelectorToggle.test.tsx +++ b/packages/react-core/src/components/ContextSelector/__tests__/ContextSelectorToggle.test.tsx @@ -4,6 +4,7 @@ import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { ContextSelectorToggle } from '../ContextSelectorToggle'; +import { KeyTypes } from '../../../helpers'; describe('ContextSelectorToggle', () => { test('Renders ContextSelectorToggle', () => { @@ -11,40 +12,49 @@ describe('ContextSelectorToggle', () => { expect(asFragment()).toMatchSnapshot(); }); - test('Verify onToggle is called ', () => { + test('Verify onToggle is called ', async () => { const mockfnOnToggle = jest.fn(); + const user = userEvent.setup(); render(); - userEvent.click(screen.getByRole('button')); + await user.click(screen.getByRole('button')); expect(mockfnOnToggle).toHaveBeenCalledTimes(1); }); - test('Verify ESC press', () => { + test('Verify ESC press', async () => { + const user = userEvent.setup(); + const { asFragment } = render(); - userEvent.type(screen.getByRole('button'), '{esc}'); + await user.type(screen.getByRole('button'), `{${KeyTypes.Escape}}`); expect(asFragment()).toMatchSnapshot(); }); - test('Verify ESC press with not isOpen', () => { + test('Verify ESC press with not isOpen', async () => { + const user = userEvent.setup(); + const { asFragment } = render(); - userEvent.type(screen.getByRole('button'), '{esc}'); + await user.type(screen.getByRole('button'), `{${KeyTypes.Escape}}`); expect(asFragment()).toMatchSnapshot(); }); - test('Verify keydown tab ', () => { + test('Verify keydown tab ', async () => { + const user = userEvent.setup(); + const { asFragment } = render(); - userEvent.type(screen.getByRole('button'), '{tab}'); + await user.type(screen.getByRole('button'), `{${KeyTypes.Tab}}`); expect(asFragment()).toMatchSnapshot(); }); - test('Verify keydown enter ', () => { + test('Verify keydown enter ', async () => { + const user = userEvent.setup(); + const { asFragment } = render(); - userEvent.type(screen.getByRole('button'), '{enter}'); + await user.type(screen.getByRole('button'), `{${KeyTypes.Enter}}`); expect(asFragment()).toMatchSnapshot(); }); }); diff --git a/packages/react-core/src/components/DataList/__tests__/DataList.test.tsx b/packages/react-core/src/components/DataList/__tests__/DataList.test.tsx index a2ed22a8bec..671ff6112e9 100644 --- a/packages/react-core/src/components/DataList/__tests__/DataList.test.tsx +++ b/packages/react-core/src/components/DataList/__tests__/DataList.test.tsx @@ -80,8 +80,9 @@ describe('DataList', () => { expect(selectableInput).not.toBeInTheDocument(); }); - test('List calls selectableRow.onChange when the selectable input changes', () => { + test('List calls selectableRow.onChange when the selectable input changes', async () => { const mock = jest.fn(); + const user = userEvent.setup(); render( @@ -94,7 +95,7 @@ describe('DataList', () => { ); const selectableInput = screen.getByRole('radio', { hidden: true }); - userEvent.click(selectableInput); + await user.click(selectableInput); expect(mock).toHaveBeenCalled(); }); diff --git a/packages/react-core/src/components/DataList/__tests__/DataListCheck.test.tsx b/packages/react-core/src/components/DataList/__tests__/DataListCheck.test.tsx index 854559a3d0e..9e69ff734e8 100644 --- a/packages/react-core/src/components/DataList/__tests__/DataListCheck.test.tsx +++ b/packages/react-core/src/components/DataList/__tests__/DataListCheck.test.tsx @@ -3,8 +3,9 @@ import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { DataListCheck } from '../DataListCheck'; -it('does not throw a "A component is changing an uncontrolled input of type checkbox to be controlled" error when changed if using isChecked', () => { +it('does not throw a "A component is changing an uncontrolled input of type checkbox to be controlled" error when changed if using isChecked', async () => { const consoleSpy = jest.spyOn(console, 'error').mockImplementation(() => {}); + const user = userEvent.setup(); const ControlledDataListCheck = () => { const [checked, setChecked] = React.useState(false); @@ -14,7 +15,7 @@ it('does not throw a "A component is changing an uncontrolled input of type chec render(); - userEvent.click(screen.getByRole('checkbox')); + await user.click(screen.getByRole('checkbox')); expect(consoleSpy).not.toHaveBeenCalled(); }); diff --git a/packages/react-core/src/components/Drawer/__tests__/Drawer.test.tsx b/packages/react-core/src/components/Drawer/__tests__/Drawer.test.tsx index 3470d784de2..224572e4088 100644 --- a/packages/react-core/src/components/Drawer/__tests__/Drawer.test.tsx +++ b/packages/react-core/src/components/Drawer/__tests__/Drawer.test.tsx @@ -12,6 +12,7 @@ import { import React from 'react'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; +import { KeyTypes } from '../../../helpers'; Object.values([ { isExpanded: true, isInline: false, isStatic: false }, @@ -126,7 +127,7 @@ test(`Drawer has resizable callback and id`, () => { expect(asFragment()).toMatchSnapshot(); }); -test('Resizeable DrawerPanelContent can be wrapped in a context without causing an error', () => { +test('Resizeable DrawerPanelContent can be wrapped in a context without causing an error', async () => { const TestContext = React.createContext({}); const consoleError = jest.spyOn(console, 'error').mockImplementation(); @@ -148,6 +149,8 @@ test('Resizeable DrawerPanelContent can be wrapped in a context without causing ); + const user = userEvent.setup(); + render( @@ -156,8 +159,8 @@ test('Resizeable DrawerPanelContent can be wrapped in a context without causing ); - userEvent.tab(); - userEvent.keyboard('{arrowleft}'); + await user.tab(); + await user.keyboard(`{${KeyTypes.ArrowLeft}}`); expect(consoleError).not.toHaveBeenCalled(); }) diff --git a/packages/react-core/src/components/Dropdown/Toggle.tsx b/packages/react-core/src/components/Dropdown/Toggle.tsx index a5921d99193..c03bbd5b7e1 100644 --- a/packages/react-core/src/components/Dropdown/Toggle.tsx +++ b/packages/react-core/src/components/Dropdown/Toggle.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import styles from '@patternfly/react-styles/css/components/Dropdown/dropdown'; import { DropdownContext } from './dropdownConstants'; import { css } from '@patternfly/react-styles'; -import { KEY_CODES } from '../../helpers/constants'; +import { KeyTypes } from '../../helpers/constants'; import { PickOptional } from '../../helpers/typeUtils'; export interface ToggleProps { @@ -95,13 +95,12 @@ export class Toggle extends React.Component { onEscPress = (event: KeyboardEvent) => { const { parentRef, getMenuRef } = this.props; - const keyCode = event.keyCode || event.which; const menuRef = getMenuRef && getMenuRef(); const escFromToggle = parentRef && parentRef.current && parentRef.current.contains(event.target as Node); const escFromWithinMenu = menuRef && menuRef.contains && menuRef.contains(event.target as Node); if ( this.props.isOpen && - (keyCode === KEY_CODES.ESCAPE_KEY || event.key === 'Tab') && + (event.key === KeyTypes.Escape || event.key === 'Tab') && (escFromToggle || escFromWithinMenu) ) { this.props.onToggle(false, event); diff --git a/packages/react-core/src/components/Dropdown/__tests__/Dropdown.test.tsx b/packages/react-core/src/components/Dropdown/__tests__/Dropdown.test.tsx index 9e889c3f1ee..56631ceda87 100644 --- a/packages/react-core/src/components/Dropdown/__tests__/Dropdown.test.tsx +++ b/packages/react-core/src/components/Dropdown/__tests__/Dropdown.test.tsx @@ -201,9 +201,10 @@ describe('KebabToggle', () => { }); describe('API', () => { - test('click on item', () => { + test('click on item', async () => { const mockToggle = jest.fn(); const mockSelect = jest.fn(); + const user = userEvent.setup(); render( { /> ); - userEvent.click(screen.getByText('Link')); // "Link" is the text of the first item + await user.click(screen.getByText('Link')); // "Link" is the text of the first item expect(mockToggle.mock.calls).toHaveLength(0); expect(mockSelect.mock.calls).toHaveLength(1); }); diff --git a/packages/react-core/src/components/Dropdown/__tests__/DropdownToggle.test.tsx b/packages/react-core/src/components/Dropdown/__tests__/DropdownToggle.test.tsx index 06faa01b014..606cf059d09 100644 --- a/packages/react-core/src/components/Dropdown/__tests__/DropdownToggle.test.tsx +++ b/packages/react-core/src/components/Dropdown/__tests__/DropdownToggle.test.tsx @@ -8,8 +8,9 @@ import { DropdownContext } from '../dropdownConstants'; describe('DropdownToggle', () => { describe('API', () => { - test('click on closed', () => { + test('click on closed', async () => { const mockToggle = jest.fn(); + const user = userEvent.setup(); render( @@ -17,12 +18,13 @@ describe('DropdownToggle', () => { ); - userEvent.click(screen.getByRole('button')); + await user.click(screen.getByRole('button')); expect(mockToggle.mock.calls[0][0]).toBe(true); }); - test('click on opened', () => { + test('click on opened', async () => { const mockToggle = jest.fn(); + const user = userEvent.setup(); render( @@ -30,7 +32,7 @@ describe('DropdownToggle', () => { ); - userEvent.click(screen.getByRole('button')); + await user.click(screen.getByRole('button')); expect(mockToggle.mock.calls[0][0]).toBe(false); }); diff --git a/packages/react-core/src/components/Dropdown/__tests__/DropdownToggleAction.test.tsx b/packages/react-core/src/components/Dropdown/__tests__/DropdownToggleAction.test.tsx index 5d8a6633211..6c7afdcfda0 100644 --- a/packages/react-core/src/components/Dropdown/__tests__/DropdownToggleAction.test.tsx +++ b/packages/react-core/src/components/Dropdown/__tests__/DropdownToggleAction.test.tsx @@ -20,11 +20,12 @@ test('passing class', () => { expect(asFragment()).toMatchSnapshot(); }); -test('checkbox passes value and event to onClick handler', () => { +test('checkbox passes value and event to onClick handler', async () => { const onClickMock = jest.fn(); + const user = userEvent.setup(); render(); - userEvent.click(screen.getByRole('button')); + await user.click(screen.getByRole('button')); expect(onClickMock).toHaveBeenCalled(); }); diff --git a/packages/react-core/src/components/Dropdown/__tests__/DropdownToggleCheckbox.test.tsx b/packages/react-core/src/components/Dropdown/__tests__/DropdownToggleCheckbox.test.tsx index 1db74919a87..ec57d375d65 100644 --- a/packages/react-core/src/components/Dropdown/__tests__/DropdownToggleCheckbox.test.tsx +++ b/packages/react-core/src/components/Dropdown/__tests__/DropdownToggleCheckbox.test.tsx @@ -54,10 +54,12 @@ describe('DropdownToggleCheckbox', () => { expect(asFragment()).toMatchSnapshot(); }); - test('checkbox passes value and event to onChange handler', () => { + test('checkbox passes value and event to onChange handler', async () => { + const user = userEvent.setup(); + render(); - userEvent.click(screen.getByRole('checkbox')); + await user.click(screen.getByRole('checkbox')); expect(props.onChange).toHaveBeenCalledWith(true, expect.any(Object)); }); }); diff --git a/packages/react-core/src/components/ExpandableSection/__tests__/ExpandableSection.test.tsx b/packages/react-core/src/components/ExpandableSection/__tests__/ExpandableSection.test.tsx index 97b98342b14..b838f08b31b 100644 --- a/packages/react-core/src/components/ExpandableSection/__tests__/ExpandableSection.test.tsx +++ b/packages/react-core/src/components/ExpandableSection/__tests__/ExpandableSection.test.tsx @@ -18,12 +18,13 @@ test('Renders ExpandableSection expanded', () => { expect(asFragment()).toMatchSnapshot(); }); -test('ExpandableSection onToggle called', () => { +test('ExpandableSection onToggle called', async () => { const mockfn = jest.fn(); + const user = userEvent.setup(); render( test ); - userEvent.click(screen.getByRole('button')); + await user.click(screen.getByRole('button')); expect(mockfn.mock.calls).toHaveLength(1); }); diff --git a/packages/react-core/src/components/Form/__tests__/FormGroup.test.tsx b/packages/react-core/src/components/Form/__tests__/FormGroup.test.tsx index edc77aaab83..a3c66f2c470 100644 --- a/packages/react-core/src/components/Form/__tests__/FormGroup.test.tsx +++ b/packages/react-core/src/components/Form/__tests__/FormGroup.test.tsx @@ -216,7 +216,8 @@ describe('FormGroup', () => { expect(screen.queryByRole('radiogroup')).not.toBeInTheDocument(); }); - test('input should receive focus when clicking text label', () => { + test('input should receive focus when clicking text label', async () => { + const user = userEvent.setup(); render( @@ -226,12 +227,13 @@ describe('FormGroup', () => { const labelElement = screen.getByText('label'); const input = screen.getByRole('textbox'); - userEvent.click(labelElement); + await user.click(labelElement); expect(input).toHaveFocus(); }); describe('With multiple inputs per group', () => { - test('inputs should not receive focus when clicking text label', () => { + test('inputs should not receive focus when clicking text label', async () => { + const user = userEvent.setup(); render( @@ -242,7 +244,7 @@ describe('FormGroup', () => { const labelElement = screen.getByText('label'); const inputs = screen.getAllByRole('textbox'); - userEvent.click(labelElement); + await user.click(labelElement); inputs.forEach(input => { expect(input).not.toHaveFocus(); }); diff --git a/packages/react-core/src/components/FormSelect/__tests__/FormSelect.test.tsx b/packages/react-core/src/components/FormSelect/__tests__/FormSelect.test.tsx index a8aad0a2f65..96cb7afaf09 100644 --- a/packages/react-core/src/components/FormSelect/__tests__/FormSelect.test.tsx +++ b/packages/react-core/src/components/FormSelect/__tests__/FormSelect.test.tsx @@ -174,16 +174,16 @@ describe('FormSelect', () => { expect(screen.getByLabelText('required FormSelect')).toHaveAttribute('required'); }); - test('FormSelect passes value and event to onChange handler', () => { + test('FormSelect passes value and event to onChange handler', async () => { const myMock = jest.fn(); - + const user = userEvent.setup(); render( ); - userEvent.selectOptions(screen.getByLabelText('Some label'), 'Mr'); + await user.selectOptions(screen.getByLabelText('Some label'), 'Mr'); expect(myMock).toHaveBeenCalled(); expect(myMock.mock.calls[0][0]).toEqual('mr'); diff --git a/packages/react-core/src/components/Label/__tests__/Label.test.tsx b/packages/react-core/src/components/Label/__tests__/Label.test.tsx index 9e62765bbc1..4f61a6707ae 100644 --- a/packages/react-core/src/components/Label/__tests__/Label.test.tsx +++ b/packages/react-core/src/components/Label/__tests__/Label.test.tsx @@ -91,7 +91,9 @@ describe('Label', () => { expect(asFragment()).toMatchSnapshot(); }); - test('editable label', () => { + test('editable label', async () => { + const user = userEvent.setup(); + const { asFragment } = render(