From 4f739f7b1e644d84fc813dfed996308693cf4e4c Mon Sep 17 00:00:00 2001 From: Joachim Hummel Date: Fri, 17 Apr 2026 08:33:07 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20release()=20absichern,=20DATABASE=5FURL?= =?UTF-8?q?=20Startup-Check,=20execute-Test=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/db/client.ts | 4 ++++ src/server/db/tenant.test.ts | 16 +++++++++------- src/server/db/tenant.ts | 6 +++++- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/server/db/client.ts b/src/server/db/client.ts index 1c37814..3564ea3 100644 --- a/src/server/db/client.ts +++ b/src/server/db/client.ts @@ -1,5 +1,9 @@ import { Pool, type QueryResultRow } from 'pg' +if (!process.env.DATABASE_URL) { + throw new Error('DATABASE_URL muss gesetzt sein') +} + export const pool = new Pool({ connectionString: process.env.DATABASE_URL }) pool.on('error', (err) => { diff --git a/src/server/db/tenant.test.ts b/src/server/db/tenant.test.ts index 73446a7..eb00a67 100644 --- a/src/server/db/tenant.test.ts +++ b/src/server/db/tenant.test.ts @@ -53,13 +53,15 @@ describe('withTenant', () => { ).rejects.toThrow('Ungültige tenantId') }) - it('gibt dieselbe Client-Instanz an fn weiter (Connection-Isolation)', async () => { - let capturedClient: unknown - await withTenant('tenant1', async (client) => { - capturedClient = client - }) - // Client muss nach withTenant released worden sein + it('released PoolClient nach Ausführung', async () => { + await withTenant('tenant1', async () => {}) expect(mockClient.release).toHaveBeenCalledOnce() - expect(capturedClient).toBeDefined() + }) + + it('execute delegiert an den dedizierten PoolClient', async () => { + await withTenant('abc123', async (client) => { + await client.execute('DELETE FROM sessions WHERE expired = true') + }) + expect(mockClient.query).toHaveBeenCalledWith('DELETE FROM sessions WHERE expired = true') }) }) diff --git a/src/server/db/tenant.ts b/src/server/db/tenant.ts index d6a8f0e..a338642 100644 --- a/src/server/db/tenant.ts +++ b/src/server/db/tenant.ts @@ -29,6 +29,10 @@ export async function withTenant( } catch (resetErr) { console.error({ msg: 'search_path reset failed', error: (resetErr as Error).message }) } - client.release() + try { + client.release() + } catch (releaseErr) { + console.error({ msg: 'Pool client release failed', error: (releaseErr as Error).message }) + } } }