diff --git a/src/commands/sandbox-formatters.e2e.test.ts b/src/commands/sandbox-formatters.e2e.test.ts index b0aed042f..253c682b2 100644 --- a/src/commands/sandbox-formatters.e2e.test.ts +++ b/src/commands/sandbox-formatters.e2e.test.ts @@ -13,134 +13,116 @@ const formatAge = (ms: number) => formatDurationCompact(ms, { spaced: true }) ?? describe("sandbox-formatters", () => { describe("formatStatus", () => { - it("should format running status", () => { - expect(formatStatus(true)).toBe("🟢 running"); - }); - - it("should format stopped status", () => { - expect(formatStatus(false)).toBe("⚫ stopped"); + it.each([ + { running: true, expected: "🟢 running" }, + { running: false, expected: "⚫ stopped" }, + ])("formats running=$running", ({ running, expected }) => { + expect(formatStatus(running)).toBe(expected); }); }); describe("formatSimpleStatus", () => { - it("should format running status without emoji", () => { - expect(formatSimpleStatus(true)).toBe("running"); - }); - - it("should format stopped status without emoji", () => { - expect(formatSimpleStatus(false)).toBe("stopped"); + it.each([ + { running: true, expected: "running" }, + { running: false, expected: "stopped" }, + ])("formats running=$running without emoji", ({ running, expected }) => { + expect(formatSimpleStatus(running)).toBe(expected); }); }); describe("formatImageMatch", () => { - it("should format matching image", () => { - expect(formatImageMatch(true)).toBe("✓"); - }); - - it("should format mismatched image", () => { - expect(formatImageMatch(false)).toBe("⚠️ mismatch"); + it.each([ + { imageMatch: true, expected: "✓" }, + { imageMatch: false, expected: "⚠️ mismatch" }, + ])("formats imageMatch=$imageMatch", ({ imageMatch, expected }) => { + expect(formatImageMatch(imageMatch)).toBe(expected); }); }); describe("formatAge", () => { - it("should format seconds", () => { - expect(formatAge(5000)).toBe("5s"); - expect(formatAge(45000)).toBe("45s"); - }); - - it("should format minutes", () => { - expect(formatAge(60000)).toBe("1m"); - expect(formatAge(90000)).toBe("1m 30s"); // 90 seconds = 1m 30s - expect(formatAge(300000)).toBe("5m"); - }); - - it("should format hours and minutes", () => { - expect(formatAge(3600000)).toBe("1h"); - expect(formatAge(3660000)).toBe("1h 1m"); - expect(formatAge(7200000)).toBe("2h"); - expect(formatAge(5400000)).toBe("1h 30m"); - }); - - it("should format days and hours", () => { - expect(formatAge(86400000)).toBe("1d"); - expect(formatAge(90000000)).toBe("1d 1h"); - expect(formatAge(172800000)).toBe("2d"); - expect(formatAge(183600000)).toBe("2d 3h"); - }); - - it("should handle zero", () => { - expect(formatAge(0)).toBe("0s"); - }); - - it("should handle edge cases", () => { - expect(formatAge(59999)).toBe("1m"); // Rounds to 1 minute exactly - expect(formatAge(3599999)).toBe("1h"); // Rounds to 1 hour exactly - expect(formatAge(86399999)).toBe("1d"); // Rounds to 1 day exactly + it.each([ + { ms: 0, expected: "0s" }, + { ms: 5000, expected: "5s" }, + { ms: 45000, expected: "45s" }, + { ms: 60000, expected: "1m" }, + { ms: 90000, expected: "1m 30s" }, // 90 seconds = 1m 30s + { ms: 300000, expected: "5m" }, + { ms: 3600000, expected: "1h" }, + { ms: 3660000, expected: "1h 1m" }, + { ms: 5400000, expected: "1h 30m" }, + { ms: 7200000, expected: "2h" }, + { ms: 86400000, expected: "1d" }, + { ms: 90000000, expected: "1d 1h" }, + { ms: 172800000, expected: "2d" }, + { ms: 183600000, expected: "2d 3h" }, + { ms: 59999, expected: "1m" }, // Rounds to 1 minute exactly + { ms: 3599999, expected: "1h" }, // Rounds to 1 hour exactly + { ms: 86399999, expected: "1d" }, // Rounds to 1 day exactly + ])("formats $ms ms", ({ ms, expected }) => { + expect(formatAge(ms)).toBe(expected); }); }); describe("countRunning", () => { - it("should count running items", () => { - const items = [ - { running: true, name: "a" }, - { running: false, name: "b" }, - { running: true, name: "c" }, - { running: false, name: "d" }, - ]; - - expect(countRunning(items)).toBe(2); - }); - - it("should return 0 when no items running", () => { - const items = [ - { running: false, name: "a" }, - { running: false, name: "b" }, - ]; - - expect(countRunning(items)).toBe(0); - }); - - it("should count all when all running", () => { - const items = [ - { running: true, name: "a" }, - { running: true, name: "b" }, - { running: true, name: "c" }, - ]; - - expect(countRunning(items)).toBe(3); + it.each([ + { + items: [ + { running: true, name: "a" }, + { running: false, name: "b" }, + { running: true, name: "c" }, + { running: false, name: "d" }, + ], + expected: 2, + }, + { + items: [ + { running: false, name: "a" }, + { running: false, name: "b" }, + ], + expected: 0, + }, + { + items: [ + { running: true, name: "a" }, + { running: true, name: "b" }, + { running: true, name: "c" }, + ], + expected: 3, + }, + ])("counts running items", ({ items, expected }) => { + expect(countRunning(items)).toBe(expected); }); }); describe("countMismatches", () => { - it("should count image mismatches", () => { - const items = [ - { imageMatch: true, name: "a" }, - { imageMatch: false, name: "b" }, - { imageMatch: true, name: "c" }, - { imageMatch: false, name: "d" }, - { imageMatch: false, name: "e" }, - ]; - - expect(countMismatches(items)).toBe(3); - }); - - it("should return 0 when all match", () => { - const items = [ - { imageMatch: true, name: "a" }, - { imageMatch: true, name: "b" }, - ]; - - expect(countMismatches(items)).toBe(0); - }); - - it("should count all when none match", () => { - const items = [ - { imageMatch: false, name: "a" }, - { imageMatch: false, name: "b" }, - { imageMatch: false, name: "c" }, - ]; - - expect(countMismatches(items)).toBe(3); + it.each([ + { + items: [ + { imageMatch: true, name: "a" }, + { imageMatch: false, name: "b" }, + { imageMatch: true, name: "c" }, + { imageMatch: false, name: "d" }, + { imageMatch: false, name: "e" }, + ], + expected: 3, + }, + { + items: [ + { imageMatch: true, name: "a" }, + { imageMatch: true, name: "b" }, + ], + expected: 0, + }, + { + items: [ + { imageMatch: false, name: "a" }, + { imageMatch: false, name: "b" }, + { imageMatch: false, name: "c" }, + ], + expected: 3, + }, + ])("counts image mismatches", ({ items, expected }) => { + expect(countMismatches(items)).toBe(expected); }); });