|
1 | 1 | import { describe, it, expect, vi, beforeEach } from "vitest" |
2 | 2 | import { webviewMessageHandler } from "../webviewMessageHandler" |
| 3 | +import type { WebviewMessage } from "@roo-code/types" |
| 4 | + |
3 | 5 | import type { ClineProvider } from "../ClineProvider" |
4 | 6 |
|
5 | 7 | // Mock vscode (minimal) |
@@ -37,10 +39,16 @@ vi.mock("vscode", () => ({ |
37 | 39 | // Mock modelCache getModels/flushModels used by the handler |
38 | 40 | const getModelsMock = vi.fn() |
39 | 41 | const flushModelsMock = vi.fn() |
| 42 | +const kimiCodeGetAccessTokenMock = vi.fn() |
40 | 43 | vi.mock("../../../api/providers/fetchers/modelCache", () => ({ |
41 | 44 | getModels: (...args: any[]) => getModelsMock(...args), |
42 | 45 | flushModels: (...args: any[]) => flushModelsMock(...args), |
43 | 46 | })) |
| 47 | +vi.mock("../../../integrations/kimi-code/oauth", () => ({ |
| 48 | + kimiCodeOAuthManager: { |
| 49 | + getAccessToken: (...args: unknown[]) => kimiCodeGetAccessTokenMock(...args), |
| 50 | + }, |
| 51 | +})) |
44 | 52 |
|
45 | 53 | describe("webviewMessageHandler - requestRouterModels provider filter", () => { |
46 | 54 | let mockProvider: ClineProvider & { |
@@ -296,6 +304,31 @@ describe("webviewMessageHandler - requestRouterModels provider filter", () => { |
296 | 304 | }) |
297 | 305 | }) |
298 | 306 |
|
| 307 | + it("continues posting routerModels when Kimi Code OAuth lookup fails", async () => { |
| 308 | + mockProvider.getState.mockResolvedValue({ |
| 309 | + apiConfiguration: { |
| 310 | + kimiCodeAuthMethod: "oauth", |
| 311 | + }, |
| 312 | + }) |
| 313 | + kimiCodeGetAccessTokenMock.mockRejectedValueOnce(new Error("refresh failed")) |
| 314 | + |
| 315 | + await webviewMessageHandler(mockProvider, { |
| 316 | + type: "requestRouterModels", |
| 317 | + values: { provider: "kimi-code" }, |
| 318 | + } satisfies WebviewMessage) |
| 319 | + |
| 320 | + expect(kimiCodeGetAccessTokenMock).toHaveBeenCalledOnce() |
| 321 | + expect(mockProvider.log).toHaveBeenCalledWith( |
| 322 | + "[requestRouterModels] kimi-code credential lookup failed: refresh failed", |
| 323 | + ) |
| 324 | + expect(getModelsMock).not.toHaveBeenCalledWith(expect.objectContaining({ provider: "kimi-code" })) |
| 325 | + expect(mockProvider.postMessageToWebview).toHaveBeenCalledWith({ |
| 326 | + type: "routerModels", |
| 327 | + routerModels: {}, |
| 328 | + values: { provider: "kimi-code" }, |
| 329 | + }) |
| 330 | + }) |
| 331 | + |
299 | 332 | it("fetches Moonshot models when stored Moonshot credentials exist", async () => { |
300 | 333 | mockProvider.getState.mockResolvedValue({ |
301 | 334 | apiConfiguration: { |
|
0 commit comments