|
- import assert from 'node:assert/strict';
- import { expect } from '@playwright/test';
-
- export async function verifyVisualEffects(page, operation) {
- await expect.poll(async()=>page.evaluate(()=>globalThis.__trainingSceneDiagnostics().bridgeWorkshop.pending)).toBe(false);
- const d=await page.evaluate(()=>globalThis.__trainingSceneDiagnostics().bridgeWorkshop), targets=d.targets;
- for (const effect of operation.effects || []) {
- const t=targets.find(t=>t.id===effect.targetId); assert.ok(t,effect.targetId);
- if(d.modelBinding && t.id==='front-pump-hydraulic-pump'){assert.equal(t.visible,false);continue;}
- if(typeof effect.visible==='boolean')assert.equal(t.visible,effect.visible,t.id);
- const offset=effect.targetId==='bridge-gasket' && effect.offset?.[0] ? [2.3,0,1.31] : effect.offset;
- if(offset)assert.ok(t.position.every((v,i)=>Math.abs(v-t.home[i]-offset[i])<1e-5),t.id+' position');
- }
- if(operation.kind==='rotate'){
- const t=targets.find(t=>t.id===operation.targetId);
- if(t?.rotatingQuaternion){assert.deepEqual(t.quaternion,[0,0,0,1],'valve housing must stay fixed');assert.ok(Math.abs(t.rotatingQuaternion[3])<0.999,'handle must visibly turn');}
- }
- if(d.modelBinding){
- assert.equal(d.modelBinding.boltCount,4);assert.equal(d.modelBinding.mountedOnVehicle,true);
- const installed=targets.find(t=>t.id==='bridge-new-pump');
- if(operation.targetId==='bridge-new-pump'){
- const expected=d.modelBinding.sourceBounds;
- for(const key of ['min','max'])assert.ok(installed.worldBounds[key].every((v,i)=>Math.abs(v-expected[key][i])<0.001),'new pump must occupy original source bounds');
- }
- }
- }
|