|
- import fs from 'node:fs'
- import path from 'node:path'
- import {chromium,expect} from '@playwright/test'
- import {login,call} from './role-permissions-live.mjs'
- const report=path.resolve('reports/guide-formal-20260910'),fixture=JSON.parse(fs.readFileSync('../../.codex-tmp/guide-formal/fixture.json'))
- const session=await login('root'),browser=await chromium.launch({channel:'msedge',headless:true,args:['--enable-unsafe-swiftshader']})
- const context=await browser.newContext({viewport:{width:1920,height:1080}})
- await context.addInitScript(s=>{sessionStorage.setItem('unreal-tran:web:access-token:v1',s.accessToken);sessionStorage.setItem('unreal-tran:web:refresh-token:v1',s.refreshToken)},session)
- const page=await context.newPage(),checks=[]
- const check=(name,pass,detail='')=>{checks.push({name,pass,detail});console.log(pass?'PASS':'FAIL',name);if(!pass)process.exitCode=1}
- try{
- await page.goto('http://127.0.0.1:6180/content/ofd')
- await expect(page.getByRole('button',{name:'新建指导书',exact:true})).toBeVisible()
- const result=await page.evaluate(async id=>{
- const {FormalGuideStore}=await import('/src/features/guide-legacy/formalStore.ts')
- const store=new FormalGuideStore()
- try{
- await store.load(id);await store.loadCatalog();const old=store.project.publishedVersionId
- if(store.project.status==='PUBLISHED')await store.transitionOFDProject(id,'edit',null)
- const state=JSON.parse(JSON.stringify(store.record.state)),first=state.chapters[0].steps[0]
- first.image='';first.title='狐狸模型巡检'
- const truck=state.resources.find(r=>r.name?.includes('MilkTruck'))
- const second={...JSON.parse(JSON.stringify(first)),id:'formal-truck-step',title:'牛奶卡车检查',image:'',modelRef:{...first.modelRef,assetId:truck.id,nodeName:''},mediaBlocks:[]}
- state.chapters[0].steps=[first,second]
- for(const [step,key] of [[first,'160@463'],[second,'159@209']])step.mediaBlocks=[{id:'scene-'+step.id,kind:'scene',assetId:key,title:step.title+'场景',x:20,y:180,width:170,height:80}]
- await store.saveOFDProjectState(id,state)
- return {old,published:store.project.publishedVersionId,assets:store.project.assets.length,bindings:Object.keys(store.record.state.sceneBindings||{}),version:store.project.version}
- }finally{store.dispose()}
- },fixture.id)
- check('新修订保持原发布版本可阅读',result.old===result.published)
- check('狐狸与卡车场景固定版本已保存',result.bindings.length===2,JSON.stringify(result))
- await page.goto(`http://127.0.0.1:6180/content/ofd/${fixture.id}/studio`)
- await expect(page.locator('.ofd-view-editor')).toBeVisible({timeout:60000})
- await page.screenshot({path:path.join(report,'10-two-scene-resources.png')})
- }catch(e){check('正式场景资源闭环',false,e.message);await page.screenshot({path:path.join(report,'failure-scenes.png')})}
- finally{fs.writeFileSync(path.join(report,'scenes.json'),JSON.stringify({checks},null,2));await browser.close()}
|