singularity-forge/src/tests/features-inventory-generator.test.ts

69 lines
2.1 KiB
TypeScript

import assert from "node:assert/strict";
import { test } from "vitest";
import {
buildSection,
END,
parseBundledExtensions,
parseKnownProviders,
parseSearchProviders,
START,
updateFeaturesContent,
} from "../../scripts/generate-features-inventory.mjs";
test("features inventory generator surfaces expected workflow tool, extension, search, and provider inventories", () => {
const extensions = parseBundledExtensions();
const searchProviders = parseSearchProviders();
const knownProviders = parseKnownProviders();
assert.ok(extensions.includes("sf"));
assert.ok(extensions.includes("search-the-web"));
assert.ok(extensions.includes("subagent"));
assert.ok(extensions.includes("guardrails"));
assert.ok(extensions.includes("sf-permissions"));
assert.ok(extensions.includes("sf-inturn-guard"));
assert.deepEqual(searchProviders, [
"brave",
"exa",
"ollama",
"serper",
"tavily",
]);
assert.ok(knownProviders.includes("mistral"));
assert.ok(knownProviders.includes("zai"));
assert.ok(knownProviders.includes("kimi-coding"));
assert.ok(knownProviders.includes("xiaomi"));
});
test("features inventory generator injects a rendered appendix between markers", () => {
const original = ["# FEATURES", "", "Intro text.", "", START, END, ""].join(
"\n",
);
const updated = updateFeaturesContent(original);
const generated = buildSection();
assert.match(
updated,
new RegExp(
`${START.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\n\\n### Bundled Extensions`,
),
);
assert.match(updated, /### Bundled Extensions/);
assert.match(updated, /### Search Providers/);
assert.match(updated, /### Known Model Providers/);
assert.match(updated, /- `search-the-web` — \[extension-manifest\.json]/);
assert.match(updated, /- `brave`/);
assert.match(updated, /- `xiaomi`/);
assert.ok(updated.includes(generated));
assert.ok(updated.includes(END));
});
test("features inventory generator fails closed when markers are missing", () => {
assert.throws(
() => updateFeaturesContent("# FEATURES\n\nNo markers here.\n"),
/FEATURES\.md is missing generated inventory markers/,
);
});