fix: release() absichern, DATABASE_URL Startup-Check, execute-Test hinzugefügt
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
import { Pool, type QueryResultRow } from 'pg'
|
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 })
|
export const pool = new Pool({ connectionString: process.env.DATABASE_URL })
|
||||||
|
|
||||||
pool.on('error', (err) => {
|
pool.on('error', (err) => {
|
||||||
|
|||||||
@@ -53,13 +53,15 @@ describe('withTenant', () => {
|
|||||||
).rejects.toThrow('Ungültige tenantId')
|
).rejects.toThrow('Ungültige tenantId')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('gibt dieselbe Client-Instanz an fn weiter (Connection-Isolation)', async () => {
|
it('released PoolClient nach Ausführung', async () => {
|
||||||
let capturedClient: unknown
|
await withTenant('tenant1', async () => {})
|
||||||
await withTenant('tenant1', async (client) => {
|
|
||||||
capturedClient = client
|
|
||||||
})
|
|
||||||
// Client muss nach withTenant released worden sein
|
|
||||||
expect(mockClient.release).toHaveBeenCalledOnce()
|
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')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -29,6 +29,10 @@ export async function withTenant<T>(
|
|||||||
} catch (resetErr) {
|
} catch (resetErr) {
|
||||||
console.error({ msg: 'search_path reset failed', error: (resetErr as Error).message })
|
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 })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user