Files
autoAiWorkSys/api/tests/invite_register.test.js
张成 6cdc0120d2 41
2025-12-19 23:50:39 +08:00

341 lines
11 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 邀请注册功能测试
* 测试新用户注册试用期和邀请人奖励逻辑
*/
const dayjs = require('dayjs');
// 模拟数据库模型
const mockModels = {
pla_account: {
findOne: null,
create: null,
update: null
},
invite_record: {
create: null
}
};
describe('邀请注册功能测试', () => {
/**
* 测试1: 新用户注册应该获得3天试用期
*/
test('新用户注册应该获得3天试用期', () => {
console.log('\n【测试1】新用户注册应该获得3天试用期');
// 模拟新用户数据
const newUserData = {
name: 'testuser',
sn_code: 'SN12345',
device_id: '',
platform_type: 'boss',
login_name: 'test@example.com',
pwd: 'hashed_password',
keyword: '',
is_enabled: 1,
is_delete: 0,
authorization_date: new Date(),
authorization_days: 3
};
// 验证授权日期不为空
if (!newUserData.authorization_date) {
throw new Error('❌ 失败: 新用户授权日期为空');
}
// 验证授权天数为3
if (newUserData.authorization_days !== 3) {
throw new Error(`❌ 失败: 新用户授权天数应为3天实际为 ${newUserData.authorization_days}`);
}
console.log('✅ 通过: 新用户授权日期:', newUserData.authorization_date);
console.log('✅ 通过: 新用户授权天数:', newUserData.authorization_days, '天');
});
/**
* 测试2: 邀请人授权未过期时应该累加3天
*/
test('邀请人授权未过期时应该累加3天', () => {
console.log('\n【测试2】邀请人授权未过期时应该累加3天');
// 模拟邀请人当前数据还有5天有效期
const inviterData = {
id: 1,
authorization_date: dayjs().subtract(2, 'day').toDate(), // 2天前开始
authorization_days: 7 // 总共7天还剩5天
};
// 计算当前剩余天数
const currentEndDate = dayjs(inviterData.authorization_date).add(inviterData.authorization_days, 'day');
const now = dayjs();
const remainingDays = currentEndDate.diff(now, 'day');
console.log('邀请人当前授权:', {
开始日期: dayjs(inviterData.authorization_date).format('YYYY-MM-DD'),
授权天数: inviterData.authorization_days,
剩余天数: remainingDays,
过期日期: currentEndDate.format('YYYY-MM-DD')
});
// 模拟邀请逻辑:未过期应该累加
let newAuthDate = inviterData.authorization_date;
let newAuthDays = inviterData.authorization_days + 3;
if (!currentEndDate.isBefore(now)) {
// 未过期累加3天
console.log('✅ 通过: 授权未过期累加3天');
console.log('新授权天数:', newAuthDays, '天 (原', inviterData.authorization_days, '天 + 3天)');
if (newAuthDays !== inviterData.authorization_days + 3) {
throw new Error('❌ 失败: 授权天数计算错误');
}
} else {
throw new Error('❌ 失败: 测试场景错误,授权应该未过期');
}
});
/**
* 测试3: 邀请人授权已过期时应该重新激活给3天
*/
test('邀请人授权已过期时应该重新激活给3天', () => {
console.log('\n【测试3】邀请人授权已过期时应该重新激活给3天');
// 模拟邀请人当前数据(已过期)
const inviterData = {
id: 2,
authorization_date: dayjs().subtract(10, 'day').toDate(), // 10天前开始
authorization_days: 5 // 只有5天早已过期
};
// 计算当前剩余天数
const currentEndDate = dayjs(inviterData.authorization_date).add(inviterData.authorization_days, 'day');
const now = dayjs();
const daysExpired = now.diff(currentEndDate, 'day');
console.log('邀请人当前授权:', {
开始日期: dayjs(inviterData.authorization_date).format('YYYY-MM-DD'),
授权天数: inviterData.authorization_days,
过期日期: currentEndDate.format('YYYY-MM-DD'),
已过期天数: daysExpired
});
// 模拟邀请逻辑:已过期应该重新激活
let newAuthDate;
let newAuthDays;
if (currentEndDate.isBefore(now)) {
// 已过期,重新激活
newAuthDate = new Date();
newAuthDays = 3;
console.log('✅ 通过: 授权已过期重新激活给3天');
console.log('新授权开始日期:', dayjs(newAuthDate).format('YYYY-MM-DD'));
console.log('新授权天数:', newAuthDays, '天');
if (newAuthDays !== 3) {
throw new Error('❌ 失败: 重新激活应该给3天');
}
} else {
throw new Error('❌ 失败: 测试场景错误,授权应该已过期');
}
});
/**
* 测试4: 邀请人没有授权日期时,应该从今天开始累加
*/
test('邀请人没有授权日期时,应该从今天开始累加', () => {
console.log('\n【测试4】邀请人没有授权日期时应该从今天开始累加');
// 模拟邀请人当前数据(从未授权)
const inviterData = {
id: 3,
authorization_date: null,
authorization_days: 0
};
console.log('邀请人当前授权:', {
开始日期: '无',
授权天数: inviterData.authorization_days
});
// 模拟邀请逻辑:没有授权日期,从今天开始
let newAuthDate;
let newAuthDays;
if (!inviterData.authorization_date) {
newAuthDate = new Date();
newAuthDays = inviterData.authorization_days + 3; // 0 + 3 = 3
console.log('✅ 通过: 首次获得授权,从今天开始');
console.log('新授权开始日期:', dayjs(newAuthDate).format('YYYY-MM-DD'));
console.log('新授权天数:', newAuthDays, '天');
if (newAuthDays !== 3) {
throw new Error('❌ 失败: 首次授权应该给3天');
}
if (!newAuthDate) {
throw new Error('❌ 失败: 授权日期不能为空');
}
} else {
throw new Error('❌ 失败: 测试场景错误,授权日期应该为空');
}
});
/**
* 测试5: 邀请记录应该正确保存
*/
test('邀请记录应该正确保存', () => {
console.log('\n【测试5】邀请记录应该正确保存');
// 模拟邀请记录数据
const inviteRecordData = {
inviter_id: 1,
inviter_sn_code: 'SN_INVITER',
invitee_id: 2,
invitee_sn_code: 'SN_INVITEE',
invitee_phone: 'invitee@example.com',
invite_code: 'INV1_ABC123',
register_time: new Date(),
reward_status: 1, // 已发放
reward_type: 'trial_days',
reward_value: 3,
is_delete: 0
};
// 验证必要字段
if (!inviteRecordData.inviter_id) {
throw new Error('❌ 失败: 邀请人ID不能为空');
}
if (!inviteRecordData.invitee_id) {
throw new Error('❌ 失败: 被邀请人ID不能为空');
}
if (inviteRecordData.reward_status !== 1) {
throw new Error('❌ 失败: 奖励状态应该为已发放(1)');
}
if (inviteRecordData.reward_value !== 3) {
throw new Error('❌ 失败: 奖励值应该为3天');
}
if (inviteRecordData.reward_type !== 'trial_days') {
throw new Error('❌ 失败: 奖励类型应该为trial_days');
}
console.log('✅ 通过: 邀请记录字段验证通过');
console.log('邀请记录:', {
邀请人ID: inviteRecordData.inviter_id,
被邀请人ID: inviteRecordData.invitee_id,
邀请码: inviteRecordData.invite_code,
奖励状态: inviteRecordData.reward_status === 1 ? '已发放' : '未发放',
奖励类型: inviteRecordData.reward_type,
奖励值: inviteRecordData.reward_value + '天'
});
});
});
// 运行所有测试
function runTests() {
console.log('\n========================================');
console.log('开始测试邀请注册功能');
console.log('========================================');
const tests = [
{ name: '新用户注册应该获得3天试用期', fn: () => {
console.log('\n【测试1】新用户注册应该获得3天试用期');
const newUserData = {
authorization_date: new Date(),
authorization_days: 3
};
if (!newUserData.authorization_date) throw new Error('授权日期为空');
if (newUserData.authorization_days !== 3) throw new Error('授权天数不是3天');
console.log('✅ 通过');
}},
{ name: '邀请人授权未过期时应该累加3天', fn: () => {
console.log('\n【测试2】邀请人授权未过期时应该累加3天');
const inviterData = {
authorization_date: dayjs().subtract(2, 'day').toDate(),
authorization_days: 7
};
const currentEndDate = dayjs(inviterData.authorization_date).add(inviterData.authorization_days, 'day');
const now = dayjs();
if (currentEndDate.isBefore(now)) throw new Error('测试数据错误');
const newAuthDays = inviterData.authorization_days + 3;
if (newAuthDays !== 10) throw new Error('累加计算错误');
console.log('✅ 通过: 7天 + 3天 = 10天');
}},
{ name: '邀请人授权已过期时应该重新激活给3天', fn: () => {
console.log('\n【测试3】邀请人授权已过期时应该重新激活给3天');
const inviterData = {
authorization_date: dayjs().subtract(10, 'day').toDate(),
authorization_days: 5
};
const currentEndDate = dayjs(inviterData.authorization_date).add(inviterData.authorization_days, 'day');
const now = dayjs();
if (!currentEndDate.isBefore(now)) throw new Error('测试数据错误');
const newAuthDays = 3;
if (newAuthDays !== 3) throw new Error('重新激活计算错误');
console.log('✅ 通过: 过期后重新激活给3天');
}},
{ name: '邀请人没有授权日期时,应该从今天开始累加', fn: () => {
console.log('\n【测试4】邀请人没有授权日期时应该从今天开始累加');
const inviterData = {
authorization_date: null,
authorization_days: 0
};
if (inviterData.authorization_date) throw new Error('测试数据错误');
const newAuthDate = new Date();
const newAuthDays = 3;
if (!newAuthDate) throw new Error('授权日期为空');
if (newAuthDays !== 3) throw new Error('天数计算错误');
console.log('✅ 通过: 首次授权给3天');
}},
{ name: '邀请记录应该正确保存', fn: () => {
console.log('\n【测试5】邀请记录应该正确保存');
const record = {
reward_status: 1,
reward_type: 'trial_days',
reward_value: 3
};
if (record.reward_status !== 1) throw new Error('奖励状态错误');
if (record.reward_type !== 'trial_days') throw new Error('奖励类型错误');
if (record.reward_value !== 3) throw new Error('奖励值错误');
console.log('✅ 通过');
}}
];
let passed = 0;
let failed = 0;
tests.forEach(test => {
try {
test.fn();
passed++;
} catch (error) {
failed++;
console.error(`❌ 失败: ${error.message}`);
}
});
console.log('\n========================================');
console.log('测试完成');
console.log('========================================');
console.log(`通过: ${passed}/${tests.length}`);
console.log(`失败: ${failed}/${tests.length}`);
console.log('========================================\n');
return failed === 0;
}
// 如果直接运行此文件,执行测试
if (require.main === module) {
const success = runTests();
process.exit(success ? 0 : 1);
}
module.exports = { runTests };