Advertisement
mrmamongo

conftest.py

Jun 8th, 2023
831
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.85 KB | None | 0 0
  1. import asyncio
  2. from contextlib import ExitStack
  3.  
  4. import pytest
  5. import pytest_asyncio
  6. from fastapi.testclient import TestClient
  7. from pytest_postgresql import factories
  8. from pytest_postgresql.janitor import DatabaseJanitor
  9.  
  10. from src.app import get_app
  11. from src.db.session import get_session, sessionmanager
  12.  
  13.  
  14. @pytest_asyncio.fixture(autouse=True)
  15. def app():
  16.     with ExitStack():
  17.         yield get_app(init_db=False)
  18.  
  19.  
  20. @pytest_asyncio.fixture
  21. def mock_client(app):
  22.     with TestClient(app) as c:
  23.         yield c
  24.  
  25.  
  26. test_db = factories.postgresql_proc(port=None, dbname="test_db")
  27.  
  28.  
  29. @pytest_asyncio.fixture(scope="session", autouse=True)
  30. def event_loop():
  31.     loop = asyncio.get_event_loop_policy().new_event_loop()
  32.     yield loop
  33.     loop.close()
  34.  
  35.  
  36. @pytest_asyncio.fixture(scope="session", autouse=True)
  37. async def connection_test(test_db, event_loop):
  38.     pg_host = test_db.host
  39.     pg_port = test_db.port
  40.     pg_user = test_db.user
  41.     pg_db = test_db.dbname
  42.     pg_password = test_db.password
  43.  
  44.     with DatabaseJanitor(
  45.             pg_user, pg_host, pg_port, pg_db, test_db.version, pg_password
  46.     ):
  47.         connection_str = f"postgresql+asyncpg://{pg_user}:@{pg_host}:{pg_port}/{pg_db}"
  48.         sessionmanager.init(connection_str)
  49.         yield sessionmanager
  50.  
  51.         await sessionmanager.close()
  52.  
  53.  
  54. @pytest_asyncio.fixture(scope="function", autouse=True)
  55. async def create_tables(connection_test):
  56.     async with sessionmanager.connect() as connection:
  57.         await sessionmanager.drop_all(connection)
  58.         await sessionmanager.create_all(connection)
  59.  
  60.  
  61. @pytest_asyncio.fixture(scope='function')
  62. async def session_override(app, connection_test):
  63.     async def get_db_override():
  64.         async with sessionmanager.session() as session:
  65.             yield session
  66.  
  67.     app.dependency_overrides[get_session] = get_db_override
  68.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement