takt/src/__tests__/permission-profile-resolution.test.ts

62 lines
1.6 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { resolveMovementPermissionMode } from '../core/piece/permission-profile-resolution.js';
describe('resolveMovementPermissionMode', () => {
it('applies required_permission_mode as minimum floor', () => {
const mode = resolveMovementPermissionMode({
movementName: 'implement',
requiredPermissionMode: 'full',
provider: 'codex',
projectProviderProfiles: {
codex: {
defaultPermissionMode: 'readonly',
},
},
});
expect(mode).toBe('full');
});
it('resolves by priority: project override > global override > project default > global default', () => {
const mode = resolveMovementPermissionMode({
movementName: 'supervise',
provider: 'codex',
projectProviderProfiles: {
codex: {
defaultPermissionMode: 'edit',
movementPermissionOverrides: {
supervise: 'full',
},
},
},
globalProviderProfiles: {
codex: {
defaultPermissionMode: 'readonly',
movementPermissionOverrides: {
supervise: 'edit',
},
},
},
});
expect(mode).toBe('full');
});
it('throws when unresolved', () => {
expect(() => resolveMovementPermissionMode({
movementName: 'fix',
provider: 'codex',
})).toThrow(/Unable to resolve permission mode/);
});
it('resolves from required_permission_mode when provider is omitted', () => {
const mode = resolveMovementPermissionMode({
movementName: 'fix',
requiredPermissionMode: 'edit',
});
expect(mode).toBe('edit');
});
});