(
test_client_factory: TestClientFactory,
)
| 1047 | |
| 1048 | |
| 1049 | def test_websocket_route_middleware( |
| 1050 | test_client_factory: TestClientFactory, |
| 1051 | ) -> None: |
| 1052 | async def websocket_endpoint(session: WebSocket) -> None: |
| 1053 | await session.accept() |
| 1054 | await session.send_text("Hello, world!") |
| 1055 | await session.close() |
| 1056 | |
| 1057 | class WebsocketMiddleware: |
| 1058 | def __init__(self, app: ASGIApp) -> None: |
| 1059 | self.app = app |
| 1060 | |
| 1061 | async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None: |
| 1062 | async def modified_send(msg: Message) -> None: |
| 1063 | if msg["type"] == "websocket.accept": |
| 1064 | msg["headers"].append((b"X-Test", b"Set by middleware")) |
| 1065 | await send(msg) |
| 1066 | |
| 1067 | await self.app(scope, receive, modified_send) |
| 1068 | |
| 1069 | app = Starlette( |
| 1070 | routes=[ |
| 1071 | WebSocketRoute( |
| 1072 | "/ws", |
| 1073 | endpoint=websocket_endpoint, |
| 1074 | middleware=[Middleware(WebsocketMiddleware)], |
| 1075 | ) |
| 1076 | ] |
| 1077 | ) |
| 1078 | |
| 1079 | client = test_client_factory(app) |
| 1080 | |
| 1081 | with client.websocket_connect("/ws") as websocket: |
| 1082 | text = websocket.receive_text() |
| 1083 | assert text == "Hello, world!" |
| 1084 | assert websocket.extra_headers == [(b"X-Test", b"Set by middleware")] |
| 1085 | |
| 1086 | |
| 1087 | def test_route_repr() -> None: |
nothing calls this directly
no test coverage detected