pythonasyncioapiasyncfastapiframeworkjsonjson-schemaopenapiopenapi3pydanticpython-typespython3redocreststarletteswaggerswagger-uiuvicornweb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.7 KiB
62 lines
1.7 KiB
"""Test for issue #14128: Router used directly with TestClient and yield dependencies."""
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from fastapi.testclient import TestClient
|
|
|
|
|
|
def test_router_direct_testclient_with_yield_dependency():
|
|
"""TestClient(router) should work even without wrapping in FastAPI()."""
|
|
router = APIRouter()
|
|
|
|
async def yield_dep():
|
|
yield "value"
|
|
|
|
@router.get("/test")
|
|
async def endpoint(dep: str = Depends(yield_dep)):
|
|
return {"dep": dep}
|
|
|
|
client = TestClient(router)
|
|
response = client.get("/test")
|
|
assert response.status_code == 200
|
|
assert response.json() == {"dep": "value"}
|
|
|
|
|
|
def test_router_direct_testclient_with_multiple_yield_dependencies():
|
|
"""Multiple yield dependencies should work with direct router TestClient."""
|
|
router = APIRouter()
|
|
|
|
async def dep_a():
|
|
yield "a"
|
|
|
|
async def dep_b():
|
|
yield "b"
|
|
|
|
@router.get("/test")
|
|
async def endpoint(a: str = Depends(dep_a), b: str = Depends(dep_b)):
|
|
return {"a": a, "b": b}
|
|
|
|
client = TestClient(router)
|
|
response = client.get("/test")
|
|
assert response.status_code == 200
|
|
assert response.json() == {"a": "a", "b": "b"}
|
|
|
|
|
|
def test_router_direct_testclient_yield_dependency_cleanup():
|
|
"""Yield dependency cleanup should run even with direct router TestClient."""
|
|
cleaned_up = False
|
|
|
|
router = APIRouter()
|
|
|
|
async def yield_dep():
|
|
nonlocal cleaned_up
|
|
yield "value"
|
|
cleaned_up = True
|
|
|
|
@router.get("/test")
|
|
async def endpoint(dep: str = Depends(yield_dep)):
|
|
return {"dep": dep}
|
|
|
|
client = TestClient(router)
|
|
response = client.get("/test")
|
|
assert response.status_code == 200
|
|
assert cleaned_up
|
|
|