import { describe, it, expect, vi, afterEach } from "vitest"; import { timeAgo } from "../time.js"; describe("timeAgo", () => { afterEach(() => { vi.useRealTimers(); }); function setNow(iso: string) { vi.useFakeTimers(); vi.setSystemTime(new Date(iso)); } it("returns 'just now' for under 60 seconds", () => { setNow("2026-01-01T12:00:30Z"); expect(timeAgo(new Date("2026-01-01T12:00:00Z"))).toBe("just now"); }); it("returns '1 minute ago' (singular)", () => { setNow("2026-01-01T12:01:00Z"); expect(timeAgo(new Date("2026-01-01T12:00:00Z"))).toBe("1 minute ago"); }); it("returns 'N minutes ago' for under 60 minutes", () => { setNow("2026-01-01T12:05:00Z"); expect(timeAgo(new Date("2026-01-01T12:00:00Z"))).toBe("5 minutes ago"); }); it("returns '1 hour ago' (singular)", () => { setNow("2026-01-01T13:00:00Z"); expect(timeAgo(new Date("2026-01-01T12:00:00Z"))).toBe("1 hour ago"); }); it("returns 'N hours ago' for under 24 hours", () => { setNow("2026-01-01T15:00:00Z"); expect(timeAgo(new Date("2026-01-01T12:00:00Z"))).toBe("3 hours ago"); }); it("returns '1 day ago' (singular)", () => { setNow("2026-01-02T12:00:00Z"); expect(timeAgo(new Date("2026-01-01T12:00:00Z"))).toBe("1 day ago"); }); it("returns 'N days ago' for under 30 days", () => { setNow("2026-01-08T12:00:00Z"); expect(timeAgo(new Date("2026-01-01T12:00:00Z"))).toBe("7 days ago"); }); it("returns ISO date (YYYY-MM-DD) for 30+ days old", () => { setNow("2026-02-01T12:00:00Z"); expect(timeAgo(new Date("2026-01-01T12:00:00Z"))).toBe("2026-01-01"); }); });