57 lines · 2.1 KB · TypeScript
RawDownload
// @effect-diagnostics globalDate:off -- A fixed instant keeps calendar-window assertions deterministic.import { describe, expect, it } from "vite-plus/test"; import {  enumerateHourStarts,  formatDateTimeShort,  formatHourShort,  formatRelativeHourShort,  makeWindow,} from "./usageFormat.ts"; describe("hourly usage formatting", () => {  it("enumerates 24 fixed buckets across a rolling window", () => {    const hours = enumerateHourStarts("2026-08-10T12:37:00.000Z", "2026-08-11T12:37:00.000Z");     expect(hours).toHaveLength(24);    expect(hours[0]).toBe("2026-08-10T12:37:00.000Z");    expect(hours[23]).toBe("2026-08-11T11:37:00.000Z");  });   it("formats rolling instants in the requested time zone", () => {    expect(formatHourShort("2026-08-11T00:37:00.000Z", "UTC")).toBe("12 AM");    expect(formatHourShort("2026-08-11T12:37:00.000Z", "UTC")).toBe("12 PM");    expect(formatDateTimeShort("2026-08-11T17:37:00.000Z", "UTC")).toBe("Aug 11, 5 PM");  });   it("disambiguates repeated hours during a fall-back transition", () => {    expect(formatHourShort("2026-11-01T05:37:00.000Z", "America/New_York")).toBe("1 AM EDT");    expect(formatHourShort("2026-11-01T06:37:00.000Z", "America/New_York")).toBe("1 AM EST");  });   it("makes hourly tooltip dates relative to the window in its requested time zone", () => {    const windowEnd = "2026-08-11T14:37:00.000Z";     expect(formatRelativeHourShort("2026-08-10T17:37:00.000Z", windowEnd, "UTC")).toBe(      "5 PM yesterday",    );    expect(formatRelativeHourShort("2026-08-11T14:37:00.000Z", windowEnd, "UTC")).toBe(      "2 PM today",    );    expect(      formatRelativeHourShort(        "2026-08-11T01:37:00.000Z",        "2026-08-11T10:37:00.000Z",        "America/Los_Angeles",      ),    ).toBe("6 PM yesterday");  });   it("builds an exact minute-aligned 24-hour request", () => {    const window = makeWindow(1, new Date("2026-08-11T12:37:42.123Z"), "hour");     expect(window.resolution).toBe("hour");    expect(window.sinceTime).toBe("2026-08-10T12:37:00.000Z");    expect(window.untilTime).toBe("2026-08-11T12:37:00.000Z");  });});