import { describe, expect, it } from "vitest"; import { formatDate, formatDuration, formatTime } from "../utils/format.js"; describe("formatDate", () => { it("formate une date ISO locale au format JJ/MM", () => { // ISO without timezone is interpreted as local time. expect(formatDate("2026-04-25T12:00:00")).toBe("25/04"); }); it("formate une date numerique (timestamp Unix en secondes)", () => { // 2026-01-01T12:00:00 UTC = 1767182400; local date can vary by tz. // We only verify that the result uses the XX/XX format. const result = formatDate(1767182400); expect(result).toMatch(/^\d{2}\/\d{2}$/); }); it("formate une chaine numerique comme un timestamp Unix", () => { const asNumber = formatDate(1767182400); const asString = formatDate("1767182400"); expect(asString).toBe(asNumber); }); it("retourne vide pour les valeurs falsy", () => { expect(formatDate(null)).toBe(""); expect(formatDate(undefined)).toBe(""); expect(formatDate("")).toBe(""); }); it("retourne vide pour une date invalide", () => { expect(formatDate("not-a-date")).toBe(""); expect(formatDate("NaN")).toBe(""); }); }); describe("formatTime", () => { it("formate une heure ISO locale au format HH:MM avec zeros padding", () => { expect(formatTime("2026-04-25T09:05:00")).toBe("09:05"); expect(formatTime("2026-04-25T14:30:00")).toBe("14:30"); }); it("retourne vide pour les valeurs falsy ou invalides", () => { expect(formatTime(null)).toBe(""); expect(formatTime("")).toBe(""); expect(formatTime("invalid")).toBe(""); }); it("traite les chaines numeriques comme timestamps Unix", () => { const asNumber = formatTime(1767182400); const asString = formatTime("1767182400"); expect(asString).toBe(asNumber); }); }); describe("formatDuration", () => { it("retourne vide pour les valeurs falsy", () => { expect(formatDuration(0)).toBe(""); expect(formatDuration(null)).toBe(""); expect(formatDuration(undefined)).toBe(""); }); it("formate les durees inferieures a 60 secondes", () => { expect(formatDuration(30)).toBe("30s"); expect(formatDuration(1)).toBe("1s"); expect(formatDuration(59)).toBe("59s"); }); it("arrondit les secondes pour les durees < 60s", () => { expect(formatDuration(29.7)).toBe("30s"); expect(formatDuration(1.2)).toBe("1s"); }); it("formate les durees avec minutes et secondes", () => { expect(formatDuration(60)).toBe("1m 0s"); expect(formatDuration(90)).toBe("1m 30s"); expect(formatDuration(3661)).toBe("61m 1s"); }); it("arrondit les secondes restantes dans le format m/s", () => { expect(formatDuration(61.8)).toBe("1m 2s"); }); });