4
from fastapi import APIRouter, Depends, FastAPI, WebSocket
5
from fastapi.testclient import TestClient
6
from typing_extensions import Annotated
9
def dependency_list() -> List[str]:
13
DepList = Annotated[List[str], Depends(dependency_list)]
16
def create_dependency(name: str):
17
def fun(deps: DepList):
23
router = APIRouter(dependencies=[create_dependency("router")])
24
prefix_router = APIRouter(dependencies=[create_dependency("prefix_router")])
25
app = FastAPI(dependencies=[create_dependency("app")])
28
@app.websocket("/", dependencies=[create_dependency("index")])
29
async def index(websocket: WebSocket, deps: DepList):
30
await websocket.accept()
31
await websocket.send_text(json.dumps(deps))
32
await websocket.close()
35
@router.websocket("/router", dependencies=[create_dependency("routerindex")])
36
async def routerindex(websocket: WebSocket, deps: DepList):
37
await websocket.accept()
38
await websocket.send_text(json.dumps(deps))
39
await websocket.close()
42
@prefix_router.websocket("/", dependencies=[create_dependency("routerprefixindex")])
43
async def routerprefixindex(websocket: WebSocket, deps: DepList):
44
await websocket.accept()
45
await websocket.send_text(json.dumps(deps))
46
await websocket.close()
49
app.include_router(router, dependencies=[create_dependency("router2")])
51
prefix_router, prefix="/prefix", dependencies=[create_dependency("prefix_router2")]
56
client = TestClient(app)
57
with client.websocket_connect("/") as websocket:
58
data = json.loads(websocket.receive_text())
59
assert data == ["app", "index"]
62
def test_routerindex():
63
client = TestClient(app)
64
with client.websocket_connect("/router") as websocket:
65
data = json.loads(websocket.receive_text())
66
assert data == ["app", "router2", "router", "routerindex"]
69
def test_routerprefixindex():
70
client = TestClient(app)
71
with client.websocket_connect("/prefix/") as websocket:
72
data = json.loads(websocket.receive_text())
73
assert data == ["app", "prefix_router2", "prefix_router", "routerprefixindex"]