'use strict'; const test = require('node:test'); const assert = require('node:assert/strict'); const VirtualPressureChildren = require('../../src/pressure/virtualChildren'); const SILENT = { warn() {}, debug() {}, info() {}, error() {} }; const UNIT_POLICY = { canonical: { pressure: 'Pa', flow: 'm3/s', power: 'W', temperature: 'K', atmPressure: 'Pa' }, output: { pressure: 'mbar', flow: 'm3/h', power: 'kW', temperature: 'C' }, }; test('build() returns two children with the expected config shape', () => { const factory = new VirtualPressureChildren({ logger: SILENT, unitPolicy: UNIT_POLICY }); const { upstream, downstream } = factory.build(); for (const child of [upstream, downstream]) { assert.ok(child.config.general.id); assert.ok(child.config.general.name); assert.equal(child.config.functionality.softwareType, 'measurement'); assert.ok(['upstream', 'downstream'].includes(child.config.functionality.positionVsParent)); assert.equal(child.config.asset.type, 'pressure'); assert.equal(child.config.asset.unit, 'mbar'); } assert.equal(upstream.config.functionality.positionVsParent, 'upstream'); assert.equal(downstream.config.functionality.positionVsParent, 'downstream'); }); test('each child has its own MeasurementContainer instance', () => { const factory = new VirtualPressureChildren({ logger: SILENT, unitPolicy: UNIT_POLICY }); const { upstream, downstream } = factory.build(); assert.ok(upstream.measurements); assert.ok(downstream.measurements); assert.notStrictEqual(upstream.measurements, downstream.measurements); }); test('the MeasurementContainer accepts pressure writes (unit policy applied)', () => { const factory = new VirtualPressureChildren({ logger: SILENT, unitPolicy: UNIT_POLICY }); const { upstream } = factory.build(); upstream.measurements .type('pressure').variant('measured').position('upstream') .value(1000, Date.now(), 'mbar'); const v = upstream.measurements .type('pressure').variant('measured').position('upstream').getCurrentValue(); assert.ok(v != null); }); test('setParentRef wires children to the supplied parent ref', () => { const parent = { id: 'parent-machine' }; const factory = new VirtualPressureChildren({ logger: SILENT, unitPolicy: UNIT_POLICY, parentRef: parent, }); const { upstream, downstream } = factory.build(); assert.equal(typeof upstream.measurements.setParentRef, 'function'); assert.equal(typeof downstream.measurements.setParentRef, 'function'); }); test('custom ids are honoured', () => { const factory = new VirtualPressureChildren({ logger: SILENT, unitPolicy: UNIT_POLICY, ids: { upstream: 'sim-u', downstream: 'sim-d' }, }); const { upstream, downstream } = factory.build(); assert.equal(upstream.config.general.id, 'sim-u'); assert.equal(downstream.config.general.id, 'sim-d'); });