Files
claude-code/src/bridge/__tests__/bridgePermissionCallbacks.test.ts
2026-04-17 16:21:27 +08:00

77 lines
2.1 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import { parseBridgePermissionResponse } from '../bridgePermissionCallbacks.js'
import type { SDKControlResponse } from '../../entrypoints/sdk/controlTypes.js'
describe('parseBridgePermissionResponse', () => {
test('passes through allow responses', () => {
const message: SDKControlResponse = {
type: 'control_response',
response: {
subtype: 'success',
request_id: 'req-1',
response: {
behavior: 'allow',
updatedPermissions: [
{ type: 'setMode', mode: 'acceptEdits', destination: 'session' },
],
},
},
}
expect(parseBridgePermissionResponse(message)).toEqual({
behavior: 'allow',
updatedPermissions: [
{ type: 'setMode', mode: 'acceptEdits', destination: 'session' },
],
})
})
test('maps error responses with feedback to deny', () => {
const message = {
type: 'control_response',
response: {
subtype: 'error',
request_id: 'req-2',
error: 'Permission denied by user',
response: { behavior: 'deny' },
message: 'Need more detail',
},
} as unknown as SDKControlResponse
expect(parseBridgePermissionResponse(message)).toEqual({
behavior: 'deny',
message: 'Need more detail',
})
})
test('falls back to error text when deny feedback is absent', () => {
const message = {
type: 'control_response',
response: {
subtype: 'error',
request_id: 'req-3',
error: 'Permission denied by user',
},
} as unknown as SDKControlResponse
expect(parseBridgePermissionResponse(message)).toEqual({
behavior: 'deny',
message: 'Permission denied by user',
})
})
test('returns null for unrelated control responses', () => {
const message = {
type: 'control_response',
response: {
subtype: 'error',
request_id: 'req-4',
error: '',
},
} as unknown as SDKControlResponse
expect(parseBridgePermissionResponse(message)).toBeNull()
})
})