import { describe, expect, it } from "vitest"; import { formatMonitoringInterval, moveTimelineTime, snapTimelineTime } from "./scada-replay-time"; const minute = 60_000; const start = Date.parse("2026-10-08T08:07:00+08:00"); describe("SCADA timeline timestamps", () => { it("quantizes continuous pointer positions to five-minute SCADA timestamps", () => { const end = start + 60 * minute; expect(snapTimelineTime(Date.parse("2026-10-08T08:26:00+08:00"), start, end, 5 * minute)) .toBe(Date.parse("2026-10-08T08:25:00+08:00")); expect(snapTimelineTime(Date.parse("2026-10-08T08:28:00+08:00"), start, end, 5 * minute)) .toBe(Date.parse("2026-10-08T08:30:00+08:00")); }); it("moves keyboard controls between clock-aligned five-minute timestamps", () => { const end = start + 60 * minute; expect(moveTimelineTime(start, start, end, 5 * minute, 1)).toBe(Date.parse("2026-10-08T08:10:00+08:00")); expect(moveTimelineTime(start + 6 * minute, start, end, 5 * minute, -1)).toBe(Date.parse("2026-10-08T08:10:00+08:00")); }); it("reaches exact range endpoints and never leaves the selected range", () => { const end = start + 22 * minute; expect(moveTimelineTime(end - minute, start, end, 5 * minute, 1)).toBe(end); expect(moveTimelineTime(start + minute, start, end, 5 * minute, -1)).toBe(start); }); it("formats the independent project monitoring period", () => { expect(formatMonitoringInterval(900)).toBe("15 分钟"); expect(formatMonitoringInterval(91)).toBe("91 秒"); }); });