Fix Tailwind cover exception when door is already in the requested state (#124543)

This commit is contained in:
Bill Flood 2024-10-01 11:51:12 -07:00 committed by GitHub
parent c175a68a26
commit dd478fe681
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 32 additions and 1 deletions

View File

@ -5,6 +5,7 @@ from __future__ import annotations
from typing import Any from typing import Any
from gotailwind import ( from gotailwind import (
TailwindDoorAlreadyInStateError,
TailwindDoorDisabledError, TailwindDoorDisabledError,
TailwindDoorLockedOutError, TailwindDoorLockedOutError,
TailwindDoorOperationCommand, TailwindDoorOperationCommand,
@ -21,7 +22,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN from .const import DOMAIN, LOGGER
from .entity import TailwindDoorEntity from .entity import TailwindDoorEntity
from .typing import TailwindConfigEntry from .typing import TailwindConfigEntry
@ -77,6 +78,8 @@ class TailwindDoorCoverEntity(TailwindDoorEntity, CoverEntity):
translation_domain=DOMAIN, translation_domain=DOMAIN,
translation_key="door_locked_out", translation_key="door_locked_out",
) from exc ) from exc
except TailwindDoorAlreadyInStateError:
LOGGER.debug("Already in the requested state: %s", self.entity_id)
except TailwindError as exc: except TailwindError as exc:
raise HomeAssistantError( raise HomeAssistantError(
translation_domain=DOMAIN, translation_domain=DOMAIN,
@ -109,6 +112,8 @@ class TailwindDoorCoverEntity(TailwindDoorEntity, CoverEntity):
translation_domain=DOMAIN, translation_domain=DOMAIN,
translation_key="door_locked_out", translation_key="door_locked_out",
) from exc ) from exc
except TailwindDoorAlreadyInStateError:
LOGGER.debug("Already in the requested state: %s", self.entity_id)
except TailwindError as exc: except TailwindError as exc:
raise HomeAssistantError( raise HomeAssistantError(
translation_domain=DOMAIN, translation_domain=DOMAIN,

View File

@ -3,6 +3,7 @@
from unittest.mock import ANY, MagicMock from unittest.mock import ANY, MagicMock
from gotailwind import ( from gotailwind import (
TailwindDoorAlreadyInStateError,
TailwindDoorDisabledError, TailwindDoorDisabledError,
TailwindDoorLockedOutError, TailwindDoorLockedOutError,
TailwindDoorOperationCommand, TailwindDoorOperationCommand,
@ -181,3 +182,28 @@ async def test_cover_operations(
) )
assert excinfo.value.translation_domain == DOMAIN assert excinfo.value.translation_domain == DOMAIN
assert excinfo.value.translation_key == "communication_error" assert excinfo.value.translation_key == "communication_error"
# Test door already in state
mock_tailwind.operate.side_effect = TailwindDoorAlreadyInStateError(
"Door is already in the requested state"
)
# This call should not raise an exception
await hass.services.async_call(
COVER_DOMAIN,
SERVICE_OPEN_COVER,
{
ATTR_ENTITY_ID: "cover.door_1",
},
blocking=True,
)
# This call should not raise an exception
await hass.services.async_call(
COVER_DOMAIN,
SERVICE_CLOSE_COVER,
{
ATTR_ENTITY_ID: "cover.door_1",
},
blocking=True,
)