diff --git a/test/conftest.py b/test/conftest.py index 022b8dc..cfa329d 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -2,7 +2,7 @@ import pytest from typing import AsyncGenerator from itertools import combinations -from fastapi.routing import APIRoute +from fastapi.routing import APIRoute, iter_route_contexts from httpx import AsyncClient, ASGITransport from sqlalchemy.orm import sessionmaker @@ -258,12 +258,13 @@ def generate_body_and_status(params: dict[str, str]) -> list[tuple[dict, int]]: def get_testable_routes(): routes = [] - for route in app.routes: - if not isinstance(route, APIRoute): - continue + contexts = list(iter_route_contexts(app.routes)) + + for route in contexts: if not route.methods: continue - + if not isinstance(route.route, APIRoute): + continue for method in route.methods: if method in {"HEAD", "OPTIONS"}: continue @@ -271,10 +272,10 @@ def get_testable_routes(): routes.append( ( method, - route.path, - route.status_code, - route.response_model, - route.summary, + route.route.path, + route.route.status_code, + route.route.response_model, + route.route.summary, ) ) @@ -282,11 +283,11 @@ def get_testable_routes(): # with open("endpoints.txt", "w") as f: -# for ep in get_testable_routes(): -# f.write(f"[{ep[0]}]({ep[1]}) -> {ep[2]}: {ep[3]}\n") +# for ep in get_testable_routes(): +# f.write(f"[{ep[0]}]({ep[1]}) -> {ep[2]}: {ep[3]}\n") # # ### Docstring formatted output ### -# with open("endpoints.txt", "w") as f: -# for ep in get_testable_routes(): -# f.write(f"- [{ep[0]}]({ep[1]}): []: {ep[4]}\n") +with open("endpoints.txt", "w") as f: + for ep in get_testable_routes(): + f.write(f"- [{ep[0]}]({ep[1]}): []: {ep[4]}\n") diff --git a/test/test_user.py b/test/test_user.py index b018841..a1f693c 100644 --- a/test/test_user.py +++ b/test/test_user.py @@ -5,7 +5,7 @@ import pytest from httpx import AsyncClient -from fastapi.routing import APIRoute +from fastapi.routing import APIRoute, iter_route_contexts from .conftest import generate_query_and_status @@ -180,10 +180,15 @@ async def test_get_self_orgs_dynamic(default_client: AsyncClient): resp = await default_client.get(path) + contexts = list(iter_route_contexts(default_client._transport.app.routes)) # ty:ignore[unresolved-attribute] + route = next( - route - for route in default_client._transport.app.routes # ty:ignore[unresolved-attribute] - if isinstance(route, APIRoute) and path in route.path and method in route.methods + route.route + for route in contexts + if isinstance(route.route, APIRoute) + and path in route.route.path + and isinstance(route.methods, set) + and method in route.methods ) assert resp.status_code == route.status_code