diff --git a/src/infra/heartbeat-reason.test.ts b/src/infra/heartbeat-reason.test.ts index 69d23e3219d..ab0fe94ec06 100644 --- a/src/infra/heartbeat-reason.test.ts +++ b/src/infra/heartbeat-reason.test.ts @@ -7,48 +7,54 @@ import { } from "./heartbeat-reason.js"; describe("heartbeat-reason", () => { - it("normalizes wake reasons with trim + requested fallback", () => { - expect(normalizeHeartbeatWakeReason(" cron:job-1 ")).toBe("cron:job-1"); - expect(normalizeHeartbeatWakeReason(" ")).toBe("requested"); - expect(normalizeHeartbeatWakeReason(undefined)).toBe("requested"); + it.each([ + { value: " cron:job-1 ", expected: "cron:job-1" }, + { value: " ", expected: "requested" }, + { value: undefined, expected: "requested" }, + ])("normalizes wake reasons for %j", ({ value, expected }) => { + expect(normalizeHeartbeatWakeReason(value)).toBe(expected); }); - it("classifies known reason kinds", () => { - expect(resolveHeartbeatReasonKind("retry")).toBe("retry"); - expect(resolveHeartbeatReasonKind("interval")).toBe("interval"); - expect(resolveHeartbeatReasonKind("manual")).toBe("manual"); - expect(resolveHeartbeatReasonKind("exec-event")).toBe("exec-event"); - expect(resolveHeartbeatReasonKind("wake")).toBe("wake"); - expect(resolveHeartbeatReasonKind("acp:spawn:stream")).toBe("wake"); - expect(resolveHeartbeatReasonKind("cron:job-1")).toBe("cron"); - expect(resolveHeartbeatReasonKind("hook:wake")).toBe("hook"); - expect(resolveHeartbeatReasonKind(" hook:wake ")).toBe("hook"); + it.each([ + { value: "retry", expected: "retry" }, + { value: "interval", expected: "interval" }, + { value: "manual", expected: "manual" }, + { value: "exec-event", expected: "exec-event" }, + { value: "wake", expected: "wake" }, + { value: "acp:spawn:stream", expected: "wake" }, + { value: "acp:spawn:", expected: "wake" }, + { value: "cron:job-1", expected: "cron" }, + { value: "hook:wake", expected: "hook" }, + { value: " hook:wake ", expected: "hook" }, + { value: "requested", expected: "other" }, + { value: "slow", expected: "other" }, + { value: "", expected: "other" }, + { value: undefined, expected: "other" }, + ])("classifies reason kinds for %j", ({ value, expected }) => { + expect(resolveHeartbeatReasonKind(value)).toBe(expected); }); - it("classifies unknown reasons as other", () => { - expect(resolveHeartbeatReasonKind("requested")).toBe("other"); - expect(resolveHeartbeatReasonKind("slow")).toBe("other"); - expect(resolveHeartbeatReasonKind("")).toBe("other"); - expect(resolveHeartbeatReasonKind(undefined)).toBe("other"); + it.each([ + { value: "exec-event", expected: true }, + { value: "cron:job-1", expected: true }, + { value: "wake", expected: true }, + { value: "acp:spawn:stream", expected: true }, + { value: "hook:gmail:sync", expected: true }, + { value: "interval", expected: false }, + { value: "manual", expected: false }, + { value: "other", expected: false }, + ])("matches event-driven behavior for %j", ({ value, expected }) => { + expect(isHeartbeatEventDrivenReason(value)).toBe(expected); }); - it("matches event-driven behavior used by heartbeat preflight", () => { - expect(isHeartbeatEventDrivenReason("exec-event")).toBe(true); - expect(isHeartbeatEventDrivenReason("cron:job-1")).toBe(true); - expect(isHeartbeatEventDrivenReason("wake")).toBe(true); - expect(isHeartbeatEventDrivenReason("acp:spawn:stream")).toBe(true); - expect(isHeartbeatEventDrivenReason("hook:gmail:sync")).toBe(true); - expect(isHeartbeatEventDrivenReason("interval")).toBe(false); - expect(isHeartbeatEventDrivenReason("manual")).toBe(false); - expect(isHeartbeatEventDrivenReason("other")).toBe(false); - }); - - it("matches action-priority wake behavior", () => { - expect(isHeartbeatActionWakeReason("manual")).toBe(true); - expect(isHeartbeatActionWakeReason("exec-event")).toBe(true); - expect(isHeartbeatActionWakeReason("hook:wake")).toBe(true); - expect(isHeartbeatActionWakeReason("interval")).toBe(false); - expect(isHeartbeatActionWakeReason("cron:job-1")).toBe(false); - expect(isHeartbeatActionWakeReason("retry")).toBe(false); + it.each([ + { value: "manual", expected: true }, + { value: "exec-event", expected: true }, + { value: "hook:wake", expected: true }, + { value: "interval", expected: false }, + { value: "cron:job-1", expected: false }, + { value: "retry", expected: false }, + ])("matches action-priority wake behavior for %j", ({ value, expected }) => { + expect(isHeartbeatActionWakeReason(value)).toBe(expected); }); });