Files
bancho.py/tests/conftest.py
2025-04-04 21:32:15 +09:00

58 lines
1.6 KiB
Python

from __future__ import annotations
from collections.abc import AsyncIterator
import httpx
import pytest
import respx
from asgi_lifespan import LifespanManager
from asgi_lifespan._types import ASGIApp
from fastapi import status
from app.api.init_api import asgi_app
# TODO: fixtures for postgres database connection(s) for itests
# TODO: I believe if we switch to fastapi.TestClient, we
# will no longer need to use the asgi-lifespan dependency.
# (We do not need an asynchronous http client for our tests)
@pytest.fixture(autouse=True)
def mock_out_initial_image_downloads(respx_mock: respx.MockRouter) -> None:
# mock out default avatar download
respx_mock.get("https://i.cmyui.xyz/U24XBZw-4wjVME-JaEz3.png").mock(
return_value=httpx.Response(
status_code=status.HTTP_200_OK,
headers={"Content-Type": "image/png"},
content=b"i am a png file",
),
)
# mock out achievement image downloads
respx_mock.get(url__regex=r"https://assets.ppy.sh/medals/client/.+").mock(
return_value=httpx.Response(
status_code=status.HTTP_200_OK,
headers={"Content-Type": "image/png"},
content=b"i am a png file",
),
)
@pytest.fixture
async def app() -> AsyncIterator[ASGIApp]:
async with LifespanManager(
asgi_app,
startup_timeout=None,
shutdown_timeout=None,
) as manager:
yield manager.app
@pytest.fixture
async def http_client(app: ASGIApp) -> AsyncIterator[httpx.AsyncClient]:
async with httpx.AsyncClient(app=app, base_url="http://test") as client:
yield client
pytest_plugins = []