import test from 'node:test'; import assert from 'node:assert/strict'; import { registerHooks } from 'node:module'; const state = { user: null }; registerHooks({resolve(specifier, context, nextResolve) { if (specifier === '@/dailyTaskConfig' || specifier === '@/dailyTaskService') return {url:new URL('../functions/'+specifier.slice(2)+'.ts',import.meta.url).href,shortCircuit:true}; if (specifier === '@/Utils') return {url:'data:text/javascript,export default {checkToken:(a,b)=>a===b}',shortCircuit:true}; if (specifier === '@lafjs/cloud') return {url:'data:text/javascript,export default globalThis.__rewardRequestCloud',shortCircuit:true}; return nextResolve(specifier,context); }}); globalThis.__rewardRequestCloud={database:()=>({collection:()=>({where:()=>({getOne:async()=>({data:state.user}),update:async data=>{Object.assign(state.user,data);return {updated:1};}})})})}; const {refreshTaskData}=await import('../functions/dailyTaskService.ts'); const handler=(await import('../functions/getTaskReward.ts')).default; function setup(){ const data=refreshTaskData(null,'test-user',20).data; data.weeklyStars=140; data.dailyTasks.forEach(task=>{task.value=task.target;task.state=1;}); state.user={_id:'test-user',token:'test-token',levelAmount:19,task:JSON.stringify(data)}; return data; } function request(fields){return handler({body:{uid:'test-user',token:'test-token',...fields}});} test('weekly claims use rewardId even when form encoding sends taskId as undefined',async()=>{ setup(); const fields=Object.fromEntries(new URLSearchParams('scope=weekly&taskId=undefined&rewardId=weekly_35')); const result=await request(fields); assert.equal(result.code,1,result.msg); assert.equal(result.data.task.weeklyRewards[0].state,2); assert.equal(result.data.rewards.length,2); assert.equal((await request(fields)).code,0); }); test('weekly scope takes precedence over a conflicting daily taskId',async()=>{ const data=setup();const result=await request({scope:'weekly',taskId:data.dailyTasks[0].taskId,rewardId:'weekly_70'}); assert.equal(result.code,1,result.msg);assert.equal(result.data.task.weeklyRewards[1].state,2); assert.equal(result.data.task.dailyTasks[0].state,1); }); test('daily claims and legacy taskType requests remain supported',async()=>{ const data=setup(); assert.equal((await request({scope:'daily',taskId:data.dailyTasks[0].taskId,rewardId:'undefined'})).code,1); assert.equal((await request({taskType:JSON.stringify([data.dailyTasks[1].taskId])})).code,1); }); test('missing rewardId cannot fall back to a daily ID in weekly scope',async()=>{ const data=setup();const result=await request({scope:'weekly',taskId:data.dailyTasks[0].taskId,rewardId:'undefined'}); assert.equal(result.code,0);assert.equal(result.msg,'未获取到奖励id'); });