2 changed files with 53 additions and 0 deletions
@ -0,0 +1,48 @@ |
|||||
|
from fastapi import APIRouter, FastAPI |
||||
|
from fastapi.responses import JSONResponse |
||||
|
from fastapi.testclient import TestClient |
||||
|
|
||||
|
|
||||
|
def test_mount_subapp_under_router_prefix() -> None: |
||||
|
app = FastAPI() |
||||
|
api_router = APIRouter(prefix="/api") |
||||
|
|
||||
|
@api_router.get("/ping") |
||||
|
def ping() -> dict[str, str]: |
||||
|
return {"message": "pong"} |
||||
|
|
||||
|
sub_app = FastAPI() |
||||
|
|
||||
|
@sub_app.get("/sub") |
||||
|
def read_sub() -> dict[str, str]: |
||||
|
return {"message": "Hello World from sub API"} |
||||
|
|
||||
|
api_router.mount("/subapi", sub_app) |
||||
|
app.include_router(api_router) |
||||
|
|
||||
|
client = TestClient(app) |
||||
|
|
||||
|
response = client.get("/api/ping") |
||||
|
assert response.status_code == 200, response.text |
||||
|
assert response.json() == {"message": "pong"} |
||||
|
|
||||
|
mounted_response = client.get("/api/subapi/sub") |
||||
|
assert mounted_response.status_code == 200, mounted_response.text |
||||
|
assert mounted_response.json() == {"message": "Hello World from sub API"} |
||||
|
|
||||
|
|
||||
|
def test_mount_starlette_route_under_router_prefix() -> None: |
||||
|
app = FastAPI() |
||||
|
router = APIRouter(prefix="/v1") |
||||
|
|
||||
|
def plain_asgi_app(scope, receive, send): |
||||
|
response = JSONResponse({"ok": True}) |
||||
|
return response(scope, receive, send) |
||||
|
|
||||
|
router.mount("/internal", plain_asgi_app, name="internal") |
||||
|
app.include_router(router, prefix="/api") |
||||
|
|
||||
|
client = TestClient(app) |
||||
|
response = client.get("/api/v1/internal") |
||||
|
assert response.status_code == 200, response.text |
||||
|
assert response.json() == {"ok": True} |
||||
Loading…
Reference in new issue