diff --git a/homeassistant/components/discovergy/config_flow.py b/homeassistant/components/discovergy/config_flow.py index 3434b1dd84c..e035661db10 100644 --- a/homeassistant/components/discovergy/config_flow.py +++ b/homeassistant/components/discovergy/config_flow.py @@ -85,7 +85,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): httpx_client=get_async_client(self.hass), authentication=BasicAuth(), ).meters() - except discovergyError.HTTPError: + except (discovergyError.HTTPError, discovergyError.DiscovergyClientError): errors["base"] = "cannot_connect" except discovergyError.InvalidLogin: errors["base"] = "invalid_auth" diff --git a/homeassistant/components/discovergy/coordinator.py b/homeassistant/components/discovergy/coordinator.py index 1371b1f26ac..5f27c6a43d2 100644 --- a/homeassistant/components/discovergy/coordinator.py +++ b/homeassistant/components/discovergy/coordinator.py @@ -5,7 +5,7 @@ from datetime import timedelta import logging from pydiscovergy import Discovergy -from pydiscovergy.error import AccessTokenExpired, HTTPError +from pydiscovergy.error import DiscovergyClientError, HTTPError, InvalidLogin from pydiscovergy.models import Meter, Reading from homeassistant.core import HomeAssistant @@ -44,11 +44,11 @@ class DiscovergyUpdateCoordinator(DataUpdateCoordinator[Reading]): """Get last reading for meter.""" try: return await self.discovergy_client.meter_last_reading(self.meter.meter_id) - except AccessTokenExpired as err: + except InvalidLogin as err: raise ConfigEntryAuthFailed( f"Auth expired while fetching last reading for meter {self.meter.meter_id}" ) from err - except HTTPError as err: + except (HTTPError, DiscovergyClientError) as err: raise UpdateFailed( f"Error while fetching last reading for meter {self.meter.meter_id}" ) from err diff --git a/tests/components/discovergy/test_config_flow.py b/tests/components/discovergy/test_config_flow.py index bc4fd2d9e9d..ad9fde46b64 100644 --- a/tests/components/discovergy/test_config_flow.py +++ b/tests/components/discovergy/test_config_flow.py @@ -1,7 +1,7 @@ """Test the Discovergy config flow.""" from unittest.mock import Mock, patch -from pydiscovergy.error import HTTPError, InvalidLogin +from pydiscovergy.error import DiscovergyClientError, HTTPError, InvalidLogin from homeassistant import data_entry_flow from homeassistant.components.discovergy.const import DOMAIN @@ -114,6 +114,25 @@ async def test_form_cannot_connect(hass: HomeAssistant) -> None: assert result2["errors"] == {"base": "cannot_connect"} +async def test_form_client_error(hass: HomeAssistant) -> None: + """Test we handle cannot connect error.""" + result = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": SOURCE_USER} + ) + + with patch("pydiscovergy.Discovergy.meters", side_effect=DiscovergyClientError): + result2 = await hass.config_entries.flow.async_configure( + result["flow_id"], + { + CONF_EMAIL: "test@example.com", + CONF_PASSWORD: "test-password", + }, + ) + + assert result2["type"] == data_entry_flow.FlowResultType.FORM + assert result2["errors"] == {"base": "cannot_connect"} + + async def test_form_unknown_exception(hass: HomeAssistant) -> None: """Test we handle cannot connect error.""" result = await hass.config_entries.flow.async_init(