From 74f0d05ca60e98779a724b1258755f5ba481b7a6 Mon Sep 17 00:00:00 2001 From: Christopher Kelbley Date: Sat, 26 Sep 2026 14:01:43 -0700 Subject: [PATCH] fix: propagate SQL migration failures --- .../backends/backend/src/sql-backend.test.ts | 35 +++++++++++++++++++ packages/backends/backend/src/sql-backend.ts | 2 ++ 2 files changed, 37 insertions(+) create mode 100644 packages/backends/backend/src/sql-backend.test.ts diff --git a/packages/backends/backend/src/sql-backend.test.ts b/packages/backends/backend/src/sql-backend.test.ts new file mode 100644 index 0000000..629f482 --- /dev/null +++ b/packages/backends/backend/src/sql-backend.test.ts @@ -0,0 +1,35 @@ +import type { Knex } from "knex"; +import { describe, expect, it, vi } from "vitest"; +import { SQLBackend } from "./sql-backend"; + +class TestSQLBackend extends SQLBackend { + truncDate(): string { + return ""; + } +} + +describe("SQLBackend migrations", () => { + it("propagates migration failures", async () => { + const migrationError = new Error("migration failed"); + const knex = { + migrate: { + latest: vi.fn().mockRejectedValue(migrationError), + }, + } as unknown as Knex; + const backend = new TestSQLBackend(knex); + + await expect(backend.migrate()).rejects.toBe(migrationError); + }); + + it("propagates rollback failures", async () => { + const rollbackError = new Error("rollback failed"); + const knex = { + migrate: { + rollback: vi.fn().mockRejectedValue(rollbackError), + }, + } as unknown as Knex; + const backend = new TestSQLBackend(knex); + + await expect(backend.rollbackMigration()).rejects.toBe(rollbackError); + }); +}); diff --git a/packages/backends/backend/src/sql-backend.ts b/packages/backends/backend/src/sql-backend.ts index f486060..a4eae75 100644 --- a/packages/backends/backend/src/sql-backend.ts +++ b/packages/backends/backend/src/sql-backend.ts @@ -45,6 +45,7 @@ export abstract class SQLBackend implements Backend { } } catch (err) { logger("Backend").error("Migration failed:", err); + throw err; } } @@ -60,6 +61,7 @@ export abstract class SQLBackend implements Backend { } } catch (err) { logger("Backend").error("Rollback failed:", err); + throw err; } }