Files
hzdyjs/test/报修人信息自动填充测试.js
T
2025-06-30 20:33:58 +08:00

224 lines
8.2 KiB
JavaScript

/**
* 报修人信息自动填充功能测试
*
* 测试目标:
* 1. 验证前端获取用户详细信息的API调用
* 2. 验证新增报修时自动填充报修人姓名、电话、部门
* 3. 验证后端兜底机制的实现
*/
const axios = require('axios');
const colors = require('colors');
// 配置
const config = {
baseURL: 'http://localhost/dev-api',
timeout: 10000,
clientId: 'e5cd7e4891bf95d1d19206ce24a7b32e'
};
/**
* 获取Token(登录)
*/
async function getToken() {
try {
const { getToken } = require('./quick-token-getter');
return await getToken('admin', 'admin123');
} catch (error) {
console.error('获取Token失败:', error.message);
return null;
}
}
/**
* 获取用户详细信息
*/
async function getUserInfo(token) {
try {
const response = await axios.get(`${config.baseURL}/system/user/getInfo`, {
headers: {
Authorization: `Bearer ${token}`,
clientid: config.clientId,
'Content-Type': 'application/json;charset=utf-8',
},
timeout: config.timeout,
});
if (response.data.code === 200) {
return response.data.data;
} else {
throw new Error(response.data.msg || 'Get user info failed');
}
} catch (error) {
throw new Error(`获取用户信息失败: ${error.message}`);
}
}
/**
* 测试新增报修工单(验证自动填充)
*/
async function testCreateRepairOrder(token, userInfo) {
try {
// 创建测试报修工单数据(不填充报修人信息,测试后端自动填充)
const repairOrderData = {
title: '自动填充测试 - 空调制冷效果差',
description: '办公室空调制冷效果不佳,温度调到最低也不凉快,可能需要清洗或维修。',
repairLocation: '办公楼二楼202办公室',
categoryId: 1,
priorityLevel: 3,
expectedFinishTime: null,
// 故意不填充这些字段,测试后端自动填充
reporterName: '',
reporterPhone: '',
reporterDept: '',
remark: '测试报修人信息自动填充功能'
};
console.log('\n🧪 测试数据(未填充报修人信息):');
console.log('报修人姓名:', repairOrderData.reporterName || '空');
console.log('报修人电话:', repairOrderData.reporterPhone || '空');
console.log('报修人部门:', repairOrderData.reporterDept || '空');
const response = await axios.post(`${config.baseURL}/pm/repairOrder`, repairOrderData, {
headers: {
Authorization: `Bearer ${token}`,
clientid: config.clientId,
'Content-Type': 'application/json;charset=utf-8',
},
timeout: config.timeout,
});
if (response.data.code === 200) {
console.log('\n✅ 报修工单创建成功!');
// 获取创建的工单详情,验证自动填充结果
const orderId = response.data.data || response.data.id;
if (orderId) {
await testGetRepairOrderDetail(token, orderId, userInfo);
}
return response.data;
} else {
throw new Error(response.data.msg || 'Create repair order failed');
}
} catch (error) {
throw new Error(`创建报修工单失败: ${error.message}`);
}
}
/**
* 获取报修工单详情(验证自动填充结果)
*/
async function testGetRepairOrderDetail(token, orderId, expectedUserInfo) {
try {
const response = await axios.get(`${config.baseURL}/pm/repairOrder/${orderId}`, {
headers: {
Authorization: `Bearer ${token}`,
clientid: config.clientId,
'Content-Type': 'application/json;charset=utf-8',
},
timeout: config.timeout,
});
if (response.data.code === 200) {
const orderDetail = response.data.data;
console.log('\n📋 自动填充结果验证:');
console.log('工单编号:', orderDetail.orderNo);
console.log('报修人ID:', orderDetail.reporterId);
console.log('报修人姓名:', orderDetail.reporterName);
console.log('报修人电话:', orderDetail.reporterPhone);
console.log('报修人部门:', orderDetail.reporterDept);
// 验证自动填充结果
console.log('\n🔍 填充结果分析:');
// 验证姓名填充
if (orderDetail.reporterName) {
if (orderDetail.reporterName === expectedUserInfo.user.nickName ||
orderDetail.reporterName === expectedUserInfo.user.userName) {
console.log('✅ 报修人姓名填充成功:', colors.green(orderDetail.reporterName));
} else {
console.log('⚠️ 报修人姓名填充异常:', colors.yellow(orderDetail.reporterName));
}
} else {
console.log('❌ 报修人姓名未填充:', colors.red('空'));
}
// 验证电话填充
if (orderDetail.reporterPhone) {
console.log('✅ 报修人电话填充成功:', colors.green(orderDetail.reporterPhone));
} else {
console.log('❌ 报修人电话未填充:', colors.red('空'));
console.log('🔍 用户信息中的电话:', expectedUserInfo.user.phonenumber || '无');
}
// 验证部门填充
if (orderDetail.reporterDept) {
console.log('✅ 报修人部门填充成功:', colors.green(orderDetail.reporterDept));
} else {
console.log('❌ 报修人部门未填充:', colors.red('空'));
console.log('🔍 用户信息中的部门:', expectedUserInfo.user.deptName || '无');
}
return orderDetail;
} else {
throw new Error(response.data.msg || 'Get repair order detail failed');
}
} catch (error) {
throw new Error(`获取工单详情失败: ${error.message}`);
}
}
/**
* 主测试函数
*/
async function runTest() {
console.log(colors.cyan('🧪 报修人信息自动填充功能测试'));
console.log(colors.cyan('=========================================='));
try {
// 1. 获取Token
console.log('\n1️⃣ 获取登录Token...');
const token = await getToken();
if (!token) {
throw new Error('无法获取有效Token');
}
console.log('✅ Token获取成功');
// 2. 获取用户详细信息
console.log('\n2️⃣ 获取用户详细信息...');
const userInfo = await getUserInfo(token);
console.log('✅ 用户信息获取成功');
console.log('用户名:', userInfo.user.userName);
console.log('昵称:', userInfo.user.nickName);
console.log('电话:', userInfo.user.phonenumber || '无');
console.log('部门:', userInfo.user.deptName || '无');
// 3. 测试创建报修工单(验证自动填充)
console.log('\n3️⃣ 测试创建报修工单(验证自动填充)...');
await testCreateRepairOrder(token, userInfo);
console.log('\n🎉 测试完成!');
console.log('\n📝 测试总结:');
console.log('- 如果报修人姓名填充成功,说明前端或后端的昵称获取正常');
console.log('- 如果报修人电话填充失败,可能的原因:');
console.log(' 1. 数据库中该用户的手机号字段为空');
console.log(' 2. 后端UserService注入或调用有问题');
console.log(' 3. 前端API调用获取的用户信息中phonenumber字段为空');
console.log('- 如果报修人部门填充失败,说明用户的部门信息可能为空');
} catch (error) {
console.error('\n❌ 测试失败:', colors.red(error.message));
}
}
// 运行测试
if (require.main === module) {
runTest();
}
module.exports = {
runTest,
getUserInfo,
testCreateRepairOrder
};