75 lines
2.3 KiB
TypeScript
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',
|
|
});
|
|
});
|
|
});
|