diff --git a/packages/better-auth/src/__snapshots__/init.test.ts.snap b/packages/better-auth/src/__snapshots__/init.test.ts.snap index 0321cd62a3..af24f86514 100644 --- a/packages/better-auth/src/__snapshots__/init.test.ts.snap +++ b/packages/better-auth/src/__snapshots__/init.test.ts.snap @@ -20,7 +20,7 @@ exports[`init > should match config 1`] = ` "supportsDates": false, "supportsJSON": false, "supportsNumericIds": true, - "transaction": [Function], + "transaction": false, "usePlural": undefined, }, "debugLogs": false, diff --git a/packages/better-auth/src/adapters/test.ts b/packages/better-auth/src/adapters/test.ts index c7b500a578..d013b3dcc5 100644 --- a/packages/better-auth/src/adapters/test.ts +++ b/packages/better-auth/src/adapters/test.ts @@ -874,12 +874,26 @@ async function adapterTest( test.skipIf(disabledTests?.SHOULD_ROLLBACK_FAILING_TRANSACTION)( `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.SHOULD_ROLLBACK_FAILING_TRANSACTION}`, - async ({ onTestFailed }) => { + async ({ onTestFailed, skip }) => { await resetDebugLogs(); onTestFailed(async () => { await printDebugLogs(); }); const customAdapter = await adapter(); + + // Check if adapter actually supports transactions + const enableTransaction = + customAdapter?.options?.adapterConfig.transaction; + if (!enableTransaction) { + skip( + `Skipping test: ${ + customAdapter?.options?.adapterConfig.adapterName || "Adapter" + } + does not support transactions`, + ); + return; + } + const user5 = { name: "user5", email: getUniqueEmail("user5@email.com"), @@ -924,12 +938,25 @@ async function adapterTest( test.skipIf(disabledTests?.SHOULD_RETURN_TRANSACTION_RESULT)( `${testPrefix ? `${testPrefix} - ` : ""}${adapterTests.SHOULD_RETURN_TRANSACTION_RESULT}`, - async ({ onTestFailed }) => { + async ({ onTestFailed, skip }) => { await resetDebugLogs(); onTestFailed(async () => { await printDebugLogs(); }); const customAdapter = await adapter(); + + const enableTransaction = + customAdapter?.options?.adapterConfig.transaction; + if (!enableTransaction) { + skip( + `Skipping test: ${ + customAdapter?.options?.adapterConfig.adapterName || "Adapter" + } + does not support transactions`, + ); + return; + } + const result = await customAdapter.transaction(async (tx) => { const createdUser = await tx.create({ model: "user", diff --git a/packages/better-auth/src/api/routes/sign-up.test.ts b/packages/better-auth/src/api/routes/sign-up.test.ts index d6291f5778..017bf08933 100644 --- a/packages/better-auth/src/api/routes/sign-up.test.ts +++ b/packages/better-auth/src/api/routes/sign-up.test.ts @@ -77,8 +77,11 @@ describe("sign-up with custom fields", async (it) => { }); }); - it("should rollback when session creation fails", async () => { + it("should rollback when session creation fails", async ({ skip }) => { const ctx = await auth.$context; + if (!ctx.adapter.options?.adapterConfig.transaction) { + skip(); + } const originalCreateSession = ctx.internalAdapter.createSession; ctx.internalAdapter.createSession = vi .fn() diff --git a/packages/better-auth/src/plugins/organization/organization-hook.test.ts b/packages/better-auth/src/plugins/organization/organization-hook.test.ts index d4617f4107..279fc70772 100644 --- a/packages/better-auth/src/plugins/organization/organization-hook.test.ts +++ b/packages/better-auth/src/plugins/organization/organization-hook.test.ts @@ -92,7 +92,9 @@ describe("organization creation in database hooks", async () => { }); }); - it("should handle errors gracefully when organization creation fails in hook", async () => { + it("should handle errors gracefully when organization creation fails in hook", async ({ + skip, + }) => { let firstUserCreated = false; let errorOnSecondUser: any = null; @@ -123,6 +125,12 @@ describe("organization creation in database hooks", async () => { }, }); + if (!db.options?.adapterConfig.transaction) { + skip( + "Skipping since transactions are enabled and will rollback automatically", + ); + } + // First user should succeed const result1 = await client.signUp.email({ email: "user1-hook@example.com",