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

/**
* 真实用户消息功能测试脚本
* 用于验证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
};