111 lines
3.9 KiB
TypeScript
111 lines
3.9 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
import { buildModelStatusSnapshotFromRecords } from "../src/model/catalog.js";
|
|
|
|
test("buildModelStatusSnapshotFromRecords returns empty guidance when model is set and valid", () => {
|
|
const snapshot = buildModelStatusSnapshotFromRecords(
|
|
[{ provider: "anthropic", id: "claude-opus-4-6" }],
|
|
[{ provider: "anthropic", id: "claude-opus-4-6" }],
|
|
"anthropic/claude-opus-4-6",
|
|
);
|
|
|
|
assert.equal(snapshot.currentValid, true);
|
|
assert.equal(snapshot.current, "anthropic/claude-opus-4-6");
|
|
assert.equal(snapshot.guidance.length, 0);
|
|
});
|
|
|
|
test("buildModelStatusSnapshotFromRecords emits guidance when no models are available", () => {
|
|
const snapshot = buildModelStatusSnapshotFromRecords([], [], undefined);
|
|
|
|
assert.equal(snapshot.currentValid, false);
|
|
assert.equal(snapshot.current, undefined);
|
|
assert.equal(snapshot.recommended, undefined);
|
|
assert.ok(snapshot.guidance.some((line) => line.includes("No authenticated Pi models")));
|
|
});
|
|
|
|
test("buildModelStatusSnapshotFromRecords emits guidance when no default model is set", () => {
|
|
const snapshot = buildModelStatusSnapshotFromRecords(
|
|
[{ provider: "openai", id: "gpt-5.4" }],
|
|
[{ provider: "openai", id: "gpt-5.4" }],
|
|
undefined,
|
|
);
|
|
|
|
assert.equal(snapshot.currentValid, false);
|
|
assert.equal(snapshot.current, undefined);
|
|
assert.ok(snapshot.guidance.some((line) => line.includes("No default research model")));
|
|
});
|
|
|
|
test("buildModelStatusSnapshotFromRecords marks provider as configured only when it has available models", () => {
|
|
const snapshot = buildModelStatusSnapshotFromRecords(
|
|
[
|
|
{ provider: "anthropic", id: "claude-opus-4-6" },
|
|
{ provider: "openai", id: "gpt-5.4" },
|
|
],
|
|
[{ provider: "openai", id: "gpt-5.4" }],
|
|
"openai/gpt-5.4",
|
|
);
|
|
|
|
const anthropicProvider = snapshot.providers.find((provider) => provider.id === "anthropic");
|
|
const openaiProvider = snapshot.providers.find((provider) => provider.id === "openai");
|
|
|
|
assert.ok(anthropicProvider);
|
|
assert.equal(anthropicProvider!.configured, false);
|
|
assert.equal(anthropicProvider!.supportedModels, 1);
|
|
assert.equal(anthropicProvider!.availableModels, 0);
|
|
|
|
assert.ok(openaiProvider);
|
|
assert.equal(openaiProvider!.configured, true);
|
|
assert.equal(openaiProvider!.supportedModels, 1);
|
|
assert.equal(openaiProvider!.availableModels, 1);
|
|
});
|
|
|
|
test("buildModelStatusSnapshotFromRecords marks provider as current when selected model belongs to it", () => {
|
|
const snapshot = buildModelStatusSnapshotFromRecords(
|
|
[
|
|
{ provider: "anthropic", id: "claude-opus-4-6" },
|
|
{ provider: "openai", id: "gpt-5.4" },
|
|
],
|
|
[
|
|
{ provider: "anthropic", id: "claude-opus-4-6" },
|
|
{ provider: "openai", id: "gpt-5.4" },
|
|
],
|
|
"anthropic/claude-opus-4-6",
|
|
);
|
|
|
|
const anthropicProvider = snapshot.providers.find((provider) => provider.id === "anthropic");
|
|
const openaiProvider = snapshot.providers.find((provider) => provider.id === "openai");
|
|
|
|
assert.equal(anthropicProvider!.current, true);
|
|
assert.equal(openaiProvider!.current, false);
|
|
});
|
|
|
|
test("buildModelStatusSnapshotFromRecords returns available models sorted by research preference", () => {
|
|
const snapshot = buildModelStatusSnapshotFromRecords(
|
|
[
|
|
{ provider: "openai", id: "gpt-5.4" },
|
|
{ provider: "anthropic", id: "claude-opus-4-6" },
|
|
],
|
|
[
|
|
{ provider: "openai", id: "gpt-5.4" },
|
|
{ provider: "anthropic", id: "claude-opus-4-6" },
|
|
],
|
|
undefined,
|
|
);
|
|
|
|
assert.equal(snapshot.availableModels[0], "anthropic/claude-opus-4-6");
|
|
assert.equal(snapshot.availableModels[1], "openai/gpt-5.4");
|
|
assert.equal(snapshot.recommended, "anthropic/claude-opus-4-6");
|
|
});
|
|
|
|
test("buildModelStatusSnapshotFromRecords sets currentValid false when current model is not in available list", () => {
|
|
const snapshot = buildModelStatusSnapshotFromRecords(
|
|
[{ provider: "anthropic", id: "claude-opus-4-6" }],
|
|
[],
|
|
"anthropic/claude-opus-4-6",
|
|
);
|
|
|
|
assert.equal(snapshot.currentValid, false);
|
|
assert.equal(snapshot.current, "anthropic/claude-opus-4-6");
|
|
});
|