141 lines
3.7 KiB
JavaScript
141 lines
3.7 KiB
JavaScript
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));
|
|
});
|
|
}); |