import { describe, expect, it } from 'vitest' import { resolveToolAutoApprovalDecision } from './BasePermissionHandler' describe('resolveToolAutoApprovalDecision skill_lookup', () => { it.each([ 'skill_lookup', 'hapi_skill_lookup', 'happy__skill_lookup', 'mcp__hapi__skill_lookup' ])('auto-approves the exact read-only HAPI tool name %s', (toolName) => { expect(resolveToolAutoApprovalDecision( 'default', toolName, 'call-1' )).toBe('approved') }) it('does not approve another tool solely from a skill-looking call id', () => { expect(resolveToolAutoApprovalDecision( 'default', 'dangerous_tool', 'skill_lookup-forged-id' )).toBeNull() }) it('does not approve another tool whose name only contains skill_lookup', () => { expect(resolveToolAutoApprovalDecision( 'default', 'skill_lookup_write_file', 'call-1' )).toBeNull() expect(resolveToolAutoApprovalDecision( 'default', 'dangerous_skill_lookup', 'call-2' )).toBeNull() }) }) describe('resolveToolAutoApprovalDecision ping_peer', () => { it.each([ 'ping_peer', 'mcp__hapi__ping_peer', 'hapi_ping_peer', 'Ping Peer Session' ])('does not auto-approve %s in default mode', (toolName) => { expect(resolveToolAutoApprovalDecision('default', toolName, 'call-1')).toBeNull() }) it.each([ 'ping_peer', 'mcp__hapi__ping_peer', 'hapi_ping_peer', 'Ping Peer Session' ])('does not auto-approve %s in read-only mode', (toolName) => { expect(resolveToolAutoApprovalDecision('read-only', toolName, 'call-1')).toBeNull() }) it('still auto-approves unrelated read tools in read-only mode', () => { expect(resolveToolAutoApprovalDecision('read-only', 'Read', 'call-1')).toBe('approved') expect(resolveToolAutoApprovalDecision('read-only', 'grep', 'call-2')).toBe('approved') }) }) describe('resolveToolAutoApprovalDecision inspect_peer', () => { it.each([ 'inspect_peer', 'mcp__hapi__inspect_peer', 'hapi_inspect_peer', 'Inspect Peer Session' ])('does not auto-approve %s in default mode', (toolName) => { expect(resolveToolAutoApprovalDecision('default', toolName, 'call-1')).toBeNull() }) it.each([ 'inspect_peer', 'mcp__hapi__inspect_peer', 'hapi_inspect_peer', 'Inspect Peer Session' ])('does not auto-approve %s in read-only mode', (toolName) => { expect(resolveToolAutoApprovalDecision('read-only', toolName, 'call-1')).toBeNull() }) })