11
This commit is contained in:
@@ -53,7 +53,7 @@ module.exports = {
|
|||||||
|
|
||||||
// 生成邀请码(基于用户ID和sn_code)
|
// 生成邀请码(基于用户ID和sn_code)
|
||||||
const invite_code = `INV${user.id}_${Date.now().toString(36).toUpperCase()}`;
|
const invite_code = `INV${user.id}_${Date.now().toString(36).toUpperCase()}`;
|
||||||
const invite_link = `https://work.light120.com/invite?code=${invite_code}`;
|
const invite_link = `https://work.light120.com/register.html?code=${invite_code}`;
|
||||||
|
|
||||||
// 保存邀请码到用户记录(可以保存到invite_code字段,如果没有则保存到备注或其他字段)
|
// 保存邀请码到用户记录(可以保存到invite_code字段,如果没有则保存到备注或其他字段)
|
||||||
// 这里暂时不保存到数据库,每次生成新的
|
// 这里暂时不保存到数据库,每次生成新的
|
||||||
|
|||||||
@@ -5,239 +5,6 @@
|
|||||||
|
|
||||||
const dayjs = require('dayjs');
|
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() {
|
function runTests() {
|
||||||
console.log('\n========================================');
|
console.log('\n========================================');
|
||||||
@@ -253,7 +20,9 @@ function runTests() {
|
|||||||
};
|
};
|
||||||
if (!newUserData.authorization_date) throw new Error('授权日期为空');
|
if (!newUserData.authorization_date) throw new Error('授权日期为空');
|
||||||
if (newUserData.authorization_days !== 3) throw new Error('授权天数不是3天');
|
if (newUserData.authorization_days !== 3) throw new Error('授权天数不是3天');
|
||||||
console.log('✅ 通过');
|
console.log('✅ 通过: 新用户获得3天试用期');
|
||||||
|
console.log(' - 授权日期:', dayjs(newUserData.authorization_date).format('YYYY-MM-DD'));
|
||||||
|
console.log(' - 授权天数:', newUserData.authorization_days, '天');
|
||||||
}},
|
}},
|
||||||
{ name: '邀请人授权未过期时,应该累加3天', fn: () => {
|
{ name: '邀请人授权未过期时,应该累加3天', fn: () => {
|
||||||
console.log('\n【测试2】邀请人授权未过期时,应该累加3天');
|
console.log('\n【测试2】邀请人授权未过期时,应该累加3天');
|
||||||
@@ -263,10 +32,17 @@ function runTests() {
|
|||||||
};
|
};
|
||||||
const currentEndDate = dayjs(inviterData.authorization_date).add(inviterData.authorization_days, 'day');
|
const currentEndDate = dayjs(inviterData.authorization_date).add(inviterData.authorization_days, 'day');
|
||||||
const now = dayjs();
|
const now = dayjs();
|
||||||
if (currentEndDate.isBefore(now)) throw new Error('测试数据错误');
|
const remainingDays = currentEndDate.diff(now, 'day');
|
||||||
|
|
||||||
|
console.log(' 邀请人当前状态:');
|
||||||
|
console.log(' - 授权开始日期:', dayjs(inviterData.authorization_date).format('YYYY-MM-DD'));
|
||||||
|
console.log(' - 授权总天数:', inviterData.authorization_days, '天');
|
||||||
|
console.log(' - 剩余天数:', remainingDays, '天');
|
||||||
|
|
||||||
|
if (currentEndDate.isBefore(now)) throw new Error('测试数据错误:授权应该未过期');
|
||||||
const newAuthDays = inviterData.authorization_days + 3;
|
const newAuthDays = inviterData.authorization_days + 3;
|
||||||
if (newAuthDays !== 10) throw new Error('累加计算错误');
|
if (newAuthDays !== 10) throw new Error('累加计算错误');
|
||||||
console.log('✅ 通过: 7天 + 3天 = 10天');
|
console.log('✅ 通过: 未过期授权累加 7天 + 3天 = 10天');
|
||||||
}},
|
}},
|
||||||
{ name: '邀请人授权已过期时,应该重新激活给3天', fn: () => {
|
{ name: '邀请人授权已过期时,应该重新激活给3天', fn: () => {
|
||||||
console.log('\n【测试3】邀请人授权已过期时,应该重新激活给3天');
|
console.log('\n【测试3】邀请人授权已过期时,应该重新激活给3天');
|
||||||
@@ -276,10 +52,20 @@ function runTests() {
|
|||||||
};
|
};
|
||||||
const currentEndDate = dayjs(inviterData.authorization_date).add(inviterData.authorization_days, 'day');
|
const currentEndDate = dayjs(inviterData.authorization_date).add(inviterData.authorization_days, 'day');
|
||||||
const now = dayjs();
|
const now = dayjs();
|
||||||
if (!currentEndDate.isBefore(now)) throw new Error('测试数据错误');
|
const daysExpired = now.diff(currentEndDate, 'day');
|
||||||
|
|
||||||
|
console.log(' 邀请人当前状态:');
|
||||||
|
console.log(' - 授权开始日期:', dayjs(inviterData.authorization_date).format('YYYY-MM-DD'));
|
||||||
|
console.log(' - 授权天数:', inviterData.authorization_days, '天');
|
||||||
|
console.log(' - 过期日期:', currentEndDate.format('YYYY-MM-DD'));
|
||||||
|
console.log(' - 已过期天数:', daysExpired, '天');
|
||||||
|
|
||||||
|
if (!currentEndDate.isBefore(now)) throw new Error('测试数据错误:授权应该已过期');
|
||||||
|
const newAuthDate = new Date();
|
||||||
const newAuthDays = 3;
|
const newAuthDays = 3;
|
||||||
if (newAuthDays !== 3) throw new Error('重新激活计算错误');
|
if (newAuthDays !== 3) throw new Error('重新激活计算错误');
|
||||||
console.log('✅ 通过: 过期后重新激活给3天');
|
console.log('✅ 通过: 过期授权重新激活给3天');
|
||||||
|
console.log(' - 新授权开始日期:', dayjs(newAuthDate).format('YYYY-MM-DD'));
|
||||||
}},
|
}},
|
||||||
{ name: '邀请人没有授权日期时,应该从今天开始累加', fn: () => {
|
{ name: '邀请人没有授权日期时,应该从今天开始累加', fn: () => {
|
||||||
console.log('\n【测试4】邀请人没有授权日期时,应该从今天开始累加');
|
console.log('\n【测试4】邀请人没有授权日期时,应该从今天开始累加');
|
||||||
@@ -287,24 +73,41 @@ function runTests() {
|
|||||||
authorization_date: null,
|
authorization_date: null,
|
||||||
authorization_days: 0
|
authorization_days: 0
|
||||||
};
|
};
|
||||||
if (inviterData.authorization_date) throw new Error('测试数据错误');
|
console.log(' 邀请人当前状态:');
|
||||||
|
console.log(' - 授权开始日期: 无');
|
||||||
|
console.log(' - 授权天数:', inviterData.authorization_days, '天');
|
||||||
|
|
||||||
|
if (inviterData.authorization_date) throw new Error('测试数据错误:授权日期应该为空');
|
||||||
const newAuthDate = new Date();
|
const newAuthDate = new Date();
|
||||||
const newAuthDays = 3;
|
const newAuthDays = 3;
|
||||||
if (!newAuthDate) throw new Error('授权日期为空');
|
if (!newAuthDate) throw new Error('授权日期为空');
|
||||||
if (newAuthDays !== 3) throw new Error('天数计算错误');
|
if (newAuthDays !== 3) throw new Error('天数计算错误');
|
||||||
console.log('✅ 通过: 首次授权给3天');
|
console.log('✅ 通过: 首次授权从今天开始给3天');
|
||||||
|
console.log(' - 新授权开始日期:', dayjs(newAuthDate).format('YYYY-MM-DD'));
|
||||||
|
console.log(' - 新授权天数:', newAuthDays, '天');
|
||||||
}},
|
}},
|
||||||
{ name: '邀请记录应该正确保存', fn: () => {
|
{ name: '邀请记录应该正确保存', fn: () => {
|
||||||
console.log('\n【测试5】邀请记录应该正确保存');
|
console.log('\n【测试5】邀请记录应该正确保存');
|
||||||
const record = {
|
const record = {
|
||||||
|
inviter_id: 1,
|
||||||
|
invitee_id: 2,
|
||||||
|
invite_code: 'INV1_ABC123',
|
||||||
reward_status: 1,
|
reward_status: 1,
|
||||||
reward_type: 'trial_days',
|
reward_type: 'trial_days',
|
||||||
reward_value: 3
|
reward_value: 3
|
||||||
};
|
};
|
||||||
|
console.log(' 邀请记录内容:');
|
||||||
|
console.log(' - 邀请人ID:', record.inviter_id);
|
||||||
|
console.log(' - 被邀请人ID:', record.invitee_id);
|
||||||
|
console.log(' - 邀请码:', record.invite_code);
|
||||||
|
console.log(' - 奖励状态:', record.reward_status === 1 ? '已发放' : '未发放');
|
||||||
|
console.log(' - 奖励类型:', record.reward_type);
|
||||||
|
console.log(' - 奖励值:', record.reward_value, '天');
|
||||||
|
|
||||||
if (record.reward_status !== 1) throw new Error('奖励状态错误');
|
if (record.reward_status !== 1) throw new Error('奖励状态错误');
|
||||||
if (record.reward_type !== 'trial_days') throw new Error('奖励类型错误');
|
if (record.reward_type !== 'trial_days') throw new Error('奖励类型错误');
|
||||||
if (record.reward_value !== 3) throw new Error('奖励值错误');
|
if (record.reward_value !== 3) throw new Error('奖励值错误');
|
||||||
console.log('✅ 通过');
|
console.log('✅ 通过: 邀请记录字段正确');
|
||||||
}}
|
}}
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -324,8 +127,9 @@ function runTests() {
|
|||||||
console.log('\n========================================');
|
console.log('\n========================================');
|
||||||
console.log('测试完成');
|
console.log('测试完成');
|
||||||
console.log('========================================');
|
console.log('========================================');
|
||||||
console.log(`通过: ${passed}/${tests.length}`);
|
console.log(`✅ 通过: ${passed}/${tests.length}`);
|
||||||
console.log(`失败: ${failed}/${tests.length}`);
|
console.log(`❌ 失败: ${failed}/${tests.length}`);
|
||||||
|
console.log(`成功率: ${(passed / tests.length * 100).toFixed(0)}%`);
|
||||||
console.log('========================================\n');
|
console.log('========================================\n');
|
||||||
|
|
||||||
return failed === 0;
|
return failed === 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user