@@ -29,6 +29,7 @@ describe('ChatHeaderButton', () => {
2929 let mockCore : ReturnType < typeof coreMock . createStart > ;
3030 let mockChatService : jest . Mocked < ChatService > ;
3131 let mockContextProvider : any ;
32+ let mockSuggestedActionsService : any ;
3233
3334 beforeEach ( ( ) => {
3435 jest . clearAllMocks ( ) ;
@@ -38,6 +39,7 @@ describe('ChatHeaderButton', () => {
3839 newThread : jest . fn ( ) ,
3940 isWindowOpen : jest . fn ( ) . mockReturnValue ( false ) ,
4041 getWindowMode : jest . fn ( ) . mockReturnValue ( 'sidecar' ) ,
42+ getPaddingSize : jest . fn ( ) . mockReturnValue ( 400 ) ,
4143 setWindowState : jest . fn ( ) ,
4244 setChatWindowRef : jest . fn ( ) ,
4345 clearChatWindowRef : jest . fn ( ) ,
@@ -46,6 +48,9 @@ describe('ChatHeaderButton', () => {
4648 onWindowCloseRequest : jest . fn ( ) . mockReturnValue ( ( ) => { } ) ,
4749 } as any ;
4850 mockContextProvider = { } ;
51+ mockSuggestedActionsService = {
52+ getSuggestedActions : jest . fn ( ) . mockReturnValue ( [ ] ) ,
53+ } ;
4954
5055 // Mock sidecar with complete SidecarRef
5156 const mockSidecarRef = {
@@ -65,6 +70,7 @@ describe('ChatHeaderButton', () => {
6570 core = { mockCore }
6671 chatService = { mockChatService }
6772 contextProvider = { mockContextProvider }
73+ suggestedActionsService = { mockSuggestedActionsService }
6874 ref = { ref }
6975 />
7076 ) ;
@@ -82,6 +88,7 @@ describe('ChatHeaderButton', () => {
8288 core = { mockCore }
8389 chatService = { mockChatService }
8490 contextProvider = { mockContextProvider }
91+ suggestedActionsService = { mockSuggestedActionsService }
8592 ref = { ref }
8693 />
8794 ) ;
@@ -105,6 +112,7 @@ describe('ChatHeaderButton', () => {
105112 core = { mockCore }
106113 chatService = { mockChatService }
107114 contextProvider = { mockContextProvider }
115+ suggestedActionsService = { mockSuggestedActionsService }
108116 />
109117 ) ;
110118
@@ -120,6 +128,7 @@ describe('ChatHeaderButton', () => {
120128 core = { mockCore }
121129 chatService = { mockChatService }
122130 contextProvider = { mockContextProvider }
131+ suggestedActionsService = { mockSuggestedActionsService }
123132 />
124133 ) ;
125134
@@ -132,6 +141,7 @@ describe('ChatHeaderButton', () => {
132141 core = { mockCore }
133142 chatService = { mockChatService }
134143 contextProvider = { mockContextProvider }
144+ suggestedActionsService = { mockSuggestedActionsService }
135145 />
136146 ) ;
137147
@@ -144,6 +154,7 @@ describe('ChatHeaderButton', () => {
144154 core = { mockCore }
145155 chatService = { mockChatService }
146156 contextProvider = { mockContextProvider }
157+ suggestedActionsService = { mockSuggestedActionsService }
147158 />
148159 ) ;
149160
@@ -166,6 +177,7 @@ describe('ChatHeaderButton', () => {
166177 core = { mockCore }
167178 chatService = { mockChatService }
168179 contextProvider = { mockContextProvider }
180+ suggestedActionsService = { mockSuggestedActionsService }
169181 />
170182 ) ;
171183
@@ -188,34 +200,30 @@ describe('ChatHeaderButton', () => {
188200 } ) ;
189201 mockCore . overlays . sidecar . open . mockReturnValue ( mockSidecarRef ) ;
190202
203+ // Start with window open state
204+ mockChatService . isWindowOpen . mockReturnValue ( true ) ;
205+
191206 const { container } = render (
192207 < ChatHeaderButton
193208 core = { mockCore }
194209 chatService = { mockChatService }
195210 contextProvider = { mockContextProvider }
211+ suggestedActionsService = { mockSuggestedActionsService }
196212 />
197213 ) ;
198214
199- // First open the sidecar by clicking the button
200- const button = container . querySelector ( '[aria-label="Toggle chat assistant"]' ) as HTMLElement ;
201- button ?. click ( ) ;
202-
203- // Wait for the sidecar to be opened
204- await waitFor ( ( ) => {
205- expect ( mockCore . overlays . sidecar . open ) . toHaveBeenCalled ( ) ;
206- } ) ;
207-
208- // Then trigger the close request
215+ // Trigger the close request
209216 closeRequestCallback ! ( ) ;
210217
211- // Verify close was called
212- await waitFor ( ( ) => {
213- expect ( mockClose ) . toHaveBeenCalled ( ) ;
214- } ) ;
218+ // Verify close was called on the sidecar ref
219+ expect ( mockChatService . setWindowState ) . toHaveBeenCalledWith ( { isWindowOpen : false } ) ;
215220 } ) ;
216221
217222 it ( 'should sync local state when ChatService state changes' , ( ) => {
218- let stateChangeCallback : ( isOpen : boolean ) => void ;
223+ let stateChangeCallback : (
224+ newWindowState : any ,
225+ changed : { isWindowOpen : boolean ; windowMode : boolean ; paddingSize : boolean }
226+ ) => void ;
219227 mockChatService . onWindowStateChange . mockImplementation ( ( cb ) => {
220228 stateChangeCallback = cb ;
221229 return jest . fn ( ) ;
@@ -226,11 +234,15 @@ describe('ChatHeaderButton', () => {
226234 core = { mockCore }
227235 chatService = { mockChatService }
228236 contextProvider = { mockContextProvider }
237+ suggestedActionsService = { mockSuggestedActionsService }
229238 />
230239 ) ;
231240
232241 // Trigger state change to open
233- stateChangeCallback ! ( true ) ;
242+ stateChangeCallback ! (
243+ { isWindowOpen : true , windowMode : 'sidecar' , paddingSize : 400 } ,
244+ { isWindowOpen : true , windowMode : false , paddingSize : false }
245+ ) ;
234246
235247 // Verify the component reflects the new state (button color should change)
236248 const button = document . querySelector ( '[aria-label="Toggle chat assistant"]' ) ;
@@ -245,6 +257,7 @@ describe('ChatHeaderButton', () => {
245257 core = { mockCore }
246258 chatService = { mockChatService }
247259 contextProvider = { mockContextProvider }
260+ suggestedActionsService = { mockSuggestedActionsService }
248261 />
249262 ) ;
250263
@@ -265,6 +278,7 @@ describe('ChatHeaderButton', () => {
265278 core = { mockCore }
266279 chatService = { mockChatService }
267280 contextProvider = { mockContextProvider }
281+ suggestedActionsService = { mockSuggestedActionsService }
268282 />
269283 ) ;
270284
0 commit comments