85 lines
4.3 KiB
JavaScript
85 lines
4.3 KiB
JavaScript
const test = require('node:test');
|
|
const assert = require('node:assert/strict');
|
|
|
|
const Machine = require('../../src/specificClass');
|
|
const { makeMachineConfig, makeStateConfig, makeChildMeasurement } = require('../helpers/factories');
|
|
|
|
test('pressure initialization combinations are handled explicitly', () => {
|
|
const createMachine = () => new Machine(makeMachineConfig(), makeStateConfig({ state: { current: 'operational' } }));
|
|
|
|
// nothing
|
|
let machine = createMachine();
|
|
let status = machine.getPressureInitializationStatus();
|
|
assert.equal(status.initialized, false);
|
|
assert.equal(status.source, null);
|
|
const noPressureValue = machine.getMeasuredPressure();
|
|
assert.equal(noPressureValue, 0);
|
|
assert.ok(machine.predictFlow.fDimension <= 1);
|
|
|
|
// upstream only
|
|
machine = createMachine();
|
|
const upstreamOnly = 850;
|
|
machine.measurements.type('pressure').variant('measured').position('upstream').value(upstreamOnly, Date.now(), 'mbar');
|
|
status = machine.getPressureInitializationStatus();
|
|
assert.equal(status.initialized, true);
|
|
assert.equal(status.hasUpstream, true);
|
|
assert.equal(status.hasDownstream, false);
|
|
assert.equal(status.hasDifferential, false);
|
|
assert.equal(status.source, 'upstream');
|
|
const upstreamValue = machine.getMeasuredPressure();
|
|
assert.equal(Math.round(upstreamValue), upstreamOnly * 100);
|
|
assert.equal(Math.round(machine.predictFlow.fDimension), upstreamOnly * 100);
|
|
|
|
// downstream only
|
|
machine = createMachine();
|
|
const downstreamOnly = 1150;
|
|
machine.measurements.type('pressure').variant('measured').position('downstream').value(downstreamOnly, Date.now(), 'mbar');
|
|
status = machine.getPressureInitializationStatus();
|
|
assert.equal(status.initialized, true);
|
|
assert.equal(status.hasUpstream, false);
|
|
assert.equal(status.hasDownstream, true);
|
|
assert.equal(status.hasDifferential, false);
|
|
assert.equal(status.source, 'downstream');
|
|
const downstreamValue = machine.getMeasuredPressure();
|
|
assert.equal(Math.round(downstreamValue), downstreamOnly * 100);
|
|
assert.equal(Math.round(machine.predictFlow.fDimension), downstreamOnly * 100);
|
|
|
|
// downstream and upstream
|
|
machine = createMachine();
|
|
const upstream = 700;
|
|
const downstream = 1100;
|
|
machine.measurements.type('pressure').variant('measured').position('upstream').value(upstream, Date.now(), 'mbar');
|
|
machine.measurements.type('pressure').variant('measured').position('downstream').value(downstream, Date.now(), 'mbar');
|
|
status = machine.getPressureInitializationStatus();
|
|
assert.equal(status.initialized, true);
|
|
assert.equal(status.hasUpstream, true);
|
|
assert.equal(status.hasDownstream, true);
|
|
assert.equal(status.hasDifferential, true);
|
|
assert.equal(status.source, 'differential');
|
|
const differentialValue = machine.getMeasuredPressure();
|
|
assert.equal(Math.round(differentialValue), (downstream - upstream) * 100);
|
|
assert.equal(Math.round(machine.predictFlow.fDimension), (downstream - upstream) * 100);
|
|
});
|
|
|
|
test('real pressure child data has priority over simulated dashboard pressure', async () => {
|
|
const machine = new Machine(makeMachineConfig(), makeStateConfig({ state: { current: 'operational' } }));
|
|
|
|
machine.updateSimulatedMeasurement('pressure', 'upstream', 900, { unit: 'mbar', timestamp: Date.now() });
|
|
machine.updateSimulatedMeasurement('pressure', 'downstream', 1200, { unit: 'mbar', timestamp: Date.now() });
|
|
assert.equal(Math.round(machine.getMeasuredPressure()), 30000);
|
|
|
|
const upstreamChild = makeChildMeasurement({ id: 'pt-up-real', name: 'PT Up', positionVsParent: 'upstream', type: 'pressure', unit: 'mbar' });
|
|
const downstreamChild = makeChildMeasurement({ id: 'pt-down-real', name: 'PT Down', positionVsParent: 'downstream', type: 'pressure', unit: 'mbar' });
|
|
|
|
await machine.childRegistrationUtils.registerChild(upstreamChild, 'upstream');
|
|
await machine.childRegistrationUtils.registerChild(downstreamChild, 'downstream');
|
|
|
|
upstreamChild.measurements.type('pressure').variant('measured').position('upstream').value(700, Date.now(), 'mbar');
|
|
downstreamChild.measurements.type('pressure').variant('measured').position('downstream').value(1300, Date.now(), 'mbar');
|
|
|
|
assert.equal(Math.round(machine.getMeasuredPressure()), 60000);
|
|
const status = machine.getPressureInitializationStatus();
|
|
assert.equal(status.source, 'differential');
|
|
assert.equal(status.initialized, true);
|
|
});
|