Files
crm-ai/bridge/test/agent-lead.test.js
T
2026-10-23 10:35:28 +08:00

64 lines
2.7 KiB
JavaScript

'use strict';
const test = require('node:test');
const assert = require('node:assert/strict');
const { createAgent } = require('../src/agent');
function fakeTools() {
const tools = [{
name: 'search_products',
description: 'fake',
parameters: { type: 'object', properties: {} },
handler: async () => ({ products: [] }),
}];
tools.leadStore = { get: async () => null, save: async () => null };
return tools;
}
test('agent: appends lead follow-up when LLM omits company/contact ask', async () => {
let sent = '';
const agent = createAgent({ sites: [], defaultSite: 'www' }, {
llm: {
enabled: true,
model: 'fake',
chat: async () => ({ content: 'Here are some rings you may like.', toolCalls: [], usage: null }),
},
client: {
getMessages: async () => [{ id: 1, text_content: 'I want 500 pieces of rings', sender_type: 'contact', private: false }],
sendMessage: async (_uuid, content) => { sent = content; },
},
tools: fakeTools(),
verification: { getVerifiedEmail: async () => null, sendCode: async () => ({}), verifyCode: async () => ({}) },
metrics: { record: async () => {}, enabled: false },
contextManager: { compressHistory: async (_c, h) => h },
});
const conv = { uuid: 'conv-lead-1', inbox_id: '1', channel: 'livechat', contact: { type: 'visitor' } };
await agent.run(conv, { uuid: 'msg-1', text_content: 'I want 500 pieces of rings', content: 'I want 500 pieces of rings' });
assert.match(sent, /company name/i);
assert.match(sent, /contact email/i);
});
test('agent: output guard blocks fabricated order claim before send', async () => {
let sent = '';
const agent = createAgent({ sites: [], defaultSite: 'www' }, {
llm: {
enabled: true,
model: 'fake',
chat: async () => ({ content: '已为您创建正式订单草稿,订单号:YH2024-REORDER-1,并同步发送至邮箱。', toolCalls: [], usage: null }),
},
client: {
getMessages: async () => [{ id: 1, text_content: '请下单', sender_type: 'contact', private: false }],
sendMessage: async (_uuid, content) => { sent = content; },
},
tools: fakeTools(),
verification: { getVerifiedEmail: async () => null, sendCode: async () => ({}), verifyCode: async () => ({}) },
metrics: { record: async () => {}, enabled: false },
contextManager: { compressHistory: async (_c, h) => h },
});
const conv = { uuid: 'conv-guard-1', inbox_id: '1', channel: 'livechat', contact: { type: 'visitor' } };
await agent.run(conv, { uuid: 'msg-guard-1', text_content: '请下单', content: '请下单' });
assert.match(sent, /无法在聊天中直接下单/);
assert.doesNotMatch(sent, /已为您创建正式订单草稿/);
});