From 60f1c5e62870798a207bf40a186ba84af2abf53a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=88=90?= Date: Sat, 20 Dec 2025 00:07:32 +0800 Subject: [PATCH] 11 --- api/controller_front/invite.js | 2 +- api/tests/invite_register.test.js | 290 +++++------------------------- 2 files changed, 48 insertions(+), 244 deletions(-) diff --git a/api/controller_front/invite.js b/api/controller_front/invite.js index 7b25be6..cb1487d 100644 --- a/api/controller_front/invite.js +++ b/api/controller_front/invite.js @@ -53,7 +53,7 @@ module.exports = { // 生成邀请码(基于用户ID和sn_code) 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字段,如果没有则保存到备注或其他字段) // 这里暂时不保存到数据库,每次生成新的 diff --git a/api/tests/invite_register.test.js b/api/tests/invite_register.test.js index a439e87..5cbcd7b 100644 --- a/api/tests/invite_register.test.js +++ b/api/tests/invite_register.test.js @@ -5,239 +5,6 @@ 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========================================'); @@ -253,7 +20,9 @@ function runTests() { }; if (!newUserData.authorization_date) throw new Error('授权日期为空'); 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: () => { console.log('\n【测试2】邀请人授权未过期时,应该累加3天'); @@ -263,10 +32,17 @@ function runTests() { }; const currentEndDate = dayjs(inviterData.authorization_date).add(inviterData.authorization_days, 'day'); 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; if (newAuthDays !== 10) throw new Error('累加计算错误'); - console.log('✅ 通过: 7天 + 3天 = 10天'); + console.log('✅ 通过: 未过期授权累加 7天 + 3天 = 10天'); }}, { name: '邀请人授权已过期时,应该重新激活给3天', fn: () => { console.log('\n【测试3】邀请人授权已过期时,应该重新激活给3天'); @@ -276,10 +52,20 @@ function runTests() { }; const currentEndDate = dayjs(inviterData.authorization_date).add(inviterData.authorization_days, 'day'); 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; if (newAuthDays !== 3) throw new Error('重新激活计算错误'); - console.log('✅ 通过: 过期后重新激活给3天'); + console.log('✅ 通过: 过期授权重新激活给3天'); + console.log(' - 新授权开始日期:', dayjs(newAuthDate).format('YYYY-MM-DD')); }}, { name: '邀请人没有授权日期时,应该从今天开始累加', fn: () => { console.log('\n【测试4】邀请人没有授权日期时,应该从今天开始累加'); @@ -287,24 +73,41 @@ function runTests() { authorization_date: null, 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 newAuthDays = 3; if (!newAuthDate) 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: () => { console.log('\n【测试5】邀请记录应该正确保存'); const record = { + inviter_id: 1, + invitee_id: 2, + invite_code: 'INV1_ABC123', reward_status: 1, reward_type: 'trial_days', 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_type !== 'trial_days') 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('测试完成'); console.log('========================================'); - console.log(`通过: ${passed}/${tests.length}`); - console.log(`失败: ${failed}/${tests.length}`); + console.log(`✅ 通过: ${passed}/${tests.length}`); + console.log(`❌ 失败: ${failed}/${tests.length}`); + console.log(`成功率: ${(passed / tests.length * 100).toFixed(0)}%`); console.log('========================================\n'); return failed === 0;