Files

28 lines
1.9 KiB
JavaScript

// Inspect the installed app using GET requests only; never cancel live jobs.
const {chromium}=require('playwright-core'),fs=require('node:fs'),assert=require('node:assert/strict');
(async()=>{
const root='D:/web/dj',api=JSON.parse(fs.readFileSync(root+'/huobao-data/last-launch.json')).api;
const tasks=(await (await fetch(api+'/episodes/7/generation-tasks')).json()).data.tasks;
const browser=await chromium.launch({channel:'chrome',headless:true});
try {
const page=await browser.newPage({viewport:{width:1600,height:1200}}),errors=[];
page.on('pageerror',e=>errors.push(e.message));
await page.addInitScript(()=>localStorage.setItem('huobao:tours',JSON.stringify(['episode'])));
await page.route('**/api/**',r=>['GET','HEAD'].includes(r.request().method())?r.continue():r.abort());
await page.goto(api.replace('/api/v1','')+'/drama/6/episode/1',{waitUntil:'networkidle'});
await page.getByRole('button',{name:/^任务/}).click();
const drawer=page.locator('.task-drawer-overlay');await drawer.waitFor();
const row=id=>drawer.locator('.gen-task-row').filter({has:page.locator('.video-task-meta-line').filter({hasText:'#'+id})});
const active=tasks.filter(t=>t.can_cancel);
for(const task of active) {
assert.equal(await row(task.id).getByRole('button',{name:/^(重试)?取消任务$/,exact:true}).count(),1);
}
const cancelled=tasks.filter(t=>t.error_code==='user_cancelled');
for(const task of cancelled)assert.equal(await row(task.id).locator('.video-task-status.is-cancelled').count(),1);
if(active.length)await row(active[active.length-1].id).scrollIntoViewIfNeeded();
await page.screenshot({path:root+'/integration-work/cancel-installed.png'});
assert.deepEqual(errors,[]);
console.log('PASS: installed cancel buttons for tasks',active.map(t=>t.id),'; cancelled history',cancelled.length,'; GET-only verification');
}finally{await browser.close()}
})().catch(e=>{console.error(e.stack);process.exit(1)});