from types import SimpleNamespace from app.core.database import build_engine_options def test_sqlite_engine_options_keep_thread_check_disabled() -> None: settings = SimpleNamespace(database_url="sqlite:///test.db") options = build_engine_options(settings) assert options == { "pool_pre_ping": True, "connect_args": {"check_same_thread": False}, } def test_postgres_engine_options_use_small_pool_defaults() -> None: settings = SimpleNamespace( database_url="postgresql+psycopg://user:pass@example.com/db", database_pool_size=2, database_max_overflow=3, database_pool_timeout_seconds=10, database_pool_recycle_seconds=1800, ) options = build_engine_options(settings) assert options["pool_pre_ping"] is True assert options["connect_args"] == {} assert options["pool_size"] == 2 assert options["max_overflow"] == 3 assert options["pool_timeout"] == 10 assert options["pool_recycle"] == 1800 def test_postgres_engine_options_clamp_unsafe_values() -> None: settings = SimpleNamespace( database_url="postgresql+psycopg://user:pass@example.com/db", database_pool_size=0, database_max_overflow=-2, database_pool_timeout_seconds=0, database_pool_recycle_seconds=1, ) options = build_engine_options(settings) assert options["pool_size"] == 1 assert options["max_overflow"] == 0 assert options["pool_timeout"] == 1 assert options["pool_recycle"] == 60