From 3abcffe3a08f4f5f77ada2802f71ec716a3cad35 Mon Sep 17 00:00:00 2001 From: Guido Schmitz Date: Thu, 18 May 2023 18:28:17 +0200 Subject: [PATCH] Raise on reauth in devolo Home Network switch platform (#92850) --- .../components/devolo_home_network/switch.py | 11 +++++++++-- .../components/devolo_home_network/test_switch.py | 15 +++++++++------ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/devolo_home_network/switch.py b/homeassistant/components/devolo_home_network/switch.py index 8f82cf8f416..e7bcee3f2ec 100644 --- a/homeassistant/components/devolo_home_network/switch.py +++ b/homeassistant/components/devolo_home_network/switch.py @@ -13,6 +13,7 @@ from homeassistant.components.switch import SwitchEntity, SwitchEntityDescriptio from homeassistant.config_entries import ConfigEntry from homeassistant.const import EntityCategory from homeassistant.core import HomeAssistant +from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.update_coordinator import DataUpdateCoordinator @@ -113,8 +114,11 @@ class DevoloSwitchEntity(DevoloCoordinatorEntity[_DataT], SwitchEntity): """Turn the entity on.""" try: await self.entity_description.turn_on_func(self.device) - except DevicePasswordProtected: + except DevicePasswordProtected as ex: self.entry.async_start_reauth(self.hass) + raise HomeAssistantError( + f"Device {self.entry.title} require re-authenticatication to set or change the password" + ) from ex except DeviceUnavailable: pass # The coordinator will handle this await self.coordinator.async_request_refresh() @@ -123,8 +127,11 @@ class DevoloSwitchEntity(DevoloCoordinatorEntity[_DataT], SwitchEntity): """Turn the entity off.""" try: await self.entity_description.turn_off_func(self.device) - except DevicePasswordProtected: + except DevicePasswordProtected as ex: self.entry.async_start_reauth(self.hass) + raise HomeAssistantError( + f"Device {self.entry.title} require re-authenticatication to set or change the password" + ) from ex except DeviceUnavailable: pass # The coordinator will handle this await self.coordinator.async_request_refresh() diff --git a/tests/components/devolo_home_network/test_switch.py b/tests/components/devolo_home_network/test_switch.py index 257ccfbb6e3..47e09a034ca 100644 --- a/tests/components/devolo_home_network/test_switch.py +++ b/tests/components/devolo_home_network/test_switch.py @@ -21,6 +21,7 @@ from homeassistant.const import ( EntityCategory, ) from homeassistant.core import HomeAssistant +from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import entity_registry as er from homeassistant.helpers.update_coordinator import REQUEST_REFRESH_DEFAULT_COOLDOWN from homeassistant.util import dt @@ -300,9 +301,10 @@ async def test_auth_failed( api = getattr(mock_device.device, set_method) api.side_effect = DevicePasswordProtected - await hass.services.async_call( - PLATFORM, SERVICE_TURN_ON, {"entity_id": state_key}, blocking=True - ) + with pytest.raises(HomeAssistantError): + await hass.services.async_call( + PLATFORM, SERVICE_TURN_ON, {"entity_id": state_key}, blocking=True + ) flows = hass.config_entries.flow.async_progress() assert len(flows) == 1 @@ -313,9 +315,10 @@ async def test_auth_failed( assert flow["context"]["source"] == SOURCE_REAUTH assert flow["context"]["entry_id"] == entry.entry_id - await hass.services.async_call( - PLATFORM, SERVICE_TURN_OFF, {"entity_id": state_key}, blocking=True - ) + with pytest.raises(HomeAssistantError): + await hass.services.async_call( + PLATFORM, SERVICE_TURN_OFF, {"entity_id": state_key}, blocking=True + ) flows = hass.config_entries.flow.async_progress() assert len(flows) == 1