const test = require('node:test'); const assert = require('node:assert/strict'); const fs = require('node:fs'); const path = require('node:path'); const vm = require('node:vm'); const { stripTypeScriptTypes } = require('node:module'); const source = fs.readFileSync(path.join(__dirname,'../assets/Script/module/Pay/Utils.ts'),'utf8'); const start = source.indexOf(' static getDailyQuestReward('); const end = source.indexOf(' //设置连胜次数',start); const code = stripTypeScriptTypes('class Utils {\n'+source.slice(start,end)+'\n}\nglobalThis.Utils=Utils;'); for (const scope of ['daily','weekly']) test(`${scope} reward requests send only their own ID field`,()=>{ let request; const context={wx:{},cc:{fx:{StorageMessage:{getStorage:()=> 'test-user'},GameConfig:{GM_INFO:{}}}}}; vm.runInNewContext(code,context); context.Utils.POST=(endpoint,fields)=>{request={endpoint,fields};}; context.Utils.getDailyQuestReward(scope==='weekly'?'weekly_35':'pass_1',()=>{},scope); assert.equal(request.endpoint,'getTaskRewardV2'); const own=scope==='weekly'?'rewardId':'taskId', other=scope==='weekly'?'taskId':'rewardId'; assert.equal(Object.hasOwn(request.fields,other),false); assert.equal(request.fields[own],scope==='weekly'?'weekly_35':'pass_1'); const form=Object.keys(request.fields).map(key=>key+'='+encodeURIComponent(request.fields[key])).join('&'); assert.equal(form.includes('undefined'),false); }); test('task reads and progress saves use the V2 route while preserving the request payload',()=>{ const start = source.indexOf(' static getDailyQuestInfo('); const code = stripTypeScriptTypes('class Utils {\n'+source.slice(start,end)+'\n}\nglobalThis.Utils=Utils;'); const requests=[]; const task={version:2,dailyTasks:[],weeklyRewards:[]}; const context={wx:{},console:{log(){}},cc:{fx:{StorageMessage:{getStorage:()=> 'test-user'},GameConfig:{GM_INFO:{tasks:task}}}}}; vm.runInNewContext(code,context); context.Utils.POST=(endpoint,fields)=>requests.push({endpoint,fields}); context.Utils.getDailyQuestInfo(()=>{}); context.Utils.setDailyQuestInfo(()=>{},task); assert.deepEqual(requests.map(request=>request.endpoint),['dayTaskInfoV2','dayTaskInfoV2']); assert.deepEqual(requests.map(request=>request.fields.action),['read','save']); assert.deepEqual(JSON.parse(requests[1].fields.task),task); });