Files
diffuser/test/specificClass.test.js
2026-03-31 14:26:08 +02:00

81 lines
2.2 KiB
JavaScript

const test = require('node:test');
const assert = require('node:assert/strict');
const Diffuser = require('../src/specificClass');
function makeConfig(overrides = {}) {
return {
general: {
name: 'Zone_1',
logging: {
enabled: false,
logLevel: 'error',
},
},
functionality: {
softwareType: 'diffuser',
role: 'aeration diffuser',
},
diffuser: {
number: 1,
elements: 4,
density: 2.4,
waterHeight: 4.5,
alfaFactor: 0.7,
headerPressure: 0,
localAtmPressure: 1013.25,
waterDensity: 997,
...overrides,
},
};
}
test('diffuser starts idle with zero production', () => {
const diffuser = new Diffuser(makeConfig());
const output = diffuser.getOutput();
assert.equal(diffuser.idle, true);
assert.equal(output.oKgo2H, 0);
assert.equal(typeof output.oPLoss, 'number');
});
test('diffuser calculates oxygen transfer and pressure once airflow is applied', () => {
const diffuser = new Diffuser(makeConfig());
diffuser.setFlow(24);
const output = diffuser.getOutput();
assert.equal(diffuser.idle, false);
assert.ok(output.oFlowElement > 0);
assert.ok(output.oOtr > 0);
assert.ok(output.oPLoss > diffuser.o_p_water);
assert.ok(output.oKgo2H > 0);
});
test('diffuser increases total pressure when water height rises', () => {
const diffuser = new Diffuser(makeConfig());
diffuser.setFlow(24);
const lowHeadLoss = diffuser.getOutput().oPLoss;
diffuser.setWaterHeight(6);
const highHeadLoss = diffuser.getOutput().oPLoss;
assert.ok(highHeadLoss > lowHeadLoss);
});
test('diffuser raises warnings and alarms when flow per element is too low', () => {
const diffuser = new Diffuser(makeConfig({ elements: 1, waterHeight: 3 }));
diffuser.setFlow(0.5);
assert.equal(diffuser.warning.state, true);
assert.equal(diffuser.alarm.state, true);
assert.equal(diffuser.getStatus().fill, 'red');
});
test('diffuser converts oxygen output to reactor OTR per zone volume', () => {
const diffuser = new Diffuser(makeConfig({ waterHeight: 4.5 }));
diffuser.setFlow(24);
const expected = diffuser.getOutput().oKgo2H * 1000 * 24 / 500;
assert.ok(Math.abs(diffuser.getReactorOtr(500) - expected) < 1e-8);
});