diff --git a/tests/test_integration_db_maintenance.py b/tests/test_integration_db_maintenance.py index cff8cf3..7cba7b1 100644 --- a/tests/test_integration_db_maintenance.py +++ b/tests/test_integration_db_maintenance.py @@ -7,7 +7,9 @@ connection path that unit mocks cannot: the un-awaited AttributeError, reporting 0/6) passes the unit suite but fails here. """ import pytest +import pytest_asyncio +from scribe.models import engine from scribe.services.db_maintenance import ( MAINTENANCE_TABLES, get_table_health, @@ -17,6 +19,19 @@ from scribe.services.db_maintenance import ( pytestmark = pytest.mark.integration +@pytest_asyncio.fixture(autouse=True) +async def _dispose_engine(): + """Dispose the app's module-level engine after each test. + + The engine pools asyncpg connections per event loop, but pytest-asyncio runs + each test on a fresh loop — so without this, test 2 gets handed test 1's + connection bound to a now-dead loop ("Future attached to a different loop"). + Disposing in the test's own loop teardown clears the pool cleanly. + """ + yield + await engine.dispose() + + @pytest.mark.asyncio async def test_run_maintenance_vacuums_real_tables(): summary = await run_maintenance()