@@ -85,4 +85,50 @@ describe('detached', () => {
8585 expect ( document . body ) . not . toHaveClass ( 'aa-Detached' ) ;
8686 } ) ;
8787 } ) ;
88+
89+ test ( 'closes after cancel' , async ( ) => {
90+ const container = document . createElement ( 'div' ) ;
91+ document . body . appendChild ( container ) ;
92+ autocomplete < { label : string } > ( {
93+ id : 'autocomplete' ,
94+ detachedMediaQuery : '' ,
95+ container,
96+ } ) ;
97+
98+ const searchButton = container . querySelector < HTMLButtonElement > (
99+ '.aa-DetachedSearchButton'
100+ ) ;
101+
102+ // Open detached overlay
103+ searchButton . click ( ) ;
104+
105+ await waitFor ( ( ) => {
106+ expect ( document . querySelector ( '.aa-DetachedOverlay' ) ) . toBeInTheDocument ( ) ;
107+ expect ( document . body ) . toHaveClass ( 'aa-Detached' ) ;
108+ } ) ;
109+
110+ const cancelButton = document . querySelector < HTMLButtonElement > (
111+ '.aa-DetachedCancelButton'
112+ ) ;
113+
114+ const bodyClickListener = jest . fn ( ) ;
115+ document . querySelector ( 'body' ) . addEventListener ( 'click' , bodyClickListener ) ;
116+
117+ // Close detached overlay
118+ cancelButton . click ( ) ;
119+
120+ expect ( bodyClickListener ) . toHaveBeenCalledTimes ( 0 ) ;
121+
122+ document
123+ . querySelector ( 'body' )
124+ . removeEventListener ( 'click' , bodyClickListener ) ;
125+
126+ // The detached overlay should close
127+ await waitFor ( ( ) => {
128+ expect (
129+ document . querySelector ( '.aa-DetachedOverlay' )
130+ ) . not . toBeInTheDocument ( ) ;
131+ expect ( document . body ) . not . toHaveClass ( 'aa-Detached' ) ;
132+ } ) ;
133+ } ) ;
88134} ) ;
0 commit comments