Openstatus www.openstatus.dev
at main 56 lines 1.7 kB view raw
1import { describe, expect, it } from "bun:test"; 2import { calculateDuration, formatDuration } from "./duration"; 3 4describe("formatDuration", () => { 5 it("formats short durations (seconds only)", () => { 6 expect(formatDuration(30000)).toBe("30s"); 7 }); 8 9 it("formats medium durations (minutes and seconds)", () => { 10 expect(formatDuration(135000)).toBe("2m 15s"); 11 }); 12 13 it("formats long durations (hours, minutes, seconds)", () => { 14 expect(formatDuration(8130000)).toBe("2h 15m 30s"); 15 }); 16 17 it("formats very long durations (days and hours)", () => { 18 expect(formatDuration(90000000)).toBe("1d 1h"); 19 }); 20 21 it("handles 0ms", () => { 22 expect(formatDuration(0)).toBe("0s"); 23 }); 24 25 it("handles negative values", () => { 26 expect(formatDuration(-1000)).toBe("0s"); 27 }); 28 29 it("handles sub-second durations", () => { 30 expect(formatDuration(500)).toBe("0s"); 31 }); 32 33 it("respects maxUnits option", () => { 34 expect(formatDuration(90061000, { maxUnits: 2 })).toBe("1d 1h"); 35 expect(formatDuration(90061000, { maxUnits: 1 })).toBe("1d"); 36 }); 37 38 it("only shows non-zero units", () => { 39 expect(formatDuration(3600000)).toBe("1h"); 40 expect(formatDuration(60000)).toBe("1m"); 41 expect(formatDuration(86400000)).toBe("1d"); 42 }); 43}); 44 45describe("calculateDuration", () => { 46 it("calculates duration between two dates", () => { 47 const start = new Date("2026-01-22T10:00:00Z"); 48 const end = new Date("2026-01-22T12:15:30Z"); 49 expect(calculateDuration(start, end)).toBe(8130000); 50 }); 51 52 it("handles same start and end", () => { 53 const date = new Date("2026-01-22T10:00:00Z"); 54 expect(calculateDuration(date, date)).toBe(0); 55 }); 56});