import assert from "node:assert/strict"; import test from "node:test"; import { createFileTimestamp, evaluateStability, formatWeight, parseScaleMessage, } from "../app/scale-utils.ts"; test("电子秤消息统一转换为千克", () => { assert.equal(parseScaleMessage("2.49"), 2.49); assert.equal(parseScaleMessage('{"weight":2490,"unit":"g"}'), 2.49); assert.equal(parseScaleMessage('{"weightKg":2.49}'), 2.49); assert.ok(Math.abs(parseScaleMessage('{"value":2.20462262,"unit":"lb"}') - 1) < 1e-9); }); test("电子秤消息拒绝非法数据", () => { assert.equal(parseScaleMessage(""), null); assert.equal(parseScaleMessage("-1"), null); assert.equal(parseScaleMessage('{"weight":"abc"}'), null); assert.equal(parseScaleMessage('{"weight":1,"unit":"oz"}'), null); }); test("连续相同读数可完成稳定判断", () => { assert.deepEqual(evaluateStability([2.49, 2.49, 2.49, 2.49, 2.49]), { stable: false, progress: 70, }); assert.deepEqual(evaluateStability([2.49, 2.49, 2.49, 2.49, 2.49, 2.49]), { stable: true, progress: 100, }); assert.equal(evaluateStability([2.4, 2.5, 2.42, 2.51, 2.43, 2.5]).stable, false); }); test("重量格式和文件时间戳符合终端规范", () => { assert.equal(formatWeight(2.486, "kg"), "2.49"); assert.equal(formatWeight(2.486, "g"), "2486.00"); assert.equal(formatWeight(Number.NaN, "kg"), "0.00"); const localTime = new Date(2026, 6, 28, 16, 9, 5).toISOString(); assert.equal(createFileTimestamp(localTime), "20260728160905"); });