import { describe, it, expect } from "vitest"; import { computeStaleness, isMcError } from "@/lib/types"; describe("computeStaleness", () => { it("returns 'normal' for null timestamp", () => { expect(computeStaleness(null)).toBe("normal"); }); it("returns 'fresh' for items less than 1 day old", () => { const twoHoursAgo = new Date(Date.now() - 2 * 60 * 60 * 1000).toISOString(); expect(computeStaleness(twoHoursAgo)).toBe("fresh"); }); it("returns 'normal' for items 1-2 days old", () => { const thirtyHoursAgo = new Date( Date.now() - 30 * 60 * 60 * 1000 ).toISOString(); expect(computeStaleness(thirtyHoursAgo)).toBe("normal"); }); it("returns 'amber' for items 3-6 days old", () => { const fourDaysAgo = new Date( Date.now() - 4 * 24 * 60 * 60 * 1000 ).toISOString(); expect(computeStaleness(fourDaysAgo)).toBe("amber"); }); it("returns 'urgent' for items 7+ days old", () => { const tenDaysAgo = new Date( Date.now() - 10 * 24 * 60 * 60 * 1000 ).toISOString(); expect(computeStaleness(tenDaysAgo)).toBe("urgent"); }); }); describe("isMcError", () => { it("returns true for valid McError objects", () => { const error = { code: "LORE_UNAVAILABLE", message: "lore CLI not found", recoverable: true, }; expect(isMcError(error)).toBe(true); }); it("returns false for plain strings", () => { expect(isMcError("some error")).toBe(false); }); it("returns false for null", () => { expect(isMcError(null)).toBe(false); }); it("returns false for objects missing required fields", () => { expect(isMcError({ code: "TEST" })).toBe(false); expect(isMcError({ message: "test" })).toBe(false); expect(isMcError({ recoverable: true })).toBe(false); }); });