From 7a85b3ea6651c9f0cb5eab468b692e1d0941c83c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 13 Nov 2020 14:20:47 +0100 Subject: [PATCH] Add test to access current request in websocket API (#43133) --- .../websocket_api/test_decorators.py | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 tests/components/websocket_api/test_decorators.py diff --git a/tests/components/websocket_api/test_decorators.py b/tests/components/websocket_api/test_decorators.py new file mode 100644 index 00000000000..45d761f6fed --- /dev/null +++ b/tests/components/websocket_api/test_decorators.py @@ -0,0 +1,68 @@ +"""Test decorators.""" +from homeassistant.components import http, websocket_api + + +async def test_async_response_request_context(hass, websocket_client): + """Test we can access current request.""" + + def handle_request(request, connection, msg): + if request is not None: + connection.send_result(msg["id"], request.path) + else: + connection.send_error(msg["id"], "not_found", "") + + @websocket_api.websocket_command({"type": "test-get-request-executor"}) + @websocket_api.async_response + async def executor_get_request(hass, connection, msg): + handle_request( + await hass.async_add_executor_job(http.current_request.get), connection, msg + ) + + @websocket_api.websocket_command({"type": "test-get-request-async"}) + @websocket_api.async_response + async def async_get_request(hass, connection, msg): + handle_request(http.current_request.get(), connection, msg) + + @websocket_api.websocket_command({"type": "test-get-request"}) + def get_request(hass, connection, msg): + handle_request(http.current_request.get(), connection, msg) + + websocket_api.async_register_command(hass, executor_get_request) + websocket_api.async_register_command(hass, async_get_request) + websocket_api.async_register_command(hass, get_request) + + await websocket_client.send_json( + { + "id": 5, + "type": "test-get-request", + } + ) + + msg = await websocket_client.receive_json() + assert msg["id"] == 5 + assert msg["success"] + assert msg["result"] == "/api/websocket" + + await websocket_client.send_json( + { + "id": 6, + "type": "test-get-request-async", + } + ) + + msg = await websocket_client.receive_json() + assert msg["id"] == 6 + assert msg["success"] + assert msg["result"] == "/api/websocket" + + await websocket_client.send_json( + { + "id": 7, + "type": "test-get-request-executor", + } + ) + + msg = await websocket_client.receive_json() + assert msg["id"] == 7 + assert not msg["success"] + assert msg["error"]["code"] == "not_found"