mirror of https://github.com/tiangolo/fastapi.git
51 lines
1.4 KiB
Python
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)
|