Files
OmniRoute/tests/unit/local-corpus-tools.test.ts
Diego Rodrigues de Sa e Souza 1f04333a19 merge: resolve conflicts for #7904 local corpus context (#8685)
Co-authored-by: ikelvingo <im.kelvinwong@gmail.com>
2026-07-26 12:29:13 -03:00

41 lines
1.6 KiB
TypeScript

import assert from "node:assert/strict";
import test from "node:test";
import { evaluateToolScopes } from "../../open-sse/mcp-server/scopeEnforcement.ts";
import { localCorpusTools } from "../../open-sse/mcp-server/tools/localCorpusTools.ts";
test("local corpus exposes only the three read-only tools", () => {
assert.deepEqual(
localCorpusTools.map((tool) => tool.name),
["local_corpus_status", "local_corpus_search", "local_corpus_read"]
);
for (const tool of localCorpusTools) {
assert.deepEqual(tool.scopes, ["read:local-corpus"]);
}
});
test("local corpus tools require read:local-corpus when scope enforcement is enabled", () => {
for (const tool of localCorpusTools) {
const denied = evaluateToolScopes(tool.name, ["read:health"], true, tool.scopes);
assert.equal(denied.allowed, false);
assert.deepEqual(denied.missing, ["read:local-corpus"]);
const allowed = evaluateToolScopes(tool.name, ["read:local-corpus"], true, tool.scopes);
assert.equal(allowed.allowed, true);
}
});
test("local corpus tool schemas reject invalid input", () => {
const search = localCorpusTools.find((tool) => tool.name === "local_corpus_search");
const read = localCorpusTools.find((tool) => tool.name === "local_corpus_read");
assert.ok(search);
assert.ok(read);
assert.equal(search.inputSchema.safeParse({ query: "" }).success, false);
assert.equal(search.inputSchema.safeParse({ query: "water", limit: 21 }).success, false);
assert.equal(read.inputSchema.safeParse({ relativePath: "" }).success, false);
assert.equal(
read.inputSchema.safeParse({ relativePath: "notes.md", startLine: 0 }).success,
false
);
});