/** * Duration formatting utility tests */ import { describe, it, expect } from "vitest"; import { formatDuration, formatSecondsDuration } from "./duration"; describe("formatDuration", () => { it("should format duration from Jellyfin ticks (mm:ss format)", () => { // 1 second = 10,000,000 ticks expect(formatDuration(10000000)).toBe("0:01"); expect(formatDuration(60000000)).toBe("1:00"); expect(formatDuration(600000000)).toBe("10:00"); expect(formatDuration(3661000000)).toBe("61:01"); }); it("should format duration with hh:mm:ss format", () => { // 1 hour = 3600 seconds expect(formatDuration(36000000000, "hh:mm:ss")).toBe("1:00:00"); expect(formatDuration(36600000000, "hh:mm:ss")).toBe("1:01:40"); expect(formatDuration(3661000000, "hh:mm:ss")).toBe("0:01:01"); }); it("should return empty string for undefined or 0 ticks", () => { expect(formatDuration(undefined)).toBe(""); expect(formatDuration(0)).toBe(""); }); it("should pad seconds with leading zero", () => { expect(formatDuration(5000000)).toBe("0:05"); expect(formatDuration(15000000)).toBe("0:15"); }); it("should handle large durations", () => { // 2 hours 30 minutes 45 seconds expect(formatDuration(90450000000, "hh:mm:ss")).toBe("2:30:45"); }); }); describe("formatSecondsDuration", () => { it("should format duration from seconds (mm:ss format)", () => { expect(formatSecondsDuration(1)).toBe("0:01"); expect(formatSecondsDuration(60)).toBe("1:00"); expect(formatSecondsDuration(61)).toBe("1:01"); expect(formatSecondsDuration(3661)).toBe("61:01"); }); it("should format duration with hh:mm:ss format", () => { expect(formatSecondsDuration(3600, "hh:mm:ss")).toBe("1:00:00"); expect(formatSecondsDuration(3661, "hh:mm:ss")).toBe("1:01:01"); expect(formatSecondsDuration(7325, "hh:mm:ss")).toBe("2:02:05"); }); it("should pad minutes and seconds with leading zeros", () => { expect(formatSecondsDuration(5, "hh:mm:ss")).toBe("0:00:05"); expect(formatSecondsDuration(65, "hh:mm:ss")).toBe("0:01:05"); }); });