From fdb0b49354f8e1fefc46e0f5bfca2e745dfb7969 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 11 May 2026 22:09:31 +0100 Subject: [PATCH] test: guard cron heartbeat requests --- ...n-job-passes-heartbeat-target-last.test.ts | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/cron/service.main-job-passes-heartbeat-target-last.test.ts b/src/cron/service.main-job-passes-heartbeat-target-last.test.ts index e4b65690e9a..bc020cbdee9 100644 --- a/src/cron/service.main-job-passes-heartbeat-target-last.test.ts +++ b/src/cron/service.main-job-passes-heartbeat-target-last.test.ts @@ -57,6 +57,19 @@ describe("cron main job passes heartbeat target=last", () => { return { ...callArgs, heartbeat }; } + function requireRequestHeartbeatCall(requestHeartbeat: ReturnType) { + const callArgs = requestHeartbeat.mock.calls[0]?.[0]; + if (!callArgs) { + throw new Error("expected requestHeartbeat call"); + } + return callArgs as { + source?: string; + intent?: string; + reason?: string; + heartbeat?: unknown; + }; + } + async function runSingleTick(cron: CronService) { const startPromise = cron.start(); await vi.advanceTimersByTimeAsync(2_000); @@ -123,11 +136,11 @@ describe("cron main job passes heartbeat target=last", () => { await runSingleTick(cron); expect(runHeartbeatOnce).toHaveBeenCalled(); - const heartbeatRequest = requestHeartbeat.mock.calls[0]?.[0]; - expect(heartbeatRequest?.source).toBe("cron"); - expect(heartbeatRequest?.intent).toBe("immediate"); - expect(heartbeatRequest?.reason).toBe("cron:test-main-delivery-busy"); - expect(heartbeatRequest?.heartbeat).toEqual({ target: "last" }); + const heartbeatRequest = requireRequestHeartbeatCall(requestHeartbeat); + expect(heartbeatRequest.source).toBe("cron"); + expect(heartbeatRequest.intent).toBe("immediate"); + expect(heartbeatRequest.reason).toBe("cron:test-main-delivery-busy"); + expect(heartbeatRequest.heartbeat).toEqual({ target: "last" }); }); it("should preserve heartbeat.target=last for wakeMode=next-heartbeat main jobs", async () => { @@ -155,11 +168,11 @@ describe("cron main job passes heartbeat target=last", () => { await runSingleTick(cron); expect(requestHeartbeat).toHaveBeenCalled(); - const heartbeatRequest = requestHeartbeat.mock.calls[0]?.[0]; - expect(heartbeatRequest?.source).toBe("cron"); - expect(heartbeatRequest?.intent).toBe("event"); - expect(heartbeatRequest?.reason).toBe("cron:test-next-heartbeat"); - expect(heartbeatRequest?.heartbeat).toEqual({ target: "last" }); + const heartbeatRequest = requireRequestHeartbeatCall(requestHeartbeat); + expect(heartbeatRequest.source).toBe("cron"); + expect(heartbeatRequest.intent).toBe("event"); + expect(heartbeatRequest.reason).toBe("cron:test-next-heartbeat"); + expect(heartbeatRequest.heartbeat).toEqual({ target: "last" }); expect(runHeartbeatOnce).not.toHaveBeenCalled(); }); });