import test from 'node:test'; import assert from 'node:assert/strict'; import {realEquipment,displayValue,effectiveEquipment,collectionState} from '../src/data.mjs'; test('real zero is preserved and missing values never become zero',()=>{ assert.equal(displayValue(0,'m'),'0 m'); assert.equal(displayValue(null,'m'),'—'); assert.equal(displayValue(false),'否'); assert.equal(displayValue({value:15}),'—'); }); test('simulated samples are excluded without borrowing another equipment value',()=>{ const rows=realEquipment({equipment:[{id:'real',items:[{key:'a',value:0,quality:'GOOD'},{key:'b',value:15,quality:'SIMULATED'},{key:'c',value:7,sourceName:'模拟采集'},{key:'d',value:8,simulated:true}]},{id:'demo',sourceType:'SIMULATED',items:[]}]}); assert.equal(rows.length,1); assert.deepEqual(rows[0].items.map(item=>item.key),['a']); assert.equal(rows[0].items[0].value,0); }); test('bridge failure stops showing last equipment data as fresh',()=>{ assert.equal(collectionState({state:'CONNECTED'},true),'ERROR'); assert.equal(effectiveEquipment({id:'e',state:'RECEIVING',lastReceivedAt:123},'ERROR').state,'STALE'); assert.equal(effectiveEquipment({id:'e',state:'RECEIVING',lastReceivedAt:null},'STALE').state,'NOT_RECEIVED'); });