Files
rotatingMachine/test/integration/pressure-initialization.integration.test.js
2026-02-19 17:36:44 +01:00

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);
assert.equal(Math.round(machine.predictFlow.fDimension), upstreamOnly);
// 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);
assert.equal(Math.round(machine.predictFlow.fDimension), downstreamOnly);
// 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);
assert.equal(Math.round(machine.predictFlow.fDimension), downstream - upstream);
});
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()), 300);
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()), 600);
const status = machine.getPressureInitializationStatus();
assert.equal(status.source, 'differential');
assert.equal(status.initialized, true);
});