Send localization info on websocket_api script errors (#104638)

* Send localization info on script errors

* Use connection exception hander

* Keep HomeAssistantError is unknown_error

* Move specific exception handling
This commit is contained in:
Jan Bouwhuis 2023-11-29 10:47:23 +01:00 committed by GitHub
parent 7dbaf40f48
commit efd330f182
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 106 additions and 3 deletions

View file

@ -2317,6 +2317,65 @@ async def test_execute_script(
assert call.context.as_dict() == msg_var["result"]["context"]
@pytest.mark.parametrize(
("raise_exception", "err_code"),
[
(
HomeAssistantError(
"Some error",
translation_domain="test",
translation_key="test_error",
translation_placeholders={"option": "bla"},
),
"unknown_error",
),
(
ServiceValidationError(
"Some error",
translation_domain="test",
translation_key="test_error",
translation_placeholders={"option": "bla"},
),
"service_validation_error",
),
],
)
async def test_execute_script_err_localization(
hass: HomeAssistant,
websocket_client: MockHAClientWebSocket,
raise_exception: HomeAssistantError,
err_code: str,
) -> None:
"""Test testing a condition."""
async_mock_service(
hass, "domain_test", "test_service", raise_exception=raise_exception
)
await websocket_client.send_json(
{
"id": 5,
"type": "execute_script",
"sequence": [
{
"service": "domain_test.test_service",
"data": {"hello": "world"},
},
{"stop": "done", "response_variable": "service_result"},
],
}
)
msg = await websocket_client.receive_json()
assert msg["id"] == 5
assert msg["type"] == const.TYPE_RESULT
assert msg["success"] is False
assert msg["error"]["code"] == err_code
assert msg["error"]["message"] == "Some error"
assert msg["error"]["translation_key"] == "test_error"
assert msg["error"]["translation_domain"] == "test"
assert msg["error"]["translation_placeholders"] == {"option": "bla"}
async def test_execute_script_complex_response(
hass: HomeAssistant, hass_ws_client: WebSocketGenerator
) -> None: