You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
3.2 KiB
JavaScript

const assert = require('node:assert/strict');
const test = require('node:test');
const {
getProcessingDelay,
isDangerousCommand,
matchesOfficialSyntax,
normalizeCommand
} = require('../api/ezo-command-service');
test('accepts official calibration commands by sensor', () => {
assert.equal(matchesOfficialSyntax('rtd', 'Cal,25.00'), true);
assert.equal(matchesOfficialSyntax('ph', 'Cal,mid,7.00'), true);
assert.equal(matchesOfficialSyntax('ph', 'Cal,low,4.00'), true);
assert.equal(matchesOfficialSyntax('ph', 'Cal,high,10.00'), true);
assert.equal(matchesOfficialSyntax('do', 'Cal'), true);
assert.equal(matchesOfficialSyntax('do', 'Cal,0'), true);
assert.equal(matchesOfficialSyntax('ec', 'Cal,dry'), true);
assert.equal(matchesOfficialSyntax('ec', 'Cal,1413'), true);
assert.equal(matchesOfficialSyntax('ec', 'Cal,low,12880'), true);
assert.equal(matchesOfficialSyntax('ec', 'Cal,high,80000'), true);
});
test('rejects commands assigned to the wrong sensor', () => {
assert.equal(matchesOfficialSyntax('do', 'Cal,atm'), false);
assert.equal(matchesOfficialSyntax('rtd', 'Cal,mid,7'), false);
assert.equal(matchesOfficialSyntax('ph', 'Cal,dry'), false);
assert.equal(matchesOfficialSyntax('rtd', 'T,25'), false);
assert.equal(matchesOfficialSyntax('ec', 'K,0'), false);
assert.equal(matchesOfficialSyntax('ec', 'K,10.3'), false);
assert.equal(matchesOfficialSyntax('ec', 'TDS,0'), false);
assert.equal(matchesOfficialSyntax('ec', 'TDS,1.01'), false);
});
test('uses Atlas processing delays for critical commands', () => {
assert.equal(getProcessingDelay('rtd', 'R'), 600);
assert.equal(getProcessingDelay('ph', 'R'), 900);
assert.equal(getProcessingDelay('do', 'R'), 600);
assert.equal(getProcessingDelay('ec', 'R'), 600);
assert.equal(getProcessingDelay('do', 'Cal'), 1300);
assert.equal(getProcessingDelay('do', 'Cal,0'), 1300);
assert.equal(getProcessingDelay('ph', 'Cal,mid,7'), 900);
assert.equal(getProcessingDelay('ec', 'Cal,low,12880'), 600);
assert.equal(getProcessingDelay('ec', 'K,1.0'), 600);
assert.equal(getProcessingDelay('rtd', 'Status'), 300);
});
test('accepts RTD data logger and memory commands from the datasheet', () => {
assert.equal(matchesOfficialSyntax('rtd', 'D,1'), true);
assert.equal(matchesOfficialSyntax('rtd', 'D,32000'), true);
assert.equal(matchesOfficialSyntax('rtd', 'D,32001'), false);
assert.equal(matchesOfficialSyntax('rtd', 'M'), true);
assert.equal(matchesOfficialSyntax('rtd', 'M,?'), true);
assert.equal(matchesOfficialSyntax('rtd', 'M,clear'), true);
});
test('preserves the hexadecimal spacing required by Import', () => {
const command = normalizeCommand(' Import, 59 6F 75 20 61 72 ');
assert.equal(command, 'Import,59 6F 75 20 61 72');
assert.equal(matchesOfficialSyntax('ph', command), true);
assert.equal(matchesOfficialSyntax('ph', 'Export,'), false);
});
test('requires confirmation for destructive calibration and memory commands', () => {
assert.equal(isDangerousCommand('Cal,clear'), true);
assert.equal(isDangerousCommand('M,clear'), true);
assert.equal(isDangerousCommand('Import,59 6F'), true);
assert.equal(isDangerousCommand('Cal,mid,7'), false);
});