Files
reactor/test/integration/upstream-reactor.integration.test.js
2026-02-19 17:37:42 +01:00

49 lines
1.5 KiB
JavaScript

const test = require('node:test');
const assert = require('node:assert/strict');
const { Reactor_CSTR } = require('../../src/specificClass');
const { makeReactorConfig } = require('../helpers/factories');
const DAY_MS = 1000 * 60 * 60 * 24;
test('registering upstream reactor subscribes to upstream stateChange events', () => {
const downstream = new Reactor_CSTR(makeReactorConfig({ reactor_type: 'CSTR' }));
const upstream = new Reactor_CSTR(makeReactorConfig({ reactor_type: 'CSTR' }));
let calledWith = null;
downstream.updateState = (timestamp) => {
calledWith = timestamp;
};
downstream.registerChild(upstream, 'reactor');
upstream.emitter.emit('stateChange', 12345);
assert.equal(downstream.upstreamReactor, upstream);
assert.equal(calledWith, 12345);
});
test('updateState pulls influent from upstream reactor effluent when linked', () => {
const downstream = new Reactor_CSTR(makeReactorConfig({ reactor_type: 'CSTR', n_inlets: 1, timeStep: 1 }));
const upstream = new Reactor_CSTR(makeReactorConfig({ reactor_type: 'CSTR', n_inlets: 1 }));
upstream.Fs[0] = 3;
upstream.state = Array(13).fill(11);
downstream.upstreamReactor = upstream;
downstream.currentTime = 0;
downstream.timeStep = 1;
downstream.speedUpFactor = 1;
let ticks = 0;
downstream.tick = () => {
ticks += 1;
return downstream.state;
};
downstream.updateState(DAY_MS);
assert.equal(ticks, 1);
assert.equal(downstream.Fs[0], 3);
assert.deepEqual(downstream.Cs_in[0], Array(13).fill(11));
});