import assert from "node:assert/strict"; import test from "node:test"; import { parsePublicModelCatalog, resolveSessionModelId, } from "../src/lib/public-models.ts"; const publicPayload = { defaultModelId: "deepseek-pro", models: [ { id: "deepseek-pro", label: "DeepSeek V4 Pro", description: "复杂分析", creditCost: 1, isDefault: true, }, { id: "gpt-mini", label: "ChatGPT Mini", description: "均衡响应", creditCost: 1, isDefault: false, }, ], } as const; test("parses a sanitized public model catalog", () => { // Given const payload: unknown = publicPayload; // When const catalog = parsePublicModelCatalog(payload); // Then assert.equal(catalog.defaultModelId, "deepseek-pro"); assert.equal(catalog.models.length, 2); assert.equal(catalog.models[0]?.label, "DeepSeek V4 Pro"); }); test("rejects provider routing fields in a public model payload", () => { // Given const payload = { ...publicPayload, models: [{ ...publicPayload.models[0], baseURL: "https://api.deepseek.com", apiKeyEnv: "DEEPSEEK_API_KEY", }], }; // When const parse = () => parsePublicModelCatalog(payload); // Then assert.throws(parse); }); test("rejects a default model that is absent from the public list", () => { // Given const payload = { ...publicPayload, defaultModelId: "removed-model", }; // When const parse = () => parsePublicModelCatalog(payload); // Then assert.throws(parse); }); test("keeps a saved model that remains available", () => { // Given const catalog = parsePublicModelCatalog(publicPayload); // When const result = resolveSessionModelId("gpt-mini", catalog); // Then assert.deepEqual(result, { modelId: "gpt-mini", fellBack: false }); }); test("falls back to the configured default when a saved model is removed", () => { // Given const catalog = parsePublicModelCatalog(publicPayload); // When const result = resolveSessionModelId("removed-model", catalog); // Then assert.deepEqual(result, { modelId: "deepseek-pro", fellBack: true }); });