diff --git a/test/conftest.py b/test/conftest.py index a97e092..aa204c4 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -1,7 +1,7 @@ from fastapi.dependencies.models import Dependant import pytest -from typing import AsyncGenerator +from typing import AsyncGenerator, Any from itertools import combinations from fastapi.routing import APIRoute, iter_route_contexts from httpx import AsyncClient, ASGITransport @@ -308,6 +308,42 @@ async def route_data(): return routes +async def standard_test( + client: AsyncClient, + method: str, + path: str, + auth_level: str, + query: str, + body: dict, + expected_data: dict, + route_data: dict[str, dict[str, Any]], +): + route = route_data.get(f"{method.upper()}{path}") + assert route is not None + + req_func = getattr(client, method.lower()) + if method in ["GET", "DELETE"]: + resp = await req_func(url=f"{path}{query}") + else: + resp = await req_func(url=f"{path}{query}", json=body) + + assert route["auth_level"] == auth_level + + assert resp.status_code == route["status_code"] + if route["status_code"] == 204: + return + + expected_response_schema = route["response_model"] + data = resp.json() + + response_model = expected_response_schema(**data) + assert isinstance(response_model, expected_response_schema) + + expected_response_model = expected_response_schema(**expected_data) + + assert response_model == expected_response_model + + def get_testable_routes(): routes = [] diff --git a/test/test_user.py b/test/test_user.py index 84b7bf1..1d66f16 100644 --- a/test/test_user.py +++ b/test/test_user.py @@ -8,8 +8,7 @@ from typing import Any import pytest from httpx import AsyncClient -from .conftest import generate_query_and_status - +from .conftest import generate_query_and_status, standard_test pytestmark = [ pytest.mark.user_module, @@ -154,13 +153,14 @@ async def test_get_self_orgs_success(default_client: AsyncClient): @pytest.mark.anyio -async def test_get_self_orgs_dynamic( +async def test_get_self_orgs_standard( default_client: AsyncClient, route_data: dict[str, dict[str, Any]] ): method = "GET" path = "/user/self/orgs" auth_level = "User" query = "" + body = {} expected_data = { "organisations": [ { @@ -183,24 +183,6 @@ async def test_get_self_orgs_dynamic( ] } - # req_func = getattr(default_client, method); resp = await req_func(url=path, json=body) - resp = await default_client.get(f"{path}{query}") - - route = route_data.get(f"{method.upper()}{path}") - assert route is not None - - assert route["auth_level"] == auth_level - - assert resp.status_code == route["status_code"] - if route["status_code"] == 204: - return - - expected_response_schema = route["response_model"] - data = resp.json() - - response_model = expected_response_schema(**data) - assert isinstance(response_model, expected_response_schema) - - expected_response_model = expected_response_schema(**expected_data) - - assert response_model == expected_response_model + await standard_test( + default_client, method, path, auth_level, query, body, expected_data, route_data + )