From 8b782b76af878219cb92d3df19fea6b1f175d7de Mon Sep 17 00:00:00 2001 From: Dotta Date: Tue, 3 Nov 2026 12:08:38 -0600 Subject: [PATCH] test(server): assert batch insertion rollback through driver errors Co-Authored-By: Paperclip --- server/src/__tests__/heartbeat-run-event-batch.test.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/server/src/__tests__/heartbeat-run-event-batch.test.ts b/server/src/__tests__/heartbeat-run-event-batch.test.ts index 1c2c524ca9a..5c28acbfc3a 100644 --- a/server/src/__tests__/heartbeat-run-event-batch.test.ts +++ b/server/src/__tests__/heartbeat-run-event-batch.test.ts @@ -149,14 +149,16 @@ describe("bounded native text batch persistence", () => { it("rolls back the whole reservation when an insertion fails", async () => { const runId = await makeRun(); await db.execute(sql`create function reject_native_batch_fixture() returns trigger language plpgsql as $$ - begin if new.source_event_id = 'reject-batch-fixture' then raise exception 'batch insert rejected'; end if; return new; end $$`); + begin if new.source_event_id = 'reject-batch-fixture' then raise exception 'batch insert rejected'; end if; return new; end; $$`); await db.execute(sql`create trigger reject_native_batch_fixture before insert on heartbeat_run_events for each row execute function reject_native_batch_fixture()`); try { const bad = event(runId, 2); bad.nativeSource!.sourceEventId = "reject-batch-fixture"; bad.nativeSource!.canonicalPayload.sourceEventId = "reject-batch-fixture"; - await expect(appendHeartbeatRunEvents(db, [event(runId, 1), bad])).rejects.toThrow("batch insert rejected"); + await expect(appendHeartbeatRunEvents(db, [event(runId, 1), bad])).rejects.toMatchObject({ + cause: { message: "batch insert rejected" }, + }); expect(await read(runId)).toMatchObject({ run: { nextEventSeq: 1, eventCursorProjectionSeq: 0 }, events: [], cursors: [] }); } finally { await db.execute(sql`drop trigger reject_native_batch_fixture on heartbeat_run_events`);