39 lines
2.4 KiB
JavaScript
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);
|
|
});
|