Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 

28 řádky
2.0 KiB

  1. import { chromium, expect } from '@playwright/test';
  2. import fs from 'node:fs';
  3. import assert from 'node:assert/strict';
  4. import { login, call } from './role-permissions-live.mjs';
  5. const dir='reports/bridge-scripted-tasks-20260913', session=await login('root');
  6. const tasks=JSON.parse(fs.readFileSync(`${dir}/registered.json`,'utf8')), checks=[], writes=[];
  7. const browser=await chromium.launch({channel:'msedge',headless:true,args:['--enable-unsafe-swiftshader']});
  8. try {
  9. const page=await browser.newPage({viewport:{width:1600,height:1000}});
  10. await page.addInitScript(s=>sessionStorage.setItem('unreal-tran:web:access-token:v1',s.accessToken),session);
  11. page.on('request',r=>{if(r.method()!=='GET'&&new URL(r.url()).pathname.startsWith('/api/tran/'))writes.push(new URL(r.url()).pathname)});
  12. for(const task of tasks){
  13. await page.goto('http://127.0.0.1:6180'+task.previewUrl);
  14. const procedure=task.presentation==='procedure';
  15. if(procedure)await expect(page.locator('.bridge-procedure h2')).toHaveText(task.name);
  16. else await expect(page.locator('[data-role="loading"]')).toHaveClass(/is-hidden/,{timeout:120000});
  17. const response=page.waitForResponse(r=>r.url().includes(`/assignments/${task.id}/preview/validate`));
  18. await (procedure?page.getByRole('button',{name:'完成本步并保存',exact:true}):page.locator('[data-role="part-label"]')).click();
  19. assert.equal((await response).status(),200);
  20. const runs=await call(`tran/v1/teaching/runs?channel=VIRTUAL&assignmentKind=TRAINING&assignmentId=${task.id}&size=100`,session.accessToken);
  21. assert.equal(runs.status,200);assert.equal(runs.data.total,0);
  22. checks.push(`${task.code} 教员预览使用服务端校验,未创建训练运行`);
  23. }
  24. assert.ok(writes.every(path=>path.endsWith('/preview/validate')));
  25. fs.writeFileSync(`${dir}/normal-preview.json`,JSON.stringify({pass:true,checks,writes},null,2));
  26. console.log('PASS: four previews validate without writing learner progress or scores');
  27. } finally {await browser.close()}