Files

22 lines
1.2 KiB
JavaScript
Raw Permalink Normal View History

2026-10-20 08:34:12 +08:00
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');
});