a28a44f9f7
- FileEditTool/utils.test.ts: 24 tests (normalizeQuotes, stripTrailingWhitespace, findActualString, preserveQuoteStyle, applyEditToFile) - permissions/permissions.test.ts: 13 tests (getDenyRuleForTool, getAskRuleForTool, getDenyRuleForAgent, filterDeniedAgents) - tools.test.ts: 扩展 5 tests (filterToolsByDenyRules 过滤逻辑) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
83 lines
2.6 KiB
TypeScript
83 lines
2.6 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
import { parseToolPreset, filterToolsByDenyRules } from "../tools";
|
|
import { getEmptyToolPermissionContext } from "../Tool";
|
|
|
|
describe("parseToolPreset", () => {
|
|
test('returns "default" for "default" input', () => {
|
|
expect(parseToolPreset("default")).toBe("default");
|
|
});
|
|
|
|
test('returns "default" for "Default" input (case-insensitive)', () => {
|
|
expect(parseToolPreset("Default")).toBe("default");
|
|
});
|
|
|
|
test("returns null for unknown preset", () => {
|
|
expect(parseToolPreset("unknown")).toBeNull();
|
|
});
|
|
|
|
test("returns null for empty string", () => {
|
|
expect(parseToolPreset("")).toBeNull();
|
|
});
|
|
|
|
test("returns null for random string", () => {
|
|
expect(parseToolPreset("custom-preset")).toBeNull();
|
|
});
|
|
});
|
|
|
|
// ─── filterToolsByDenyRules ─────────────────────────────────────────────
|
|
|
|
describe("filterToolsByDenyRules", () => {
|
|
const mockTools = [
|
|
{ name: "Bash", mcpInfo: undefined },
|
|
{ name: "Read", mcpInfo: undefined },
|
|
{ name: "Write", mcpInfo: undefined },
|
|
{ name: "mcp__server__tool", mcpInfo: { serverName: "server", toolName: "tool" } },
|
|
];
|
|
|
|
test("returns all tools when no deny rules", () => {
|
|
const ctx = getEmptyToolPermissionContext();
|
|
const result = filterToolsByDenyRules(mockTools, ctx);
|
|
expect(result).toHaveLength(4);
|
|
});
|
|
|
|
test("filters out denied tool by name", () => {
|
|
const ctx = {
|
|
...getEmptyToolPermissionContext(),
|
|
alwaysDenyRules: {
|
|
localSettings: ["Bash"],
|
|
},
|
|
};
|
|
const result = filterToolsByDenyRules(mockTools, ctx as any);
|
|
expect(result.find((t) => t.name === "Bash")).toBeUndefined();
|
|
expect(result).toHaveLength(3);
|
|
});
|
|
|
|
test("filters out multiple denied tools", () => {
|
|
const ctx = {
|
|
...getEmptyToolPermissionContext(),
|
|
alwaysDenyRules: {
|
|
localSettings: ["Bash", "Write"],
|
|
},
|
|
};
|
|
const result = filterToolsByDenyRules(mockTools, ctx as any);
|
|
expect(result).toHaveLength(2);
|
|
expect(result.map((t) => t.name)).toEqual(["Read", "mcp__server__tool"]);
|
|
});
|
|
|
|
test("returns empty array when all tools denied", () => {
|
|
const ctx = {
|
|
...getEmptyToolPermissionContext(),
|
|
alwaysDenyRules: {
|
|
localSettings: mockTools.map((t) => t.name),
|
|
},
|
|
};
|
|
const result = filterToolsByDenyRules(mockTools, ctx as any);
|
|
expect(result).toHaveLength(0);
|
|
});
|
|
|
|
test("handles empty tools array", () => {
|
|
const ctx = getEmptyToolPermissionContext();
|
|
expect(filterToolsByDenyRules([], ctx)).toEqual([]);
|
|
});
|
|
});
|