Skip to content
This repository was archived by the owner on May 15, 2026. It is now read-only.

Commit cfd8129

Browse files
committed
test: align DeepSeek router model expectations
1 parent 642b266 commit cfd8129

3 files changed

Lines changed: 105 additions & 0 deletions

File tree

src/core/webview/__tests__/ClineProvider.spec.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2508,6 +2508,7 @@ describe("ClineProvider - Router Models", () => {
25082508
unbound: mockModels,
25092509
roo: {},
25102510
litellm: mockModels,
2511+
deepseek: {},
25112512
ollama: {},
25122513
lmstudio: {},
25132514
"vercel-ai-gateway": mockModels,
@@ -2556,6 +2557,7 @@ describe("ClineProvider - Router Models", () => {
25562557
ollama: {},
25572558
lmstudio: {},
25582559
litellm: {},
2560+
deepseek: {},
25592561
"vercel-ai-gateway": mockModels,
25602562
poe: {},
25612563
},
@@ -2649,6 +2651,7 @@ describe("ClineProvider - Router Models", () => {
26492651
unbound: mockModels,
26502652
roo: {},
26512653
litellm: {},
2654+
deepseek: {},
26522655
ollama: {},
26532656
lmstudio: {},
26542657
"vercel-ai-gateway": mockModels,

src/core/webview/__tests__/webviewMessageHandler.routerModels.spec.ts

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,106 @@ describe("webviewMessageHandler - requestRouterModels provider filter", () => {
133133
expect(routerModels).toHaveProperty("openrouter")
134134
expect(routerModels).toHaveProperty("roo")
135135
expect(routerModels).toHaveProperty("requesty")
136+
expect(routerModels).toHaveProperty("deepseek")
136137
expect(routerModels.roo).toEqual({})
138+
expect(routerModels.deepseek).toEqual({})
139+
expect(getModelsMock).not.toHaveBeenCalledWith(expect.objectContaining({ provider: "deepseek" }))
140+
})
141+
142+
it("fetches DeepSeek models when stored DeepSeek credentials exist", async () => {
143+
mockProvider.getState.mockResolvedValue({
144+
apiConfiguration: {
145+
deepSeekApiKey: "stored-deepseek-key",
146+
deepSeekBaseUrl: "https://deepseek.example.com",
147+
},
148+
})
149+
150+
getModelsMock.mockImplementation(async (options: any) => {
151+
if (options?.provider === "deepseek") {
152+
return { "deepseek-chat": { contextWindow: 128000, supportsPromptCache: true } }
153+
}
154+
155+
switch (options?.provider) {
156+
case "openrouter":
157+
return { "openrouter/qwen2.5": { contextWindow: 32768, supportsPromptCache: false } }
158+
case "requesty":
159+
return { "requesty/model": { contextWindow: 8192, supportsPromptCache: false } }
160+
case "vercel-ai-gateway":
161+
return { "vercel/model": { contextWindow: 8192, supportsPromptCache: false } }
162+
case "litellm":
163+
return { "litellm/model": { contextWindow: 8192, supportsPromptCache: false } }
164+
default:
165+
return {}
166+
}
167+
})
168+
169+
await webviewMessageHandler(
170+
mockProvider as any,
171+
{
172+
type: "requestRouterModels",
173+
} as any,
174+
)
175+
176+
expect(getModelsMock).toHaveBeenCalledWith({
177+
provider: "deepseek",
178+
apiKey: "stored-deepseek-key",
179+
baseUrl: "https://deepseek.example.com",
180+
})
181+
182+
const call = (mockProvider.postMessageToWebview as any).mock.calls.find(
183+
(c: any[]) => c[0]?.type === "routerModels",
184+
)
185+
expect(call).toBeTruthy()
186+
expect(call[0].routerModels.deepseek).toEqual({
187+
"deepseek-chat": { contextWindow: 128000, supportsPromptCache: true },
188+
})
189+
})
190+
191+
it("posts a DeepSeek provider error and keeps an empty aggregate entry when DeepSeek fetch fails", async () => {
192+
mockProvider.getState.mockResolvedValue({
193+
apiConfiguration: {
194+
deepSeekApiKey: "stored-deepseek-key",
195+
},
196+
})
197+
198+
getModelsMock.mockImplementation(async (options: any) => {
199+
if (options?.provider === "deepseek") {
200+
throw new Error("DeepSeek API error")
201+
}
202+
203+
switch (options?.provider) {
204+
case "openrouter":
205+
return { "openrouter/qwen2.5": { contextWindow: 32768, supportsPromptCache: false } }
206+
case "requesty":
207+
return { "requesty/model": { contextWindow: 8192, supportsPromptCache: false } }
208+
case "vercel-ai-gateway":
209+
return { "vercel/model": { contextWindow: 8192, supportsPromptCache: false } }
210+
case "litellm":
211+
return { "litellm/model": { contextWindow: 8192, supportsPromptCache: false } }
212+
default:
213+
return {}
214+
}
215+
})
216+
217+
await webviewMessageHandler(
218+
mockProvider as any,
219+
{
220+
type: "requestRouterModels",
221+
} as any,
222+
)
223+
224+
expect(mockProvider.postMessageToWebview).toHaveBeenCalledWith({
225+
type: "singleRouterModelFetchResponse",
226+
success: false,
227+
error: "DeepSeek API error",
228+
values: { provider: "deepseek" },
229+
})
230+
231+
const call = (mockProvider.postMessageToWebview as any).mock.calls.find(
232+
(c: any[]) => c[0]?.type === "routerModels",
233+
)
234+
expect(call).toBeTruthy()
235+
expect(call[0].routerModels.deepseek).toEqual({})
137236
})
138237

139238
it("supports filtering another single provider ('openrouter')", async () => {

src/core/webview/__tests__/webviewMessageHandler.spec.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,7 @@ describe("webviewMessageHandler - requestRouterModels", () => {
337337
unbound: mockModels,
338338
litellm: mockModels,
339339
roo: {},
340+
deepseek: {},
340341
ollama: {},
341342
lmstudio: {},
342343
"vercel-ai-gateway": mockModels,
@@ -423,6 +424,7 @@ describe("webviewMessageHandler - requestRouterModels", () => {
423424
unbound: mockModels,
424425
roo: {},
425426
litellm: {},
427+
deepseek: {},
426428
ollama: {},
427429
lmstudio: {},
428430
"vercel-ai-gateway": mockModels,
@@ -478,6 +480,7 @@ describe("webviewMessageHandler - requestRouterModels", () => {
478480
unbound: mockModels,
479481
roo: {},
480482
litellm: {},
483+
deepseek: {},
481484
ollama: {},
482485
lmstudio: {},
483486
"vercel-ai-gateway": mockModels,

0 commit comments

Comments
 (0)