Files
taiheEhu/scripts/tests/report-utils.test.cjs
2026-05-09 18:13:53 +08:00

80 lines
1.9 KiB
JavaScript

const assert = require("node:assert/strict");
const {
getSleepLevel,
getStatusTone,
pickReportRecord
} = require("../../tmp/report-tests/report-utils.js");
const { resolveReportBackAction } = require("../../tmp/report-tests/navigation.js");
const { computeAppBarMetrics, resolveBackNavigation } = require("../../tmp/report-tests/utils/app-bar-metrics.js");
function run(name, fn) {
try {
fn();
console.log(`PASS ${name}`);
} catch (error) {
console.error(`FAIL ${name}`);
throw error;
}
}
run("getSleepLevel maps score 65 to 合格", () => {
assert.deepEqual(getSleepLevel(65), {
label: "合格",
tone: "warning"
});
});
run("getStatusTone maps 异常 to danger", () => {
assert.equal(getStatusTone("异常"), "danger");
});
run("pickReportRecord falls back to first device record", () => {
const record = pickReportRecord(
{
"2026-05-08": {
roomA: {
deviceA: { score: 65 },
deviceB: { score: 79 }
}
}
},
"2026-05-08",
"roomA",
"missing-device"
);
assert.equal(record.score, 65);
});
run("resolveReportBackAction returns navigateBack when there is history", () => {
assert.equal(resolveReportBackAction(2), "navigateBack");
});
run("resolveReportBackAction falls back to home when report page has no history", () => {
assert.equal(resolveReportBackAction(1), "redirectHome");
});
run("computeAppBarMetrics uses menu button metrics when available", () => {
assert.deepEqual(
computeAppBarMetrics({
statusBarHeight: 24,
windowWidth: 390,
menuButtonRect: {
top: 30,
left: 300,
height: 32
}
}),
{
topInset: 24,
menuTop: 30,
menuHeight: 32,
capsuleSafeWidth: 96
}
);
});
run("resolveBackNavigation falls back when stack has no previous page", () => {
assert.equal(resolveBackNavigation(1), "redirectHome");
});