test: guard cron heartbeat requests

This commit is contained in:
Peter Steinberger
2026-05-11 22:09:31 +01:00
parent 8dd301c0af
commit fdb0b49354

View File

@@ -57,6 +57,19 @@ describe("cron main job passes heartbeat target=last", () => {
return { ...callArgs, heartbeat };
}
function requireRequestHeartbeatCall(requestHeartbeat: ReturnType<typeof vi.fn>) {
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();
});
});