Fix ESPHome alarm_control_panel when state is missing (#95871)

pull/95890/head
J. Nick Koston 2023-07-05 01:35:40 -05:00 committed by GitHub
parent 436cda1489
commit 659281aab6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 0 deletions

View File

@ -33,6 +33,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .entity import (
EsphomeEntity,
esphome_state_property,
platform_async_setup_entry,
)
from .enum_mapper import EsphomeEnumMapper
@ -111,6 +112,7 @@ class EsphomeAlarmControlPanel(
self._attr_code_arm_required = bool(static_info.requires_code_to_arm)
@property
@esphome_state_property
def state(self) -> str | None:
"""Return the state of the device."""
return _ESPHOME_ACP_STATE_TO_HASS_STATE.from_esphome(self._state.state)

View File

@ -24,6 +24,7 @@ from homeassistant.components.esphome.alarm_control_panel import EspHomeACPFeatu
from homeassistant.const import (
ATTR_ENTITY_ID,
STATE_ALARM_ARMED_AWAY,
STATE_UNKNOWN,
)
from homeassistant.core import HomeAssistant
@ -209,3 +210,38 @@ async def test_generic_alarm_control_panel_no_code(
[call(1, AlarmControlPanelCommand.DISARM, None)]
)
mock_client.alarm_control_panel_command.reset_mock()
async def test_generic_alarm_control_panel_missing_state(
hass: HomeAssistant,
mock_client: APIClient,
mock_generic_device_entry,
) -> None:
"""Test a generic alarm_control_panel entity that is missing state."""
entity_info = [
AlarmControlPanelInfo(
object_id="myalarm_control_panel",
key=1,
name="my alarm_control_panel",
unique_id="my_alarm_control_panel",
supported_features=EspHomeACPFeatures.ARM_AWAY
| EspHomeACPFeatures.ARM_CUSTOM_BYPASS
| EspHomeACPFeatures.ARM_HOME
| EspHomeACPFeatures.ARM_NIGHT
| EspHomeACPFeatures.ARM_VACATION
| EspHomeACPFeatures.TRIGGER,
requires_code=False,
requires_code_to_arm=False,
)
]
states = []
user_service = []
await mock_generic_device_entry(
mock_client=mock_client,
entity_info=entity_info,
user_service=user_service,
states=states,
)
state = hass.states.get("alarm_control_panel.test_my_alarm_control_panel")
assert state is not None
assert state.state == STATE_UNKNOWN