@@ -19,6 +19,7 @@ import { describe, it, expect, beforeEach, vi } from 'vitest';
1919const mockPoolQuery = vi . fn ( ) ;
2020const mockPoolEnd = vi . fn ( ) ;
2121const mockPoolCtor = vi . fn ( ) ;
22+ const mockPoolOn = vi . fn ( ) ;
2223const mockPoolConnect = vi . fn ( ) ;
2324const mockClientQuery = vi . fn ( ) ;
2425const mockClientRelease = vi . fn ( ) ;
@@ -30,6 +31,7 @@ vi.mock('pg', () => {
3031 }
3132 query = mockPoolQuery ;
3233 end = mockPoolEnd ;
34+ on = mockPoolOn ;
3335 connect = mockPoolConnect ;
3436 }
3537 return { Pool } ;
@@ -125,6 +127,28 @@ describe('PostgreSQL - helper', async () => {
125127 } ) ;
126128 } ) ;
127129
130+ describe ( 'pool error handling' , ( ) => {
131+ it ( 'registers an idle-client error listener that logs without crashing' , async ( ) => {
132+ getDatabaseMock . mockReturnValue ( {
133+ type : 'postgres' ,
134+ enabled : true ,
135+ connectionString : 'postgresql://localhost/x' ,
136+ } ) ;
137+ const errorSpy = vi . spyOn ( console , 'error' ) . mockImplementation ( ( ) => undefined ) ;
138+
139+ await connect ( ) ;
140+
141+ const errorRegistration = mockPoolOn . mock . calls . find ( ( call ) => call [ 0 ] === 'error' ) ;
142+ expect ( errorRegistration ) . toBeDefined ( ) ;
143+
144+ const handler = errorRegistration ! [ 1 ] as ( err : Error ) => void ;
145+ expect ( ( ) => handler ( new Error ( 'connection terminated unexpectedly' ) ) ) . not . toThrow ( ) ;
146+ expect ( errorSpy ) . toHaveBeenCalled ( ) ;
147+
148+ errorSpy . mockRestore ( ) ;
149+ } ) ;
150+ } ) ;
151+
128152 describe ( 'getSessionStore' , ( ) => {
129153 it ( 'throws when connection string is missing — no MemoryStore fallback' , ( ) => {
130154 getDatabaseMock . mockReturnValue ( {
0 commit comments