@@ -24,8 +24,12 @@ const setup = (enabled = true) => {
2424 const wrapper = ( { children } : { children : React . ReactNode } ) => (
2525 < QueryClientProvider client = { client } > { children } </ QueryClientProvider >
2626 )
27- return renderHook ( ( { enabled } ) => useVsCodeLmModels ( enabled ) , { wrapper, initialProps : { enabled } } )
27+ return {
28+ client,
29+ ...renderHook ( ( { enabled } ) => useVsCodeLmModels ( enabled ) , { wrapper, initialProps : { enabled } } ) ,
30+ }
2831}
32+ const cachedModels = ( client : ReturnType < typeof createTestQueryClient > ) => client . getQueryData ( [ "vsCodeLmModels" ] )
2933
3034describe ( "useVsCodeLmModels" , ( ) => {
3135 beforeEach ( ( ) => vi . clearAllMocks ( ) )
@@ -58,9 +62,9 @@ describe("useVsCodeLmModels", () => {
5862 { type : VsCodeLmModelsMessageType . githubCopilotSignInResult , vsCodeLmModels : [ model ] } ,
5963 { type : VsCodeLmModelsMessageType . vsCodeLmModels } ,
6064 ] ) ( "ignores non-generic or unsuccessful replies: %j" , ( message ) => {
61- const { result } = setup ( )
65+ const { client } = setup ( )
6266 send ( message )
63- expect ( result . current . data ) . toBeUndefined ( )
67+ expect ( cachedModels ( client ) ) . toBeUndefined ( )
6468 } )
6569
6670 it . each ( [ { models : undefined } , { models : [ model ] } ] ) (
@@ -79,19 +83,27 @@ describe("useVsCodeLmModels", () => {
7983 )
8084
8185 it ( "does not request or listen when disabled, and removes its listener on unmount" , ( ) => {
86+ const add = vi . spyOn ( window , "addEventListener" )
8287 const remove = vi . spyOn ( window , "removeEventListener" )
83- const { result, rerender, unmount } = setup ( false )
88+ const lastMessageHandler = ( ) => add . mock . calls . filter ( ( [ type ] ) => type === "message" ) . at ( - 1 ) ?. [ 1 ]
89+ const { client, rerender, unmount } = setup ( false )
8490 expect ( vscode . postMessage ) . not . toHaveBeenCalled ( )
91+ expect ( lastMessageHandler ( ) ) . toBeUndefined ( )
8592 send ( { type : VsCodeLmModelsMessageType . vsCodeLmModels , vsCodeLmModels : [ model ] } )
86- expect ( result . current . data ) . toBeUndefined ( )
93+ expect ( cachedModels ( client ) ) . toBeUndefined ( )
8794 rerender ( { enabled : true } )
8895 expect ( vscode . postMessage ) . toHaveBeenCalledTimes ( 1 )
96+ const firstHandler = lastMessageHandler ( )
97+ expect ( firstHandler ) . toBeDefined ( )
8998 rerender ( { enabled : false } )
90- expect ( remove ) . toHaveBeenCalledWith ( "message" , expect . any ( Function ) )
99+ expect ( remove ) . toHaveBeenCalledWith ( "message" , firstHandler )
91100 rerender ( { enabled : true } )
101+ const secondHandler = lastMessageHandler ( )
102+ expect ( secondHandler ) . toBeDefined ( )
92103 remove . mockClear ( )
93104 unmount ( )
94- expect ( remove ) . toHaveBeenCalledWith ( "message" , expect . any ( Function ) )
105+ expect ( remove ) . toHaveBeenCalledWith ( "message" , secondHandler )
106+ add . mockRestore ( )
95107 remove . mockRestore ( )
96108 } )
97109} )
0 commit comments