MatchMaster/tools/coin-madness/check-ui-update.cjs

11 lines
2.9 KiB
JavaScript

const {chromium}=require('playwright'),assert=require('node:assert/strict');
(async()=>{const browser=await chromium.launch({headless:true,channel:'msedge'});try{const page=await browser.newPage({viewport:{width:440,height:800}});page.on('pageerror',e=>console.log('PAGEERROR',e.message));await page.goto('http://127.0.0.1:8879');await page.waitForFunction(()=>window.demo?.ready);
await page.evaluate(()=>{const data={serverNow:Date.now(),status:'purchasable',state:{config:{periodId:'test',startsAt:Date.now()-1000,endsAt:Date.now()+3600000,priceCents:1250,stages:Array.from({length:10},(_,i)=>({wins:i+1,coins:(i+1)*100,claimStatus:'locked'}))},paidAt:0,totalWins:5,claimed:Array(10).fill(false)}};window.uiData=data;window.uiCalls=[];window.uiToasts=[];const snapshot=()=>JSON.parse(JSON.stringify(data));window.testService={info:{periodId:'test',startsAt:Date.now()-1000,endsAt:data.state.config.endsAt},get serverNow(){return Date.now()},settlementNotice:0,testAvailable:()=>false,readForDisplay:async()=>snapshot(),refresh:async()=>snapshot(),view:snapshot,stopPolling(){},request:async(action,body,saved)=>{uiCalls.push({action,body});if(action==='purchase'){data.state.paidAt=1;data.status='unlocked';}if(action==='claim'){data.state.claimed[body.stage]=true;saved(100)}return{code:1,data:snapshot()}}};});
await page.evaluate(()=>{const h=cc.director.getScene().children[0].getComponent('CoinMadnessHost');h.toast=m=>uiToasts.push(m);h.resumeSync()});await page.waitForTimeout(200);await page.evaluate(()=>demo.open());await page.waitForTimeout(500);await page.screenshot({path:'.codex_tmp/ui-unpaid.png'});
assert(await page.evaluate(()=>demo.panel().content.children[0].getChildByName('Claim').active));assert(await page.evaluate(()=>demo.panel().content.children[0].getChildByName('RewardLock').active));
await page.evaluate(()=>demo.action('purchase',{periodId:'test'}));await page.waitForTimeout(100);await page.screenshot({path:'.codex_tmp/ui-unlock.png'});await page.waitForTimeout(600);
await page.evaluate(()=>demo.panel().content.children[4].emit(cc.Node.EventType.TOUCH_END,{stopPropagation(){}}));await page.waitForTimeout(200);assert(await page.evaluate(()=>uiCalls.some(c=>c.action==='claim'&&c.body.stage===4)));await page.waitForTimeout(900);
await page.evaluate(()=>demo.panel().content.children[7].emit(cc.Node.EventType.TOUCH_END,{stopPropagation(){}}));assert.equal(await page.evaluate(()=>uiToasts.at(-1)),'请通过更多的关卡以解锁金币奖励!');await page.screenshot({path:'.codex_tmp/ui-paid.png'});
await page.evaluate(()=>cc.director.getScene().children[0].getComponent('CoinMadnessHost').openSettlement({state:{settlementCoins:4300}}));await page.waitForTimeout(500);await page.screenshot({path:'.codex_tmp/ui-settlement.png'});console.log('PASS independent claim, locked ready state, goal toast, purchase no tutorial; screenshots saved');
}finally{await browser.close()}})().catch(e=>{console.error(e);process.exitCode=1});