From 29bc011ec7b9a6df0ceb8a49bf7f81bcbc0a0421 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 13 Mar 2026 21:12:18 +0000 Subject: [PATCH] test: share heartbeat retry fixtures --- src/infra/heartbeat-wake.test.ts | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/infra/heartbeat-wake.test.ts b/src/infra/heartbeat-wake.test.ts index 1f800c655ed..5a88210505c 100644 --- a/src/infra/heartbeat-wake.test.ts +++ b/src/infra/heartbeat-wake.test.ts @@ -8,6 +8,15 @@ import { } from "./heartbeat-wake.js"; describe("heartbeat-wake", () => { + function setRetryOnceHeartbeatHandler() { + const handler = vi + .fn() + .mockResolvedValueOnce({ status: "skipped", reason: "requests-in-flight" }) + .mockResolvedValueOnce({ status: "ran", durationMs: 1 }); + setHeartbeatWakeHandler(handler); + return handler; + } + async function expectRetryAfterDefaultDelay(params: { handler: ReturnType; initialReason: string; @@ -74,11 +83,7 @@ describe("heartbeat-wake", () => { it("keeps retry cooldown even when a sooner request arrives", async () => { vi.useFakeTimers(); - const handler = vi - .fn() - .mockResolvedValueOnce({ status: "skipped", reason: "requests-in-flight" }) - .mockResolvedValueOnce({ status: "ran", durationMs: 1 }); - setHeartbeatWakeHandler(handler); + const handler = setRetryOnceHeartbeatHandler(); requestHeartbeatNow({ reason: "interval", coalesceMs: 0 }); await vi.advanceTimersByTimeAsync(1); @@ -252,11 +257,7 @@ describe("heartbeat-wake", () => { it("forwards wake target fields and preserves them across retries", async () => { vi.useFakeTimers(); - const handler = vi - .fn() - .mockResolvedValueOnce({ status: "skipped", reason: "requests-in-flight" }) - .mockResolvedValueOnce({ status: "ran", durationMs: 1 }); - setHeartbeatWakeHandler(handler); + const handler = setRetryOnceHeartbeatHandler(); requestHeartbeatNow({ reason: "cron:job-1",