fix(ci): use module-level engines to avoid event loop teardown crash
Per-test engine creation/disposal triggers asyncpg event loop errors during pytest-asyncio teardown. Module-level engines are created once and reused across all tests. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -92,30 +92,27 @@ def setup_database():
|
|||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@pytest_asyncio.fixture
|
# Module-level engines — created once, reused across all tests.
|
||||||
async def admin_engine():
|
# Avoids per-test engine creation/disposal which triggers asyncpg
|
||||||
"""Admin engine (superuser) -- bypasses RLS."""
|
# event loop issues during pytest-asyncio teardown.
|
||||||
engine = create_async_engine(
|
_admin_engine = create_async_engine(
|
||||||
TEST_DATABASE_URL, echo=False, pool_pre_ping=True, pool_size=5, max_overflow=5
|
TEST_DATABASE_URL, echo=False, pool_pre_ping=True, pool_size=5, max_overflow=5
|
||||||
)
|
)
|
||||||
yield engine
|
_app_engine = create_async_engine(
|
||||||
try:
|
|
||||||
await engine.dispose()
|
|
||||||
except RuntimeError:
|
|
||||||
pass # Event loop may be closed during final teardown
|
|
||||||
|
|
||||||
|
|
||||||
@pytest_asyncio.fixture
|
|
||||||
async def app_engine():
|
|
||||||
"""App-user engine -- RLS enforced."""
|
|
||||||
engine = create_async_engine(
|
|
||||||
TEST_APP_USER_DATABASE_URL, echo=False, pool_pre_ping=True, pool_size=5, max_overflow=5
|
TEST_APP_USER_DATABASE_URL, echo=False, pool_pre_ping=True, pool_size=5, max_overflow=5
|
||||||
)
|
)
|
||||||
yield engine
|
|
||||||
try:
|
|
||||||
await engine.dispose()
|
@pytest.fixture
|
||||||
except RuntimeError:
|
def admin_engine():
|
||||||
pass # Event loop may be closed during final teardown
|
"""Admin engine (superuser) -- bypasses RLS."""
|
||||||
|
return _admin_engine
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def app_engine():
|
||||||
|
"""App-user engine -- RLS enforced."""
|
||||||
|
return _app_engine
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user