Files
MatchMaster/tools/test-task-reward-request.cjs
T
2026-10-15 11:56:15 +08:00

39 lines
2.4 KiB
JavaScript

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);
});