fix startup packaging and content guardrails
This commit is contained in:
110
tests/catalog-snapshot.test.ts
Normal file
110
tests/catalog-snapshot.test.ts
Normal file
@@ -0,0 +1,110 @@
|
||||
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");
|
||||
});
|
||||
Reference in New Issue
Block a user