from collections.abc import AsyncIterator, Awaitable, Callable import httpx import pytest from app.api import create_app from app.checker import EndpointChecker from app.config import Settings async def public_resolver(_: str, __: int) -> list[str]: return ["93.184.216.34"] @pytest.fixture def client_factory() -> Callable[[httpx.AsyncBaseTransport], Awaitable[httpx.AsyncClient]]: async def make(transport: httpx.AsyncBaseTransport) -> httpx.AsyncClient: checker = EndpointChecker(1, 3, resolver=public_resolver, transport=transport) app = create_app(Settings(), checker=checker) return httpx.AsyncClient( transport=httpx.ASGITransport(app=app), base_url="http://test" ) return make @pytest.fixture async def client( client_factory: Callable[[httpx.AsyncBaseTransport], Awaitable[httpx.AsyncClient]], ) -> AsyncIterator[httpx.AsyncClient]: async def handler(_: httpx.Request) -> httpx.Response: return httpx.Response(200) value = await client_factory(httpx.MockTransport(handler)) async with value: yield value