import test from 'node:test'; import assert from 'node:assert/strict'; import {readFileSync} from 'node:fs'; import ts from 'typescript'; const source=readFileSync(new URL('../../../packages/sensor-ui/src/preparation.ts',import.meta.url),'utf8'); const code=ts.transpileModule(source,{compilerOptions:{module:ts.ModuleKind.ESNext}}).outputText; const {devicePreparation,preparationProgress}=await import('data:text/javascript;base64,'+Buffer.from(code).toString('base64')); const device={id:'instax4_a'}; const operation={operation_id:'op_a',device_id:device.id,action_id:'prepare',state:'running',requested_at:'2026-09-08T12:00:00Z'}; const preparation={operation_id:'op_a',device_id:device.id,model_id:'insta360.x4',state:'running',phase:'verify',steps:[{id:'profile',label:'Драйвер',state:'complete'},{id:'verify',label:'Выбранная камера',state:'running'}]}; test('progress belongs to the exact operation and physical camera in either UI',()=>{ const inventory={items:[device],operations:[operation],preparations:[{...preparation,device_id:'instax4_b'},preparation]}; assert.deepEqual(devicePreparation(inventory,device),preparation); assert.equal(devicePreparation({...inventory,preparations:[{...preparation,operation_id:'op_old'}]},device),undefined); assert.equal(devicePreparation({...inventory,preparations:[preparation,preparation]},device),undefined); }); test('a shared installation success still leaves instance verification outstanding',()=>{ assert.deepEqual(preparationProgress(preparation,'Подготовка'),{label:'Подготовка',value:.5,valueText:'Выбранная камера'}); assert.equal(preparationProgress(undefined,'Команда').value,undefined); }); test('legacy RealSense progress cannot appear on an Insta360 row',()=>{ const legacy={items:[device],operations:[operation],preparation:{state:'complete',started_at:Date.parse(operation.requested_at)/1000,steps:[{id:'service',label:'Служба',state:'complete'}]}}; assert.equal(devicePreparation(legacy,device),undefined); const rs={id:'rsd455_a'}; const value=devicePreparation({...legacy,operations:[{...operation,device_id:rs.id}]},rs); assert.equal(value.state,'running'); assert.equal(value.steps.at(-1).state,'running'); }); test('new Nodes do not fall back to stale global preparation reports',()=>{ const rs={id:'rsd455_a'}; assert.equal(devicePreparation({items:[rs],operations:[{...operation,device_id:rs.id}],preparations:[],preparation:{started_at:Date.now()/1000,state:'complete',steps:[]}},rs),undefined); });