ClaudeCliProtocol.mock.test.js
1.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/**
* ClaudeCliProtocol · mock 模式 smoke test
*/
const { ClaudeCliProtocol } = require('./ClaudeCliProtocol');
describe('ClaudeCliProtocol · mock mode', () => {
it('connect is no-op in mock mode', async () => {
const p = new ClaudeCliProtocol({ name: 'devloop-pm' }, { mock: true });
await p.connect(null, process.cwd());
expect(p.isConnected).toBe(true);
p.disconnect();
});
it('sendPrompt emits chunks + session/result from fixture', async () => {
const p = new ClaudeCliProtocol({ name: 'devloop-pm' }, { mock: true });
await p.connect(null, process.cwd());
const chunks = [];
let result = null;
p.on('session_update', (u) => {
if (u.update?.sessionUpdate === 'agent_message_chunk') {
chunks.push(u.update.content.text);
}
});
p.on('acp_event', (ev) => {
if (ev.method === 'session/result') result = ev.params;
});
await p.sendPrompt('please plan the work');
expect(chunks.length).toBeGreaterThan(0);
expect(result).not.toBeNull();
expect(result.mock).toBe(true);
expect(result.stop_reason).toBe('end_turn');
p.disconnect();
});
it('falls back to echo response when no fixture matches', async () => {
const p = new ClaudeCliProtocol(
{ name: 'no-such-agent-zzz' },
{ mock: true, mockFixtureDir: '/tmp/devloop-mock-empty-' + Date.now() },
);
await p.connect(null, process.cwd());
let result = null;
p.on('acp_event', (ev) => { if (ev.method === 'session/result') result = ev.params; });
await p.sendPrompt('hello');
expect(result.result).toMatch(/mock-ok/);
p.disconnect();
});
});