agent-ecosystem/test/features/workspace-trust/core/ClaudePreflightCommand.test.ts
2026-05-13 17:56:00 +03:00

75 lines
2.3 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { buildClaudeWorkspaceTrustPreflightArgs } from '@features/workspace-trust/core/application';
describe('ClaudePreflightCommand', () => {
it('builds the protected modern Claude workspace trust command args', () => {
const result = buildClaudeWorkspaceTrustPreflightArgs({
emptyMcpConfigPath: '/tmp/empty-mcp.json',
});
expect(result).toEqual({
ok: true,
args: [
'--bare',
'--strict-mcp-config',
'--mcp-config',
'/tmp/empty-mcp.json',
'--setting-sources',
'user',
'--settings',
'{"disableAllHooks":true}',
'--tools',
'',
],
omittedFlags: [],
});
});
it('allows the strict protected fallback without bare but never falls back to plain Claude', () => {
const result = buildClaudeWorkspaceTrustPreflightArgs({
emptyMcpConfigPath: '/tmp/empty-mcp.json',
capabilities: { bare: false },
});
expect(result.ok).toBe(true);
if (result.ok) {
expect(result.args).not.toContain('--bare');
expect(result.args).toContain('--strict-mcp-config');
expect(result.args).toContain('--setting-sources');
expect(result.omittedFlags).toEqual(['--bare']);
}
});
it('returns a soft unavailable result when protected flags are missing', () => {
const result = buildClaudeWorkspaceTrustPreflightArgs({
emptyMcpConfigPath: '/tmp/empty-mcp.json',
capabilities: { strictMcpConfig: false },
});
expect(result).toEqual({
ok: false,
code: 'preflight_unavailable_or_unprotected',
message:
'Claude workspace trust preflight is unavailable because protected flags are missing: strictMcpConfig',
});
});
it('does not build a command when hook and tool isolation flags are unavailable', () => {
const result = buildClaudeWorkspaceTrustPreflightArgs({
emptyMcpConfigPath: '/tmp/empty-mcp.json',
capabilities: {
settingSources: false,
inlineSettings: false,
tools: false,
},
});
expect(result).toEqual({
ok: false,
code: 'preflight_unavailable_or_unprotected',
message:
'Claude workspace trust preflight is unavailable because protected flags are missing: settingSources, inlineSettings, tools',
});
});
});