fastapi/tests/test_apirouter_mount.py

51 lines
1.4 KiB
Python

from pathlib import Path
import pytest
from fastapi import APIRouter, FastAPI
from fastapi.exceptions import FastAPIError
from fastapi.staticfiles import StaticFiles
from fastapi.testclient import TestClient
@pytest.mark.parametrize("root_path", ["", "/v1"])
@pytest.mark.parametrize(
("router_prefix", "include_prefix", "request_prefix"),
[
("", "", ""),
("/router", "", "/router"),
("", "/router_1", "/router_1"),
("/router", "/router_1", "/router_1/router"),
],
)
def test_mount_static_files_to_apirouter(
tmp_path: Path,
root_path: str,
router_prefix: str,
include_prefix: str,
request_prefix: str,
):
static_asset = tmp_path / "index.html"
static_asset.write_text("Hello, World!")
router = APIRouter(prefix=router_prefix)
router.mount("/static", StaticFiles(directory=tmp_path), name="static")
app = FastAPI(root_path=root_path or None)
app.include_router(router, prefix=include_prefix)
client = TestClient(app)
response = client.get(f"{root_path}{request_prefix}/static/index.html")
assert response.status_code == 200
assert response.text == "Hello, World!"
def test_mount_app_to_apirouter_raises():
router = APIRouter()
sub_app = FastAPI()
with pytest.raises(
FastAPIError,
match="APIRouter does not support mounting ASGI applications other than StaticFiles.",
):
router.mount("/sub", sub_app)