Files
TJWaterFrontend_Refine/src/lib/chatModels.test.ts
T

65 lines
1.6 KiB
TypeScript

import { fetchAgentModels } from "./chatModels";
const apiFetch = jest.fn();
jest.mock("@/lib/apiFetch", () => ({
apiFetch: (...args: unknown[]) => apiFetch(...args),
}));
describe("fetchAgentModels", () => {
beforeEach(() => {
apiFetch.mockReset();
});
it("loads model options and backend default model", async () => {
apiFetch.mockResolvedValueOnce({
ok: true,
json: async () => ({
default_model: "deepseek/deepseek-v4-flash",
models: [
{
id: "deepseek/deepseek-v4-flash",
label: "快速",
description: "快速回答和任务执行",
icon: "bolt",
},
],
}),
});
await expect(fetchAgentModels()).resolves.toEqual({
defaultModel: "deepseek/deepseek-v4-flash",
models: [
{
id: "deepseek/deepseek-v4-flash",
label: "快速",
description: "快速回答和任务执行",
icon: "bolt",
},
],
});
expect(apiFetch).toHaveBeenCalledWith(
expect.stringContaining("/api/v1/agent/chat/models"),
expect.objectContaining({
method: "GET",
projectHeaderMode: "include",
skipAuthRedirect: true,
}),
);
});
it("falls back to the first option when default model is omitted", async () => {
apiFetch.mockResolvedValueOnce({
ok: true,
json: async () => ({
models: [{ id: "provider/model", label: "Model" }],
}),
});
await expect(fetchAgentModels()).resolves.toEqual({
defaultModel: "provider/model",
models: [{ id: "provider/model", label: "Model" }],
});
});
});