69 lines
2.1 KiB
TypeScript
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/,
|
|
);
|
|
});
|