From 12aafe8959351826038baf0c1e401fb44913c67c Mon Sep 17 00:00:00 2001 From: Dotta Date: Wed, 8 Jul 2026 07:17:53 +0000 Subject: [PATCH] Fix heartbeat suppression test cleanup race Co-Authored-By: Paperclip --- .../heartbeat-worktree-suppression.test.ts | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/server/src/__tests__/heartbeat-worktree-suppression.test.ts b/server/src/__tests__/heartbeat-worktree-suppression.test.ts index 71d9255eff..bb1e23c944 100644 --- a/server/src/__tests__/heartbeat-worktree-suppression.test.ts +++ b/server/src/__tests__/heartbeat-worktree-suppression.test.ts @@ -36,19 +36,36 @@ describeEmbeddedPostgres("heartbeat worktree suppression", () => { let db!: ReturnType; let tempDb: Awaited> | null = null; + function isHeartbeatRunEventFkError(error: unknown) { + const message = error instanceof Error ? `${error.message} ${String(error.cause ?? "")}` : String(error); + return message.includes("heartbeat_run_events_run_id_heartbeat_runs_id_fk"); + } + + async function deleteHeartbeatRunsWithEvents() { + for (let attempt = 0; attempt < 5; attempt += 1) { + await db.delete(heartbeatRunEvents); + try { + await db.delete(heartbeatRuns); + return; + } catch (error) { + if (!isHeartbeatRunEventFkError(error) || attempt === 4) throw error; + await new Promise((resolve) => setTimeout(resolve, 25)); + } + } + } + beforeAll(async () => { tempDb = await startEmbeddedPostgresTestDatabase("heartbeat-worktree-suppression-"); db = createDb(tempDb.connectionString); }, 20_000); afterEach(async () => { - await db.delete(heartbeatRunEvents); await db.delete(issueComments); await db.delete(issueDocuments); await db.delete(documentRevisions); await db.delete(documents); await db.delete(activityLog); - await db.delete(heartbeatRuns); + await deleteHeartbeatRunsWithEvents(); await db.delete(agentWakeupRequests); await db.delete(issues); await db.delete(agentRuntimeState);