import contextlib import pytest from fastapi.testclient import TestClient from app.config import Settings from app.main import create_app from helpers import TEST_SETTINGS @pytest.fixture def make_client(): """Factory: ``make_client(**settings_overrides)`` returns a started TestClient.""" with contextlib.ExitStack() as stack: def factory(**overrides): settings = Settings(**{**TEST_SETTINGS, **overrides}) test_client = stack.enter_context(TestClient(create_app(settings))) # Websocket sessions are closed before the app stops (entered later, exited first). test_client.sockets = stack.enter_context(contextlib.ExitStack()) return test_client yield factory @pytest.fixture def client(make_client): return make_client()