feat: 添加DACP服务支持,允许通过命令行调用DACP专业服务,增强AI角色的执行能力,同时更新相关依赖和工具定义。
This commit is contained in:
141
src/tests/integration/dacp-integration.test.js
Normal file
141
src/tests/integration/dacp-integration.test.js
Normal file
@ -0,0 +1,141 @@
|
||||
const PouchCLI = require('../../lib/core/pouch/PouchCLI');
|
||||
|
||||
// Mock fetch for DACP service calls
|
||||
global.fetch = jest.fn();
|
||||
|
||||
describe('DACP Integration Tests', () => {
|
||||
let pouchCLI;
|
||||
|
||||
beforeEach(async () => {
|
||||
pouchCLI = new PouchCLI();
|
||||
await pouchCLI.initialize();
|
||||
fetch.mockClear();
|
||||
});
|
||||
|
||||
test('应该能够通过PouchCLI调用DACP命令', async () => {
|
||||
const mockDACPResponse = {
|
||||
request_id: 'req_123',
|
||||
success: true,
|
||||
data: {
|
||||
execution_result: {
|
||||
message_id: 'msg_456',
|
||||
status: 'sent',
|
||||
recipients: ['demo@example.com'],
|
||||
subject: '会议通知',
|
||||
body: '您好,\n\n给张三发个会议提醒邮件\n\n此邮件由DACP邮件服务自动生成。'
|
||||
},
|
||||
evaluation: {
|
||||
criteria_met: true,
|
||||
quality_score: 95
|
||||
},
|
||||
applied_guidelines: [
|
||||
'HTML格式提升阅读体验',
|
||||
'专业邮件签名'
|
||||
],
|
||||
performance_metrics: {
|
||||
response_time: '150ms',
|
||||
delivery_rate: 100
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
fetch.mockResolvedValueOnce({
|
||||
ok: true,
|
||||
json: async () => mockDACPResponse
|
||||
});
|
||||
|
||||
const args = {
|
||||
service_id: 'dacp-email-service',
|
||||
action: 'send_email',
|
||||
parameters: {
|
||||
user_request: '给张三发个会议提醒邮件',
|
||||
context: { urgency: 'high' }
|
||||
}
|
||||
};
|
||||
|
||||
const result = await pouchCLI.execute('dacp', args);
|
||||
|
||||
// 验证DACP服务被正确调用
|
||||
expect(fetch).toHaveBeenCalledWith('http://localhost:3001/dacp', expect.objectContaining({
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' }
|
||||
}));
|
||||
|
||||
// 验证请求体格式
|
||||
const requestBody = JSON.parse(fetch.mock.calls[0][1].body);
|
||||
expect(requestBody).toEqual({
|
||||
service_id: 'dacp-email-service',
|
||||
action: 'send_email',
|
||||
parameters: {
|
||||
user_request: '给张三发个会议提醒邮件',
|
||||
context: { urgency: 'high' }
|
||||
},
|
||||
request_id: expect.stringMatching(/^req_\d+$/)
|
||||
});
|
||||
|
||||
// 验证返回结果
|
||||
expect(result).toEqual(mockDACPResponse);
|
||||
});
|
||||
|
||||
test('应该正确处理DACP服务不可用的情况', async () => {
|
||||
fetch.mockRejectedValueOnce(new Error('Connection refused'));
|
||||
|
||||
const args = {
|
||||
service_id: 'dacp-email-service',
|
||||
action: 'send_email',
|
||||
parameters: {
|
||||
user_request: '测试邮件'
|
||||
}
|
||||
};
|
||||
|
||||
await expect(pouchCLI.execute('dacp', args))
|
||||
.rejects.toThrow('DACP服务调用失败: Connection refused');
|
||||
});
|
||||
|
||||
test('应该正确处理未知DACP服务的情况', async () => {
|
||||
const args = {
|
||||
service_id: 'unknown-service',
|
||||
action: 'some_action',
|
||||
parameters: {
|
||||
user_request: '测试请求'
|
||||
}
|
||||
};
|
||||
|
||||
await expect(pouchCLI.execute('dacp', args))
|
||||
.rejects.toThrow('未找到DACP服务: unknown-service');
|
||||
});
|
||||
|
||||
test('应该正确处理参数验证错误', async () => {
|
||||
const args = {
|
||||
service_id: 'dacp-email-service',
|
||||
// 缺少action参数
|
||||
parameters: {
|
||||
user_request: '测试邮件'
|
||||
}
|
||||
};
|
||||
|
||||
await expect(pouchCLI.execute('dacp', args))
|
||||
.rejects.toThrow('缺少必需参数: action');
|
||||
});
|
||||
|
||||
test('应该支持多个DACP服务路由', async () => {
|
||||
const mockResponse = { success: true };
|
||||
fetch.mockResolvedValueOnce({
|
||||
ok: true,
|
||||
json: async () => mockResponse
|
||||
});
|
||||
|
||||
// 测试日程服务路由
|
||||
const args = {
|
||||
service_id: 'dacp-calendar-service',
|
||||
action: 'create_meeting',
|
||||
parameters: {
|
||||
user_request: '创建明天的会议'
|
||||
}
|
||||
};
|
||||
|
||||
await pouchCLI.execute('dacp', args);
|
||||
|
||||
expect(fetch).toHaveBeenCalledWith('http://localhost:3002/dacp', expect.any(Object));
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user