from database.manager import DatabaseManager def test_database_manager_reuses_engine_for_same_sqlite_path(tmp_path): DatabaseManager._instance_cache.clear() db_url = f"sqlite:///{tmp_path / 'cache.db'}" first = DatabaseManager(db_url) second = DatabaseManager(db_url) try: assert second.engine is first.engine assert second.Session is first.Session finally: DatabaseManager._instance_cache.clear() first.engine.dispose() def test_database_manager_uses_bounded_postgres_pool(monkeypatch): import config import database.manager as manager captured = {} class FakeEngine: def dispose(self): pass class FakeSession: pass def fake_create_engine(url, **kwargs): captured["url"] = url captured["kwargs"] = kwargs return FakeEngine() def fake_sessionmaker(bind): captured["session_bind"] = bind return FakeSession DatabaseManager._instance_cache.clear() monkeypatch.setattr(config, "DATABASE_TYPE", "postgresql") monkeypatch.setattr(config, "DATABASE_PATH", "postgresql://example/db") monkeypatch.setattr(manager, "create_engine", fake_create_engine) monkeypatch.setattr(manager, "sessionmaker", fake_sessionmaker) monkeypatch.setattr(manager, "ensure_metadata_initialized", lambda *args, **kwargs: None) monkeypatch.setattr(DatabaseManager, "_init_autoheal_tables", lambda self: None) db = DatabaseManager() assert captured["url"] == "postgresql://example/db" assert captured["kwargs"]["pool_pre_ping"] is True assert captured["kwargs"]["pool_size"] == 2 assert captured["kwargs"]["max_overflow"] == 3 assert captured["kwargs"]["pool_recycle"] == 1800 assert captured["kwargs"]["pool_timeout"] == 30 assert captured["kwargs"]["connect_args"]["connect_timeout"] == 10 assert "statement_timeout=60000" in captured["kwargs"]["connect_args"]["options"] assert db.engine is captured["session_bind"] DatabaseManager._instance_cache.clear()