diff --git a/ui/src/ui/presenter.test.ts b/ui/src/ui/presenter.test.ts new file mode 100644 index 00000000000..19e4f4d9ecf --- /dev/null +++ b/ui/src/ui/presenter.test.ts @@ -0,0 +1,13 @@ +import { describe, expect, it } from "vitest"; +import { formatNextRun } from "./presenter.ts"; + +describe("formatNextRun", () => { + it("returns n/a for Date-invalid finite timestamps", () => { + expect(formatNextRun(8_640_000_000_000_001)).toBe("n/a"); + }); + + it("formats valid timestamps with weekday context", () => { + expect(formatNextRun(0)).toBe("n/a"); + expect(formatNextRun(1_700_000_000_000)).toContain(","); + }); +}); diff --git a/ui/src/ui/presenter.ts b/ui/src/ui/presenter.ts index c0e3c42a13d..95aa981400e 100644 --- a/ui/src/ui/presenter.ts +++ b/ui/src/ui/presenter.ts @@ -1,6 +1,7 @@ import { t } from "../i18n/index.ts"; import { resolveCronJobLastRunStatus } from "./cron-status.ts"; import { + formatDateMs, formatRelativeTimestamp, formatDurationHuman, formatMs, @@ -25,7 +26,10 @@ export function formatNextRun(ms?: number | null) { if (!ms) { return t("common.na"); } - const weekday = new Date(ms).toLocaleDateString(undefined, { weekday: "short" }); + const weekday = formatDateMs(ms, { weekday: "short" }); + if (weekday === t("common.na")) { + return weekday; + } return `${weekday}, ${formatMs(ms)} (${formatRelativeTimestamp(ms)})`; }