224 lines
8.2 KiB
JavaScript
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
|
|
};
|