import { describe, expect, it } from "vitest"; import { dayRangeNairobi, isBusinessDate, startOfMonthNairobi, todayNairobi } from "@/lib/server/businessDay"; describe("Nairobi business day", () => { it("rolls over at midnight EAT, not midnight UTC", () => { // 00:30 EAT on 12 Oct = 21:30 UTC on 11 Oct. expect(todayNairobi(new Date("2026-10-11T21:30:00Z"))).toBe("2026-10-12"); // 23:30 EAT on 11 Oct = 20:30 UTC on 11 Oct. expect(todayNairobi(new Date("2026-10-11T20:30:00Z"))).toBe("2026-10-11"); }); it("maps a business date to the UTC range 21:00 -> 21:00", () => { const { start, end } = dayRangeNairobi("2026-10-12"); expect(start.toISOString()).toBe("2026-10-11T21:00:00.000Z"); expect(end.toISOString()).toBe("2026-10-12T21:00:00.000Z"); }); it("starts the month on the 1st at 00:00 EAT", () => { expect(startOfMonthNairobi(new Date("2026-10-31T22:00:00Z")).toISOString()).toBe("2026-10-31T21:00:00.000Z"); expect(startOfMonthNairobi(new Date("2026-10-15T10:00:00Z")).toISOString()).toBe("2026-09-30T21:00:00.000Z"); }); it("rejects malformed dates", () => { expect(isBusinessDate("2026-02-30")).toBe(false); expect(isBusinessDate("2026-2-3")).toBe(false); expect(isBusinessDate("2026-02-28")).toBe(true); expect(() => dayRangeNairobi("nope")).toThrow(); }); });