@@ -40,6 +40,10 @@ def _seed_minimal_env(
4040 monkeypatch : pytest .MonkeyPatch ,
4141 * ,
4242 database_url : str = "postgresql+asyncpg://user:pass@db.example.com:5432/auth_service" ,
43+ database_pool_size : str = "20" ,
44+ database_max_overflow : str = "20" ,
45+ database_pool_timeout_seconds : str = "30" ,
46+ database_pool_recycle_seconds : str = "1800" ,
4347 redis_url : str = "redis://redis.example.com:6379/0" ,
4448 access_ttl_seconds : str = "900" ,
4549 refresh_ttl_seconds : str = "604800" ,
@@ -48,6 +52,10 @@ def _seed_minimal_env(
4852 monkeypatch .setenv ("APP__ENVIRONMENT" , "development" )
4953 monkeypatch .setenv ("APP__SERVICE" , "auth-service" )
5054 monkeypatch .setenv ("DATABASE__URL" , database_url )
55+ monkeypatch .setenv ("DATABASE__POOL_SIZE" , database_pool_size )
56+ monkeypatch .setenv ("DATABASE__MAX_OVERFLOW" , database_max_overflow )
57+ monkeypatch .setenv ("DATABASE__POOL_TIMEOUT_SECONDS" , database_pool_timeout_seconds )
58+ monkeypatch .setenv ("DATABASE__POOL_RECYCLE_SECONDS" , database_pool_recycle_seconds )
5159 monkeypatch .setenv ("REDIS__URL" , redis_url )
5260 monkeypatch .setenv ("JWT__ALGORITHM" , "RS256" )
5361 monkeypatch .setenv ("JWT__PRIVATE_KEY_PEM" , "private-key" )
@@ -198,6 +206,40 @@ def _create_async_engine(url: str, **kwargs: object) -> _AsyncEngineStub:
198206 ]
199207
200208
209+ def test_get_engine_applies_configured_pool_tuning (monkeypatch : pytest .MonkeyPatch ) -> None :
210+ """Engine factory should pass validated pool tuning to SQLAlchemy."""
211+ _seed_minimal_env (
212+ monkeypatch ,
213+ database_pool_size = "32" ,
214+ database_max_overflow = "48" ,
215+ database_pool_timeout_seconds = "45" ,
216+ database_pool_recycle_seconds = "2700" ,
217+ )
218+ _clear_reloadable_getters ()
219+ captured : dict [str , object ] = {}
220+
221+ def _create_async_engine (url : str , ** kwargs : object ) -> _AsyncEngineStub :
222+ captured ["url" ] = url
223+ captured ["kwargs" ] = dict (kwargs )
224+ return _AsyncEngineStub (url )
225+
226+ monkeypatch .setattr (db_session_module , "create_async_engine" , _create_async_engine )
227+
228+ engine = db_session_module .get_engine ()
229+
230+ assert engine is not None
231+ assert captured == {
232+ "url" : "postgresql+asyncpg://user:pass@db.example.com:5432/auth_service" ,
233+ "kwargs" : {
234+ "pool_pre_ping" : True ,
235+ "pool_size" : 32 ,
236+ "max_overflow" : 48 ,
237+ "pool_timeout" : 45 ,
238+ "pool_recycle" : 2700 ,
239+ },
240+ }
241+
242+
201243@pytest .mark .asyncio
202244async def test_get_session_service_refreshes_nested_dependencies_when_settings_change (
203245 monkeypatch : pytest .MonkeyPatch ,
0 commit comments