No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 

31 líneas
2.2 KiB

  1. import {chromium,expect} from '@playwright/test';
  2. import assert from 'node:assert/strict';
  3. import fs from 'node:fs';
  4. import {login,call} from './role-permissions-live.mjs';
  5. const dir='reports/bridge-three-dimensional-20260913', s=await login('root'),checks=[];
  6. const api=async p=>{const r=await call('tran/v1/'+p,s.accessToken);assert.equal(r.status,200);return r.data;};
  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);localStorage.setItem('unreal-tran:web:preferences:v1',JSON.stringify({themeMode:'military'}));},s);
  11. for(const id of [86,89]) {
  12. const task=await api('teaching/assignments/'+id), before=await api('teaching/runs?assignmentId='+id+'&size=100');
  13. await page.goto('http://127.0.0.1:6180/teaching/virtual-training/preview/'+id);
  14. await expect(page.locator('[data-role="loading"]')).toHaveClass(/is-hidden/,{timeout:120000});await page.waitForTimeout(1500);
  15. const steps=id===86?task.definitionSnapshot.steps:task.definitionSnapshot.steps.slice(0,1);
  16. for(let i=0;i<steps.length;i++) {
  17. for(let j=0;j<steps[i].action.mechanism.steps.length;j++) {
  18. if(j===steps[i].action.mechanism.steps.length-1){const response=page.waitForResponse(r=>r.url().includes('/preview/validate'));await page.locator('[data-role="part-label"]').click();assert.equal((await response).status(),200);}
  19. else{await page.locator('[data-role="part-label"]').click();await page.waitForTimeout(1000);}
  20. }
  21. await expect(page.locator('[data-action="next"]')).toBeEnabled();
  22. if(i<steps.length-1)await page.locator('[data-action="next"]').click();
  23. }
  24. await page.screenshot({path:`${dir}/${task.code}-original.png`});
  25. const stable=value=>JSON.parse(JSON.stringify(value,(key,item)=>key==='serverNow'?undefined:item));
  26. assert.deepEqual(stable((await api('teaching/runs?assignmentId='+id+'&size=100')).records),stable(before.records));
  27. checks.push(`${task.code} 原任务入口通过,原运行与成绩未变化`);
  28. }
  29. fs.writeFileSync(`${dir}/originals.json`,JSON.stringify({pass:true,checks},null,2));
  30. }finally{await browser.close();}