(
test_client_factory: TestClientFactory,
)
| 989 | |
| 990 | |
| 991 | def test_websocket_route_middleware( |
| 992 | test_client_factory: TestClientFactory, |
| 993 | ) -> None: |
| 994 | async def websocket_endpoint(session: WebSocket) -> None: |
| 995 | await session.accept() |
| 996 | await session.send_text("Hello, world!") |
| 997 | await session.close() |
| 998 | |
| 999 | class WebsocketMiddleware: |
| 1000 | def __init__(self, app: ASGIApp) -> None: |
| 1001 | self.app = app |
| 1002 | |
| 1003 | async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: |
| 1004 | async def modified_send(msg: Message) -> None: |
| 1005 | if msg["type"] == "websocket.accept": |
| 1006 | msg["headers"].append((b"X-Test", b"Set by middleware")) |
| 1007 | await send(msg) |
| 1008 | |
| 1009 | await self.app(scope, receive, modified_send) |
| 1010 | |
| 1011 | app = Starlette( |
| 1012 | routes=[ |
| 1013 | WebSocketRoute( |
| 1014 | "/ws", |
| 1015 | endpoint=websocket_endpoint, |
| 1016 | middleware=[Middleware(WebsocketMiddleware)], |
| 1017 | ) |
| 1018 | ] |
| 1019 | ) |
| 1020 | |
| 1021 | client = test_client_factory(app) |
| 1022 | |
| 1023 | with client.websocket_connect("/ws") as websocket: |
| 1024 | text = websocket.receive_text() |
| 1025 | assert text == "Hello, world!" |
| 1026 | assert websocket.extra_headers == [(b"X-Test", b"Set by middleware")] |
| 1027 | |
| 1028 | |
| 1029 | def test_route_repr() -> None: |
nothing calls this directly
no test coverage detected