Files
qipai/backend/tests/hardware-smoke-runner.test.mjs

44 lines
1.6 KiB
JavaScript

import assert from 'node:assert/strict';
import {
buildHardwareSmokeCases,
loadHardwareSmokeConfig,
runHardwareSmoke
} from '../dist/devices/hardware-smoke-runner.js';
const config = loadHardwareSmokeConfig({
QIPAI_HARDWARE_SMOKE_ENABLE: 'false',
QIPAI_HARDWARE_SMOKE_ALLOW_ACTIONS: 'false',
QIPAI_HARDWARE_CONTROL_BOX_DEVICE_ID: 'BOX_001',
QIPAI_HARDWARE_SMART_SOCKET_DEVICE_ID: 'SOCKET_001'
});
const dryCases = buildHardwareSmokeCases(config);
assert.deepEqual(dryCases.map((item) => item.id), [
'control-box-basic-info',
'smart-socket-work-info'
]);
assert.equal(dryCases.every((item) => item.destructive === false), true);
const actionCases = buildHardwareSmokeCases({
...config,
allowActions: true,
subLockSubId: 'SUB001'
});
assert.equal(actionCases.some((item) => item.id === 'control-box-power-slot1-off'), true);
assert.equal(actionCases.some((item) => item.id === 'sub-lock-open'), true);
assert.equal(actionCases.some((item) => item.id === 'smart-socket-switch-off'), true);
assert.equal(actionCases.some((item) => item.destructive), true);
const dryRun = await runHardwareSmoke(config, dryCases);
assert.equal(dryRun.length, 2);
assert.equal(dryRun.every((item) => item.status === 'DRY_RUN'), true);
assert.equal(dryRun.every((item) => !String(item.reason).includes('password')), true);
const skipped = await runHardwareSmoke(loadHardwareSmokeConfig({}), []);
assert.deepEqual(skipped, [{
caseId: 'hardware-smoke-config',
status: 'SKIP',
reason: 'No DeviceID configured.'
}]);
console.log('PASS: M06-G hardware smoke runner builds safe dry-run and action matrices.');