You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
5.8 KiB
192 lines
5.8 KiB
/**
|
|
* 真实用户消息功能测试脚本
|
|
* 用于验证fetchHistoryMessages和handleHistoryMessages函数对真实用户ID的处理
|
|
*/
|
|
|
|
// 模拟测试数据
|
|
const mockRealUserData = {
|
|
userId: "user_1763452685075_rea007flq",
|
|
isRealUserId: true,
|
|
isManager: true,
|
|
managerId: 22
|
|
};
|
|
|
|
// 模拟消息数据
|
|
const mockMessages = [
|
|
{
|
|
message_id: "msg_001",
|
|
sender_id: "user_1763452685075_rea007flq",
|
|
receiver_id: "manager_22",
|
|
content: "这是一条来自真实用户的消息",
|
|
created_at: Date.now() - 3600000,
|
|
content_type: 1
|
|
},
|
|
{
|
|
message_id: "msg_002",
|
|
sender_id: "manager_22",
|
|
receiver_id: "user_1763452685075_rea007flq",
|
|
content: "这是客服回复的消息",
|
|
created_at: Date.now() - 3500000,
|
|
content_type: 1
|
|
},
|
|
{
|
|
message_id: "msg_003",
|
|
sender_id: "user_1763452685075_rea007flq",
|
|
receiver_id: "manager_22",
|
|
content: "这是真实用户的第二条消息",
|
|
created_at: Date.now() - 3400000,
|
|
content_type: 1
|
|
}
|
|
];
|
|
|
|
console.log('\n=== 真实用户消息功能测试 ===');
|
|
console.log('测试数据:', mockRealUserData);
|
|
console.log('模拟消息数量:', mockMessages.length);
|
|
|
|
// 模拟fetchHistoryMessages中对真实用户ID的处理
|
|
function simulateRealUserIdProcessing(data) {
|
|
console.log('\n1. 测试真实用户ID识别...');
|
|
|
|
// 模拟识别逻辑
|
|
const isRealUserId = data.isRealUserId ||
|
|
(data.userId &&
|
|
data.userId.startsWith('user_') &&
|
|
data.userId.includes('_rea'));
|
|
|
|
console.log('- 识别结果:', isRealUserId ? '✅ 成功识别为真实用户ID' : '❌ 未能识别为真实用户ID');
|
|
return isRealUserId;
|
|
}
|
|
|
|
// 模拟构建请求数据
|
|
function simulateRequestData(isRealUserId, data) {
|
|
console.log('\n2. 测试请求数据构建...');
|
|
|
|
const requestData = {
|
|
type: 'get_messages',
|
|
conversationId: "test_conversation",
|
|
page: 1,
|
|
limit: 100,
|
|
userId: "manager_22",
|
|
targetUserId: data.userId,
|
|
userType: data.isManager ? 'manager' : 'user',
|
|
managerId: data.isManager ? data.managerId : undefined,
|
|
timestamp: Date.now(),
|
|
isRealUser: isRealUserId,
|
|
queryByUserId: true
|
|
};
|
|
|
|
// 真实用户特殊处理
|
|
if (isRealUserId) {
|
|
requestData.real_user_id = data.userId;
|
|
}
|
|
|
|
console.log('- 构建的请求数据:');
|
|
console.log(' - 是否包含isRealUser标志:', requestData.isRealUser !== undefined);
|
|
console.log(' - 是否包含real_user_id:', requestData.real_user_id !== undefined);
|
|
console.log(' - 是否包含queryByUserId:', requestData.queryByUserId !== undefined);
|
|
|
|
return requestData;
|
|
}
|
|
|
|
// 模拟消息格式化和处理
|
|
function simulateMessageProcessing(messages, userId) {
|
|
console.log('\n3. 测试消息格式化和处理...');
|
|
|
|
// 模拟格式化逻辑
|
|
const formattedMessages = messages.map(msg => {
|
|
const senderId = msg.sender_id || msg.senderId || '';
|
|
const isRealUserMessage = senderId === userId ||
|
|
(senderId && senderId.startsWith('user_') && senderId.includes('_rea'));
|
|
|
|
return {
|
|
id: msg.message_id,
|
|
content: msg.content,
|
|
senderId: senderId,
|
|
receiverId: msg.receiver_id || msg.receiverId || '',
|
|
isRealUserMessage: isRealUserMessage,
|
|
time: new Date(msg.created_at).toLocaleString(),
|
|
timestamp: msg.created_at
|
|
};
|
|
});
|
|
|
|
// 模拟排序
|
|
formattedMessages.sort((a, b) => a.timestamp - b.timestamp);
|
|
|
|
// 统计真实用户消息
|
|
const realUserMessages = formattedMessages.filter(msg => msg.isRealUserMessage);
|
|
|
|
console.log('- 格式化后的消息总数:', formattedMessages.length);
|
|
console.log('- 识别出的真实用户消息数量:', realUserMessages.length);
|
|
console.log('- 真实用户消息详情:');
|
|
realUserMessages.forEach(msg => {
|
|
console.log(` - 消息ID: ${msg.id}, 内容: ${msg.content.substring(0, 20)}...`);
|
|
});
|
|
|
|
return {
|
|
allMessages: formattedMessages,
|
|
realUserMessages: realUserMessages
|
|
};
|
|
}
|
|
|
|
// 运行完整测试
|
|
function runFullTest() {
|
|
try {
|
|
console.log('\n🚀 开始执行完整测试流程...');
|
|
|
|
// 1. 测试真实用户ID识别
|
|
const isRealUserId = simulateRealUserIdProcessing(mockRealUserData);
|
|
|
|
// 2. 测试请求数据构建
|
|
const requestData = simulateRequestData(isRealUserId, mockRealUserData);
|
|
|
|
// 3. 测试消息格式化和处理
|
|
const processedData = simulateMessageProcessing(mockMessages, mockRealUserData.userId);
|
|
|
|
// 4. 验证结果
|
|
console.log('\n4. 验证最终结果...');
|
|
|
|
let allTestsPassed = true;
|
|
|
|
// 验证真实用户ID识别
|
|
if (!isRealUserId) {
|
|
console.log('❌ 测试失败: 未能正确识别真实用户ID');
|
|
allTestsPassed = false;
|
|
}
|
|
|
|
// 验证请求数据包含必要字段
|
|
if (!requestData.isRealUser || !requestData.real_user_id) {
|
|
console.log('❌ 测试失败: 请求数据缺少必要的真实用户字段');
|
|
allTestsPassed = false;
|
|
}
|
|
|
|
// 验证真实用户消息识别
|
|
if (processedData.realUserMessages.length !== 2) {
|
|
console.log(`❌ 测试失败: 预期识别2条真实用户消息,实际识别${processedData.realUserMessages.length}条`);
|
|
allTestsPassed = false;
|
|
}
|
|
|
|
// 输出最终结果
|
|
console.log('\n=== 测试结果汇总 ===');
|
|
if (allTestsPassed) {
|
|
console.log('✅ 所有测试通过!真实用户消息功能正常工作');
|
|
} else {
|
|
console.log('❌ 部分测试失败,请检查代码实现');
|
|
}
|
|
|
|
return allTestsPassed;
|
|
} catch (error) {
|
|
console.error('\n❌ 测试执行过程中出错:', error.message);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// 执行测试
|
|
const testResult = runFullTest();
|
|
console.log('\n=== 测试完成 ===');
|
|
|
|
// 导出测试函数供其他模块使用
|
|
module.exports = {
|
|
runTest: runFullTest,
|
|
mockRealUserData,
|
|
mockMessages
|
|
};
|
|
|