const test = require('node:test'); const assert = require('node:assert/strict'); const NodeClass = require('../../src/nodeClass'); const { makeNodeStub, makeREDStub } = require('../helpers/factories'); test('input handler routes topics to source methods', () => { const inst = Object.create(NodeClass.prototype); const node = makeNodeStub(); const calls = []; inst.node = node; inst.RED = makeREDStub({ child1: { source: { id: 'child-source' }, }, }); inst.source = { childRegistrationUtils: { registerChild(childSource, pos) { calls.push(['registerChild', childSource, pos]); }, }, setMode(mode) { calls.push(['setMode', mode]); }, handleInput(source, action, parameter) { calls.push(['handleInput', source, action, parameter]); }, showWorkingCurves() { return { ok: true }; }, showCoG() { return { cog: 1 }; }, updateMeasuredPressure(value, position) { calls.push(['updateMeasuredPressure', value, position]); }, updateMeasuredFlow(value, position) { calls.push(['updateMeasuredFlow', value, position]); }, updateMeasuredTemperature(value, position) { calls.push(['updateMeasuredTemperature', value, position]); }, }; inst._attachInputHandler(); const onInput = node._handlers.input; onInput({ topic: 'setMode', payload: 'auto' }, () => {}, () => {}); onInput({ topic: 'execSequence', payload: { source: 'GUI', action: 'execSequence', parameter: 'startup' } }, () => {}, () => {}); onInput({ topic: 'registerChild', payload: 'child1', positionVsParent: 'downstream' }, () => {}, () => {}); onInput({ topic: 'simulateMeasurement', payload: { type: 'pressure', position: 'upstream', value: 250, unit: 'mbar' } }, () => {}, () => {}); assert.deepEqual(calls[0], ['setMode', 'auto']); assert.deepEqual(calls[1], ['handleInput', 'GUI', 'execSequence', 'startup']); assert.deepEqual(calls[2], ['registerChild', { id: 'child-source' }, 'downstream']); assert.deepEqual(calls[3], ['updateMeasuredPressure', 250, 'upstream']); });