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

91 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { describe, expect, it } from 'vitest';
import { detectClaudeStartupState } from '@features/workspace-trust/core/application';
describe('StartupDialogRules', () => {
it('detects Claude workspace trust before a prompt-looking screen can be treated as ready', () => {
const state = detectClaudeStartupState(`
>
Quick safety check: Is this a project you created or one you trust?
Yes, I trust this folder
`);
expect(state).toMatchObject({
phase: 'dialog',
ruleId: 'claude.workspace_trust',
});
});
it('detects Claude workspace trust when the TUI collapses prompt spacing', () => {
const state = detectClaudeStartupState(`
Accessingworkspace:
/private/var/folders/project
Quicksafetycheck:Isthisaprojectyoucreatedoroneyoutrust?
ClaudeCode'llbeabletoread,edit,andexecutefileshere.
1.Yes,Itrustthisfolder
2.No,exit
Entertoconfirm·Esctocancel
`);
expect(state).toMatchObject({
phase: 'dialog',
ruleId: 'claude.workspace_trust',
});
});
it('detects Claude workspace trust through conservative fuzzy wording', () => {
const state = detectClaudeStartupState(`
Claude Code can read, edit, and execute files here.
Do you trust this workspace?
1. Yes, trust this workspace
2. No, exit
`);
expect(state).toMatchObject({
phase: 'dialog',
ruleId: 'claude.workspace_trust',
});
});
it('does not classify generic trust copy as Claude trust without Claude-specific context', () => {
expect(
detectClaudeStartupState(`
Do you trust this folder?
Yes, trust this folder
`)
).toEqual({ phase: 'loading' });
});
it('detects the Claude prompt marker only after trust/auth prompts have been ruled out', () => {
expect(detectClaudeStartupState('Claude Code\n>')).toEqual({
phase: 'ready',
evidence: ['claude prompt marker'],
});
});
it('detects Codex update before Codex workspace trust in the known startup chain', () => {
const update = detectClaudeStartupState('Update available\nSkip');
const trust = detectClaudeStartupState(
'Do you trust the contents of this directory?\nYes, continue'
);
expect(update).toMatchObject({
phase: 'dialog',
ruleId: 'codex.update_available',
});
expect(trust).toMatchObject({
phase: 'dialog',
ruleId: 'codex.workspace_trust',
});
});
it('classifies auth prompts as setup required and does not return actions', () => {
const state = detectClaudeStartupState('Log in to Claude to continue');
expect(state).toEqual({
phase: 'setup_required',
code: 'provider_auth_required',
evidence: ['provider auth required prompt'],
});
});
});