@@ -99,4 +99,53 @@ describe("HeaderQuickNav", () => {
9999 expect ( input ) . toHaveFocus ( ) ;
100100 expect ( input ) . toHaveAttribute ( "data-expanded" , "true" ) ;
101101 } ) ;
102+
103+ it ( "stays expanded after blur when the query has content" , async ( ) => {
104+ const user = userEvent . setup ( ) ;
105+
106+ render (
107+ < I18nProvider >
108+ < HeaderQuickNav />
109+ </ I18nProvider > ,
110+ ) ;
111+
112+ const input = screen . getByRole ( "searchbox" , { name : "Search" } ) ;
113+ await user . type ( input , "servers" ) ;
114+ fireEvent . blur ( input ) ;
115+
116+ expect ( input ) . toHaveAttribute ( "data-expanded" , "true" ) ;
117+ } ) ;
118+
119+ it ( "collapses again on blur when the query is empty" , async ( ) => {
120+ const user = userEvent . setup ( ) ;
121+
122+ render (
123+ < I18nProvider >
124+ < HeaderQuickNav />
125+ </ I18nProvider > ,
126+ ) ;
127+
128+ const input = screen . getByRole ( "searchbox" , { name : "Search" } ) ;
129+ await user . click ( input ) ;
130+ fireEvent . blur ( input ) ;
131+
132+ expect ( input ) . toHaveAttribute ( "data-expanded" , "false" ) ;
133+ } ) ;
134+
135+ it ( "prevents the form from submitting" , ( ) => {
136+ render (
137+ < I18nProvider >
138+ < HeaderQuickNav />
139+ </ I18nProvider > ,
140+ ) ;
141+
142+ const input = screen . getByRole ( "searchbox" , { name : "Search" } ) ;
143+ const form = input . closest ( "form" ) ;
144+ expect ( form ) . not . toBeNull ( ) ;
145+
146+ const submitEvent = new Event ( "submit" , { bubbles : true , cancelable : true } ) ;
147+ form ! . dispatchEvent ( submitEvent ) ;
148+
149+ expect ( submitEvent . defaultPrevented ) . toBe ( true ) ;
150+ } ) ;
102151} ) ;
0 commit comments