Files
claude-code/src/__tests__/tools.test.ts
T
claude-code-best a28a44f9f7 test: 添加 FileEditTool/permissions/filterToolsByDenyRules 测试
- 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>
2026-04-02 07:36:50 +08:00

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([]);
});
});