83 lines
2.9 KiB
TypeScript
83 lines
2.9 KiB
TypeScript
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");
|
|
});
|
|
});
|