@@ -33,10 +33,11 @@ describe("webviewMessageHandler", () => {
3333 describe ( "requestRouterModels" , ( ) => {
3434 test ( "handles all successful model fetches correctly" , async ( ) => {
3535 // Mock all getModels calls to succeed with different data
36- ; ( getModels as jest . Mock ) . mockImplementation ( ( router ) => {
36+ ; ( getModels as jest . Mock ) . mockImplementation ( ( options ) => {
37+ const provider = options . provider
3738 return Promise . resolve ( {
38- [ `${ router } -model-1` ] : { name : `${ router } Model 1` } ,
39- [ `${ router } -model-2` ] : { name : `${ router } Model 2` } ,
39+ [ `${ provider } -model-1` ] : { name : `${ provider } Model 1` } ,
40+ [ `${ provider } -model-2` ] : { name : `${ provider } Model 2` } ,
4041 } )
4142 } )
4243
@@ -75,14 +76,15 @@ describe("webviewMessageHandler", () => {
7576
7677 test ( "handles some failed model fetches correctly" , async ( ) => {
7778 // Mock some getModels calls to succeed and others to fail
78- ; ( getModels as jest . Mock ) . mockImplementation ( ( router ) => {
79- if ( router === "openrouter" || router === "litellm" ) {
79+ ; ( getModels as jest . Mock ) . mockImplementation ( ( options ) => {
80+ const provider = options . provider
81+ if ( provider === "openrouter" || provider === "litellm" ) {
8082 return Promise . resolve ( {
81- [ `${ router } -model-1` ] : { name : `${ router } Model 1` } ,
83+ [ `${ provider } -model-1` ] : { name : `${ provider } Model 1` } ,
8284 } )
8385 }
84- // For other routers , throw an error
85- return Promise . reject ( new Error ( `Failed to fetch ${ router } models` ) )
86+ // For other providers , throw an error
87+ return Promise . reject ( new Error ( `Failed to fetch ${ provider } models` ) )
8688 } )
8789
8890 // Call the handler
@@ -129,4 +131,46 @@ describe("webviewMessageHandler", () => {
129131 } )
130132 } )
131133 } )
134+
135+ describe ( "requestProviderModels" , ( ) => {
136+ test ( "when getModels succeeds, it posts a providerModelsResponse with models" , async ( ) => {
137+ const mockLiteLLMModels = { "litellm-model-1" : { name : "LiteLLM Model 1" } }
138+ ; ( getModels as jest . Mock ) . mockResolvedValueOnce ( mockLiteLLMModels )
139+
140+ await webviewMessageHandler ( mockProvider as any , {
141+ type : "requestProviderModels" ,
142+ payload : { provider : "litellm" , apiKey : "test-key" , baseUrl : "test-url" } ,
143+ } )
144+
145+ expect ( mockProvider . postMessageToWebview ) . toHaveBeenCalledWith ( {
146+ type : "providerModelsResponse" ,
147+ payload : {
148+ provider : "litellm" ,
149+ models : mockLiteLLMModels ,
150+ error : undefined , // Explicitly check error is undefined on success
151+ } ,
152+ } )
153+ expect ( getModels ) . toHaveBeenCalledWith ( { provider : "litellm" , apiKey : "test-key" , baseUrl : "test-url" } )
154+ } )
155+
156+ test ( "when getModels fails, it posts a providerModelsResponse with an error and empty models" , async ( ) => {
157+ const errorMessage = "Failed to fetch LiteLLM models: No response from server."
158+ ; ( getModels as jest . Mock ) . mockRejectedValueOnce ( new Error ( errorMessage ) )
159+
160+ await webviewMessageHandler ( mockProvider as any , {
161+ type : "requestProviderModels" ,
162+ payload : { provider : "litellm" , apiKey : "test-key" , baseUrl : "test-url" } ,
163+ } )
164+
165+ expect ( mockProvider . postMessageToWebview ) . toHaveBeenCalledWith ( {
166+ type : "providerModelsResponse" ,
167+ payload : {
168+ provider : "litellm" ,
169+ models : { } ,
170+ error : errorMessage ,
171+ } ,
172+ } )
173+ expect ( getModels ) . toHaveBeenCalledWith ( { provider : "litellm" , apiKey : "test-key" , baseUrl : "test-url" } )
174+ } )
175+ } )
132176} )
0 commit comments