mcpuniverse / tests /app /api /conftest.py
haochengsama's picture
Add files using upload-large-folder tool
222d3d2 verified
Raw
History Blame Contribute Delete
1.93 kB
import asyncio
from contextlib import ExitStack
import pytest
import pytest_asyncio
from fastapi.testclient import TestClient
from pytest_postgresql import factories
from pytest_postgresql.janitor import DatabaseJanitor
from mcpuniverse.app.server import init_app
from mcpuniverse.app.db.database import get_connection, sessionmanager
from mcpuniverse.app.db.sqlc.models_sqlalchemy import *
@pytest.fixture(autouse=True)
def app():
with ExitStack():
yield init_app(is_test=True)
@pytest.fixture
def client(app):
with TestClient(app) as c:
yield c
test_db = factories.postgresql_proc(port=None, dbname="test_db")
@pytest.fixture(scope="session")
def event_loop(request):
loop = asyncio.get_event_loop_policy().new_event_loop()
yield loop
loop.close()
@pytest_asyncio.fixture(scope="session", autouse=True)
async def connection_test(test_db, event_loop):
pg_host = test_db.host
pg_port = test_db.port
pg_user = test_db.user
pg_db = test_db.dbname
pg_password = test_db.password
with DatabaseJanitor(
user=pg_user, host=pg_host, port=pg_port, version=test_db.version, dbname=pg_db, password=pg_password
):
connection_str = f"postgresql+psycopg://{pg_user}:@{pg_host}:{pg_port}/{pg_db}"
sessionmanager.init(connection_str)
yield
await sessionmanager.close()
@pytest_asyncio.fixture(scope="function", autouse=True)
async def create_tables(connection_test):
async with sessionmanager.connect() as connection:
await sessionmanager.drop_all(connection)
await sessionmanager.create_all(connection)
@pytest_asyncio.fixture(scope="function", autouse=True)
async def connection_override(app, connection_test):
async def get_connection_override():
async with sessionmanager.connect() as conn:
yield conn
app.dependency_overrides[get_connection] = get_connection_override