Files
MatchMaster/tools/test-task-tracking.cjs
T

26 lines
2.0 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 read=p=>fs.readFileSync(path.join(__dirname,'..',p),'utf8');
const tracker=read('assets/Script/module/Task/DailyTaskProgressTracker.ts').replace('export type','type').replace('export default class','class');
const tool=read('assets/Script/module/Tool/GameTool.ts');
const start=tool.indexOf(' shushu_Track: function ('),end=tool.indexOf('\n },',start)+7;
const code=stripTypeScriptTypes(tracker+'\nconst GameTool={'+tool.slice(start,end)+'};globalThis.Tracker=DailyTaskProgressTracker;globalThis.GameTool=GameTool;');
test('complete and claim events reach the SDK with the configured task ID and color',()=>{
const events=[],task={taskId:'daily_2_2',trackingId:'2-2',metric:'clear_color',params:{colorId:10},target:1,value:0,state:0};
const context={console:{log(){}},setTimeout:()=>1,clearTimeout(){},cc:{fx:{GameConfig:{GM_INFO:{otherLevel:0,tasks:{version:2,dailyTasks:[task]}}}}},
MiniGameSdk:{API:{shushu_Track:(name,data)=>events.push({name,...data})}}};
vm.runInNewContext(code,context);context.cc.fx.GameTool=context.GameTool;
context.Tracker.record({metric:'clear_color',colorId:9});context.Tracker.recordLevelWon();assert.equal(events.length,0);
context.Tracker.record({metric:'clear_color',colorId:10});context.Tracker.recordLevelWon();
context.Tracker.trackTask(task,'claim');
assert.deepEqual(events,[{name:'daily_task',task_id:'2-2',task_status:'complete',color_id:10},{name:'daily_task',task_id:'2-2',task_status:'claim',color_id:10}]);
context.Tracker.record({metric:'clear_color',colorId:10});context.Tracker.recordLevelWon();assert.equal(events.length,2);
context.Tracker.trackTask({taskId:'daily_6_29',trackingId:'6-29'},'complete');
assert.deepEqual(events[2],{name:'daily_task',task_id:'6-29',task_status:'complete'});
});