test: table-drive sandbox formatter assertions

This commit is contained in:
Peter Steinberger
2026-02-18 23:19:33 +00:00
parent c8e02329cd
commit 1a030a544b

View File

@@ -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);
});
});