Files
monster/test/monster.test.js
2026-01-13 15:38:59 +01:00

122 lines
3.1 KiB
JavaScript

const test = require('node:test');
const assert = require('node:assert/strict');
const Monster = require('../src/specificClass');
function createConfig(overrides = {}) {
return {
general: {
name: 'monster-test',
logging: { enabled: false, logLevel: 'error' },
},
asset: {
emptyWeightBucket: 3,
...overrides.asset,
},
constraints: {
samplingtime: 24,
minVolume: 5,
maxWeight: 23,
...overrides.constraints,
},
...overrides,
};
}
test('constructor derives boundaries and targets from config', () => {
const monster = new Monster(createConfig());
assert.equal(monster.maxVolume, 20);
assert.equal(monster.minPuls, 100);
assert.equal(monster.maxPuls, 400);
assert.equal(monster.absMaxPuls, 1100);
assert.equal(monster.targetVolume, 10);
assert.equal(monster.targetPuls, 200);
assert.equal(monster.running, false);
});
test('bucket volume updates output and bucket weight', () => {
const monster = new Monster(createConfig());
monster.bucketVol = 1.5;
assert.equal(monster.bucketVol, 1.5);
assert.equal(monster.bucketWeight, 4.5);
const out = monster.getOutput();
assert.equal(out.bucketVol, 1.5);
assert.equal(out.bucketWeight, 4.5);
});
test('monsternametijden setter registers next date for matching sample', () => {
const monster = new Monster(createConfig());
const future = new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString();
monster.monsternametijden = [
{
SAMPLE_NAME: monster.aquonSampleName,
DESCRIPTION: 'test',
SAMPLED_DATE: future,
START_DATE: future,
END_DATE: future,
},
];
assert.ok(monster.nextDate >= Date.now());
assert.ok(monster.daysPerYear >= 1);
});
test('sampling_program starts and emits pulses based on m3PerTick', () => {
const monster = new Monster(
createConfig({
constraints: {
samplingtime: 1,
minVolume: 0.1,
maxWeight: 23,
},
})
);
monster.nextDate = Date.now() + 60_000;
monster.i_start = true;
monster.q = 28; // => predFlow = 28 m3 for 1 hour (fallback)
monster.m3PerTick = 1; // with m3PerPuls ~1 this should trigger a pulse
monster.sampling_program();
assert.equal(monster.running, true);
assert.equal(monster.sumPuls, 1);
assert.equal(monster.pulse, true);
assert.equal(monster.bucketVol, 0.05);
// Next loop without flow should stop pulsing
monster.m3PerTick = 0;
monster.sampling_program();
assert.equal(monster.pulse, false);
});
test('sampling_program stops and resets after stop_time has passed', () => {
const monster = new Monster(
createConfig({
constraints: { samplingtime: 1, minVolume: 0.1, maxWeight: 23 },
})
);
monster.running = true;
monster.stop_time = Date.now() - 1;
monster.sumPuls = 10;
monster.bucketVol = 0.5;
monster.predFlow = 123;
monster.predM3PerSec = 1;
monster.m3Total = 10;
monster.sampling_program();
assert.equal(monster.running, false);
assert.equal(monster.sumPuls, 0);
assert.equal(monster.bucketVol, 0);
assert.equal(monster.predFlow, 0);
assert.equal(monster.predM3PerSec, 0);
assert.equal(monster.m3Total, 0);
});