63 lines
2.2 KiB
TypeScript
63 lines
2.2 KiB
TypeScript
import { describe, it, expect, setSystemTime, beforeAll, afterAll } from "bun:test";
|
|
import { getVehicleDisplayStatus } from "./utils";
|
|
import { Vehicle } from "./api";
|
|
|
|
describe("getVehicleDisplayStatus", () => {
|
|
beforeAll(() => {
|
|
setSystemTime(new Date("2024-01-01T12:00:10Z")); // Mock Current Time: 12:00:10 UTC
|
|
});
|
|
|
|
afterAll(() => {
|
|
setSystemTime(); // Reset
|
|
});
|
|
|
|
it("should return Online if heartbeat is recent (<5s)", () => {
|
|
const vehicle: Vehicle = {
|
|
vin: "TEST",
|
|
status: "Online",
|
|
currentVersion: "1.0",
|
|
lastHeartbeat: "2024-01-01T12:00:08", // 2 seconds ago (assuming UTC fix)
|
|
groupId: null
|
|
};
|
|
// The function appends Z -> 12:00:08Z. Diff is 2000ms.
|
|
expect(getVehicleDisplayStatus(vehicle)).toBe("Online");
|
|
});
|
|
|
|
it("should return Offline if heartbeat is old (>5s)", () => {
|
|
const vehicle: Vehicle = {
|
|
vin: "TEST",
|
|
status: "Online",
|
|
currentVersion: "1.0",
|
|
lastHeartbeat: "2024-01-01T12:00:04", // 6 seconds ago
|
|
groupId: null
|
|
};
|
|
// The function appends Z -> 12:00:04Z. Diff is 6000ms.
|
|
expect(getVehicleDisplayStatus(vehicle)).toBe("Offline");
|
|
});
|
|
|
|
it("should handle already UTC string with Z", () => {
|
|
const vehicle: Vehicle = {
|
|
vin: "TEST",
|
|
status: "Online",
|
|
currentVersion: "1.0",
|
|
lastHeartbeat: "2024-01-01T12:00:09Z", // 1s ago
|
|
groupId: null
|
|
};
|
|
expect(getVehicleDisplayStatus(vehicle)).toBe("Online");
|
|
});
|
|
|
|
it("should preserve Updating status even if old heartbeat", () => {
|
|
// Usually updating vehicles might not heartbeat? Or they do.
|
|
// Logic says: if (displayStatus === 'Online' && diffMs > 5000) -> Offline.
|
|
// If status is 'Updating', it stays 'Updating'.
|
|
const vehicle: Vehicle = {
|
|
vin: "TEST",
|
|
status: "Updating",
|
|
currentVersion: "1.0",
|
|
lastHeartbeat: "2024-01-01T12:00:00", // 10s ago
|
|
groupId: null
|
|
};
|
|
expect(getVehicleDisplayStatus(vehicle)).toBe("Updating");
|
|
});
|
|
});
|