mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-17 13:55:50 +00:00
86 lines
2.6 KiB
TypeScript
86 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([])
|
|
})
|
|
})
|