2022-06-22 18:11:22 +00:00
|
|
|
from typing import Generator
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
from fastapi.testclient import TestClient
|
|
|
|
from sqlalchemy import orm
|
|
|
|
|
|
|
|
from app.database import Base
|
|
|
|
from app.database import engine
|
|
|
|
from app.database import get_db
|
|
|
|
from app.main import app
|
2022-06-28 21:47:51 +00:00
|
|
|
from tests.factories import _Session
|
2022-06-22 18:11:22 +00:00
|
|
|
|
2022-06-28 21:47:51 +00:00
|
|
|
# _Session = orm.sessionmaker(bind=engine, autocommit=False, autoflush=False)
|
2022-06-22 18:11:22 +00:00
|
|
|
|
|
|
|
|
|
|
|
def _get_db_for_testing() -> Generator[orm.Session, None, None]:
|
2022-06-28 21:47:51 +00:00
|
|
|
# try:
|
|
|
|
yield _Session # type: ignore
|
|
|
|
# finally:
|
|
|
|
# session.close()
|
2022-06-22 18:11:22 +00:00
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture
|
|
|
|
def db() -> Generator:
|
|
|
|
Base.metadata.create_all(bind=engine)
|
2022-06-28 21:47:51 +00:00
|
|
|
# sess = orm.sessionmaker(bind=engine)()
|
|
|
|
yield _Session
|
|
|
|
# yield orm.scoped_session(orm.sessionmaker(bind=engine))
|
2022-06-22 18:11:22 +00:00
|
|
|
try:
|
|
|
|
Base.metadata.drop_all(bind=engine)
|
|
|
|
except Exception:
|
|
|
|
# XXX: for some reason, the teardown occasionally fails because of this
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture
|
|
|
|
def exclude_fastapi_middleware():
|
|
|
|
"""Workaround for https://github.com/encode/starlette/issues/472"""
|
|
|
|
user_middleware = app.user_middleware.copy()
|
|
|
|
app.user_middleware = []
|
|
|
|
app.middleware_stack = app.build_middleware_stack()
|
|
|
|
yield
|
|
|
|
app.user_middleware = user_middleware
|
|
|
|
app.middleware_stack = app.build_middleware_stack()
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture
|
|
|
|
def client(db, exclude_fastapi_middleware) -> Generator:
|
|
|
|
app.dependency_overrides[get_db] = _get_db_for_testing
|
|
|
|
with TestClient(app) as c:
|
|
|
|
yield c
|