1
- import { render as HTMLRender , fireEvent , waitFor , screen } from '@testing-library/react'
1
+ import { render as HTMLRender , fireEvent , screen , waitFor } from '@testing-library/react'
2
2
import userEvent from '@testing-library/user-event'
3
3
import React from 'react'
4
4
import type { AutocompleteInputProps } from '../Autocomplete'
@@ -130,14 +130,15 @@ describe('Autocomplete', () => {
130
130
expect ( onKeyPressMock ) . toHaveBeenCalled ( )
131
131
} )
132
132
133
- it ( 'opens the menu when the input is focused' , ( ) => {
133
+ it ( 'opens the menu when the input is focused and arrow key is pressed ' , ( ) => {
134
134
const { getByLabelText} = HTMLRender (
135
135
< LabelledAutocomplete menuProps = { { items : [ ] , selectedItemIds : [ ] , [ 'aria-labelledby' ] : 'autocompleteLabel' } } /> ,
136
136
)
137
137
const inputNode = getByLabelText ( AUTOCOMPLETE_LABEL )
138
138
139
139
expect ( inputNode . getAttribute ( 'aria-expanded' ) ) . not . toBe ( 'true' )
140
- fireEvent . focus ( inputNode )
140
+ fireEvent . click ( inputNode )
141
+ fireEvent . keyDown ( inputNode , { key : 'ArrowDown' } )
141
142
expect ( inputNode . getAttribute ( 'aria-expanded' ) ) . toBe ( 'true' )
142
143
} )
143
144
@@ -148,13 +149,14 @@ describe('Autocomplete', () => {
148
149
const inputNode = getByLabelText ( AUTOCOMPLETE_LABEL )
149
150
150
151
expect ( inputNode . getAttribute ( 'aria-expanded' ) ) . not . toBe ( 'true' )
151
- fireEvent . focus ( inputNode )
152
+ fireEvent . click ( inputNode )
153
+ fireEvent . keyDown ( inputNode , { key : 'ArrowDown' } )
154
+
152
155
expect ( inputNode . getAttribute ( 'aria-expanded' ) ) . toBe ( 'true' )
153
- // eslint-disable-next-line github/no-blur
154
- fireEvent . blur ( inputNode )
155
156
156
- // wait a tick for blur to finish
157
- await waitFor ( ( ) => expect ( inputNode . getAttribute ( 'aria-expanded' ) ) . not . toBe ( 'true' ) )
157
+ await userEvent . tab ( )
158
+
159
+ expect ( inputNode . getAttribute ( 'aria-expanded' ) ) . not . toBe ( 'true' )
158
160
} )
159
161
160
162
it ( 'sets the input value to the suggested item text and highlights the untyped part of the word' , async ( ) => {
@@ -306,7 +308,7 @@ describe('Autocomplete', () => {
306
308
expect ( onSelectedChangeMock ) . not . toHaveBeenCalled ( )
307
309
if ( inputNode ) {
308
310
fireEvent . focus ( inputNode )
309
- await user . type ( inputNode , '{enter}' )
311
+ await user . type ( inputNode , '{arrowdown}{ enter}' )
310
312
}
311
313
312
314
expect ( onSelectedChangeMock ) . toHaveBeenCalledWith ( [ mockItems [ 0 ] ] )
@@ -329,6 +331,8 @@ describe('Autocomplete', () => {
329
331
if ( inputNode ) {
330
332
expect ( inputNode . getAttribute ( 'aria-expanded' ) ) . not . toBe ( 'true' )
331
333
await user . click ( inputNode )
334
+
335
+ fireEvent . keyDown ( inputNode , { key : 'ArrowDown' } )
332
336
expect ( inputNode . getAttribute ( 'aria-expanded' ) ) . toBe ( 'true' )
333
337
await user . click ( getByText ( mockItems [ 1 ] . text ) )
334
338
expect ( inputNode . getAttribute ( 'aria-expanded' ) ) . toBe ( 'true' )
@@ -352,6 +356,7 @@ describe('Autocomplete', () => {
352
356
if ( inputNode ) {
353
357
expect ( inputNode . getAttribute ( 'aria-expanded' ) ) . not . toBe ( 'true' )
354
358
await user . click ( inputNode )
359
+ fireEvent . keyDown ( inputNode , { key : 'ArrowDown' } )
355
360
expect ( inputNode . getAttribute ( 'aria-expanded' ) ) . toBe ( 'true' )
356
361
await user . click ( getByText ( mockItems [ 1 ] . text ) )
357
362
expect ( inputNode . getAttribute ( 'aria-expanded' ) ) . not . toBe ( 'true' )
0 commit comments