diff --git a/homeassistant/components/tessie/entity.py b/homeassistant/components/tessie/entity.py index ecd7f863542..fc6e8939da9 100644 --- a/homeassistant/components/tessie/entity.py +++ b/homeassistant/components/tessie/entity.py @@ -56,7 +56,7 @@ class TessieEntity(CoordinatorEntity[TessieStateUpdateCoordinator]): ) -> None: """Run a tessie_api function and handle exceptions.""" try: - await func( + response = await func( session=self.coordinator.session, vin=self.vin, api_key=self.coordinator.api_key, @@ -64,6 +64,10 @@ class TessieEntity(CoordinatorEntity[TessieStateUpdateCoordinator]): ) except ClientResponseError as e: raise HomeAssistantError from e + if response["result"] is False: + raise HomeAssistantError( + response.get("reason"), "An unknown issue occurred" + ) def set(self, *args: Any) -> None: """Set a value in coordinator data.""" diff --git a/tests/components/tessie/common.py b/tests/components/tessie/common.py index a26f4becf78..ae80526e5d9 100644 --- a/tests/components/tessie/common.py +++ b/tests/components/tessie/common.py @@ -16,6 +16,7 @@ TEST_STATE_OF_ALL_VEHICLES = load_json_object_fixture("vehicles.json", DOMAIN) TEST_VEHICLE_STATE_ONLINE = load_json_object_fixture("online.json", DOMAIN) TEST_VEHICLE_STATE_ASLEEP = load_json_object_fixture("asleep.json", DOMAIN) TEST_RESPONSE = {"result": True} +TEST_RESPONSE_ERROR = {"result": False, "reason": "reason why"} TEST_CONFIG = {CONF_ACCESS_TOKEN: "1234567890"} TESSIE_URL = "https://api.tessie.com/" diff --git a/tests/components/tessie/test_cover.py b/tests/components/tessie/test_cover.py index be75b6df60a..426b8ab1696 100644 --- a/tests/components/tessie/test_cover.py +++ b/tests/components/tessie/test_cover.py @@ -14,7 +14,7 @@ from homeassistant.const import ATTR_ENTITY_ID from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError -from .common import ERROR_UNKNOWN, TEST_RESPONSE, setup_platform +from .common import ERROR_UNKNOWN, TEST_RESPONSE, TEST_RESPONSE_ERROR, setup_platform async def test_window(hass: HomeAssistant) -> None: @@ -110,3 +110,24 @@ async def test_errors(hass: HomeAssistant) -> None: ) mock_set.assert_called_once() assert error.from_exception == ERROR_UNKNOWN + + +async def test_response_error(hass: HomeAssistant) -> None: + """Tests response errors are handled.""" + + await setup_platform(hass) + entity_id = "cover.test_charge_port_door" + + # Test setting cover open with unknown error + with patch( + "homeassistant.components.tessie.cover.open_unlock_charge_port", + return_value=TEST_RESPONSE_ERROR, + ) as mock_set, pytest.raises(HomeAssistantError) as error: + await hass.services.async_call( + COVER_DOMAIN, + SERVICE_OPEN_COVER, + {ATTR_ENTITY_ID: [entity_id]}, + blocking=True, + ) + mock_set.assert_called_once() + assert str(error) == TEST_RESPONSE_ERROR["reason"]