@@ -23,25 +23,71 @@ describe('pg-pool', () => {
2323 vi . unstubAllEnvs ( ) ;
2424 } ) ;
2525
26- it ( 'createPgPoolConfig reflects an overridden DATABASE_URL' , async ( ) => {
27- vi . stubEnv ( 'DATABASE_URL' , 'postgresql://test:test@localhost:5432/test_db' ) ;
26+ it ( 'createPgPoolConfig returns sane default pool settings when env vars are unset' , async ( ) => {
27+ const { createPgPoolConfig } = await import ( '../src/lib/pg-pool.js' ) ;
28+ const config = createPgPoolConfig ( ) ;
29+
30+ expect ( config . max ) . toBe ( 10 ) ;
31+ expect ( config . idleTimeoutMillis ) . toBe ( 30_000 ) ;
32+ expect ( config . connectionTimeoutMillis ) . toBe ( 5_000 ) ;
33+ expect ( config . statement_timeout ) . toBe ( 30_000 ) ;
34+ } ) ;
35+
36+ it ( 'createPgPoolConfig reflects custom env variable overrides' , async ( ) => {
37+ vi . stubEnv ( 'PG_POOL_MAX' , '25' ) ;
38+ vi . stubEnv ( 'PG_IDLE_TIMEOUT_MS' , '60000' ) ;
39+ vi . stubEnv ( 'PG_CONNECTION_TIMEOUT_MS' , '10000' ) ;
40+ vi . stubEnv ( 'PG_STATEMENT_TIMEOUT_MS' , '15000' ) ;
2841
2942 const { createPgPoolConfig } = await import ( '../src/lib/pg-pool.js' ) ;
43+ const config = createPgPoolConfig ( ) ;
3044
31- expect ( createPgPoolConfig ( ) . connectionString ) . toBe (
32- 'postgresql://test:test@localhost:5432/test_db' ,
33- ) ;
45+ expect ( config . max ) . toBe ( 25 ) ;
46+ expect ( config . idleTimeoutMillis ) . toBe ( 60_000 ) ;
47+ expect ( config . connectionTimeoutMillis ) . toBe ( 10_000 ) ;
48+ expect ( config . statement_timeout ) . toBe ( 15_000 ) ;
49+ } ) ;
50+
51+ it ( 'createPgPoolConfig falls back to defaults when env variables are invalid or non-positive' , async ( ) => {
52+ vi . stubEnv ( 'PG_POOL_MAX' , 'invalid_number' ) ;
53+ vi . stubEnv ( 'PG_IDLE_TIMEOUT_MS' , '-5000' ) ;
54+ vi . stubEnv ( 'PG_CONNECTION_TIMEOUT_MS' , '0' ) ;
55+ vi . stubEnv ( 'PG_STATEMENT_TIMEOUT_MS' , 'abc' ) ;
56+
57+ const { createPgPoolConfig } = await import ( '../src/lib/pg-pool.js' ) ;
58+ const config = createPgPoolConfig ( ) ;
59+
60+ expect ( config . max ) . toBe ( 10 ) ;
61+ expect ( config . idleTimeoutMillis ) . toBe ( 30_000 ) ;
62+ expect ( config . connectionTimeoutMillis ) . toBe ( 5_000 ) ;
63+ expect ( config . statement_timeout ) . toBe ( 30_000 ) ;
3464 } ) ;
3565
36- it ( 'createPgPool constructs pg.Pool with the configured DATABASE_URL without opening a real connection ' , async ( ) => {
66+ it ( 'createPgPool constructs pg.Pool with default pool configuration settings ' , async ( ) => {
3767 vi . stubEnv ( 'DATABASE_URL' , 'postgresql://test:test@localhost:5432/test_db' ) ;
3868
3969 const { createPgPool } = await import ( '../src/lib/pg-pool.js' ) ;
4070 createPgPool ( ) ;
4171
72+ expect ( poolCtorSpy ) . toHaveBeenCalledWith ( {
73+ connectionString : 'postgresql://test:test@localhost:5432/test_db' ,
74+ max : 10 ,
75+ idleTimeoutMillis : 30_000 ,
76+ connectionTimeoutMillis : 5_000 ,
77+ statement_timeout : 30_000 ,
78+ } ) ;
79+ } ) ;
80+
81+ it ( 'createPgPool applies config overrides when provided' , async ( ) => {
82+ const { createPgPool } = await import ( '../src/lib/pg-pool.js' ) ;
83+ createPgPool ( { max : 5 , statement_timeout : 5000 } ) ;
84+
4285 expect ( poolCtorSpy ) . toHaveBeenCalledWith (
4386 expect . objectContaining ( {
44- connectionString : 'postgresql://test:test@localhost:5432/test_db' ,
87+ max : 5 ,
88+ statement_timeout : 5000 ,
89+ idleTimeoutMillis : 30_000 ,
90+ connectionTimeoutMillis : 5_000 ,
4591 } ) ,
4692 ) ;
4793 } ) ;
0 commit comments