1+ import { useState } from 'react'
12import { ChakraProvider } from '@chakra-ui/react'
2- import { render , screen } from '@testing-library/react'
3+ import { render , screen , waitFor } from '@testing-library/react'
34import userEvent from '@testing-library/user-event'
45
56import { ModalMultiple } from './ModalMultiple'
@@ -17,6 +18,31 @@ const renderWithChakra = (ui: React.ReactElement): any => {
1718 return render ( < ChakraProvider > { ui } </ ChakraProvider > )
1819}
1920
21+ const ModalMultipleFocusHarness = ( {
22+ returnFocusOnClose = true ,
23+ } : {
24+ returnFocusOnClose ?: boolean
25+ } ) : JSX . Element => {
26+ const [ isOpen , setIsOpen ] = useState ( false )
27+
28+ return (
29+ < >
30+ < button type = "button" onClick = { ( ) => setIsOpen ( true ) } >
31+ Open Multiple
32+ </ button >
33+ < ModalMultiple
34+ type = "modal"
35+ isOpen = { isOpen }
36+ onClose = { ( ) => setIsOpen ( false ) }
37+ title = "Focus Multiple"
38+ returnFocusOnClose = { returnFocusOnClose }
39+ >
40+ < div > Focus Content</ div >
41+ </ ModalMultiple >
42+ </ >
43+ )
44+ }
45+
2046describe ( 'ModalMultiple Component' , ( ) => {
2147 beforeEach ( ( ) => {
2248 jest . clearAllMocks ( )
@@ -119,6 +145,22 @@ describe('ModalMultiple Component', () => {
119145 await user . keyboard ( '{Escape}' )
120146 expect ( onCloseMock ) . not . toHaveBeenCalled ( )
121147 } )
148+
149+ it ( 'does not restore focus to trigger when returnFocusOnClose is false' , async ( ) => {
150+ const user = userEvent . setup ( )
151+ renderWithChakra ( < ModalMultipleFocusHarness returnFocusOnClose = { false } /> )
152+
153+ const trigger = screen . getByRole ( 'button' , { name : 'Open Multiple' } )
154+ trigger . focus ( )
155+
156+ await user . click ( trigger )
157+ await user . click ( screen . getByLabelText ( 'Close' ) )
158+
159+ await waitFor ( ( ) => {
160+ expect ( screen . queryByRole ( 'dialog' ) ) . not . toBeInTheDocument ( )
161+ } )
162+ expect ( trigger ) . not . toHaveFocus ( )
163+ } )
122164 } )
123165
124166 /* -------------------------------------------------------------------------- */
0 commit comments