mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 22:27:07 +00:00
Use snapshot in deCONZ alarm control panel tests (#122551)
* Use snapshot in deCONZ alarm control panel tests * Clean up comments
This commit is contained in:
parent
943b1afb55
commit
be8e432bea
@ -0,0 +1,51 @@
|
|||||||
|
# serializer version: 1
|
||||||
|
# name: test_alarm_control_panel[sensor_payload0-alarm_system_payload0][alarm_control_panel.keypad-entry]
|
||||||
|
EntityRegistryEntrySnapshot({
|
||||||
|
'aliases': set({
|
||||||
|
}),
|
||||||
|
'area_id': None,
|
||||||
|
'capabilities': None,
|
||||||
|
'config_entry_id': <ANY>,
|
||||||
|
'device_class': None,
|
||||||
|
'device_id': <ANY>,
|
||||||
|
'disabled_by': None,
|
||||||
|
'domain': 'alarm_control_panel',
|
||||||
|
'entity_category': None,
|
||||||
|
'entity_id': 'alarm_control_panel.keypad',
|
||||||
|
'has_entity_name': False,
|
||||||
|
'hidden_by': None,
|
||||||
|
'icon': None,
|
||||||
|
'id': <ANY>,
|
||||||
|
'labels': set({
|
||||||
|
}),
|
||||||
|
'name': None,
|
||||||
|
'options': dict({
|
||||||
|
}),
|
||||||
|
'original_device_class': None,
|
||||||
|
'original_icon': None,
|
||||||
|
'original_name': 'Keypad',
|
||||||
|
'platform': 'deconz',
|
||||||
|
'previous_unique_id': None,
|
||||||
|
'supported_features': <AlarmControlPanelEntityFeature: 7>,
|
||||||
|
'translation_key': None,
|
||||||
|
'unique_id': '00:00:00:00:00:00:00:00-00',
|
||||||
|
'unit_of_measurement': None,
|
||||||
|
})
|
||||||
|
# ---
|
||||||
|
# name: test_alarm_control_panel[sensor_payload0-alarm_system_payload0][alarm_control_panel.keypad-state]
|
||||||
|
StateSnapshot({
|
||||||
|
'attributes': ReadOnlyDict({
|
||||||
|
'changed_by': None,
|
||||||
|
'code_arm_required': True,
|
||||||
|
'code_format': <CodeFormat.NUMBER: 'number'>,
|
||||||
|
'friendly_name': 'Keypad',
|
||||||
|
'supported_features': <AlarmControlPanelEntityFeature: 7>,
|
||||||
|
}),
|
||||||
|
'context': <ANY>,
|
||||||
|
'entity_id': 'alarm_control_panel.keypad',
|
||||||
|
'last_changed': <ANY>,
|
||||||
|
'last_reported': <ANY>,
|
||||||
|
'last_updated': <ANY>,
|
||||||
|
'state': 'unknown',
|
||||||
|
})
|
||||||
|
# ---
|
@ -1,14 +1,15 @@
|
|||||||
"""deCONZ alarm control panel platform tests."""
|
"""deCONZ alarm control panel platform tests."""
|
||||||
|
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
from pydeconz.models.sensor.ancillary_control import AncillaryControlPanel
|
from pydeconz.models.sensor.ancillary_control import AncillaryControlPanel
|
||||||
import pytest
|
import pytest
|
||||||
|
from syrupy import SnapshotAssertion
|
||||||
|
|
||||||
from homeassistant.components.alarm_control_panel import (
|
from homeassistant.components.alarm_control_panel import (
|
||||||
DOMAIN as ALARM_CONTROL_PANEL_DOMAIN,
|
DOMAIN as ALARM_CONTROL_PANEL_DOMAIN,
|
||||||
)
|
)
|
||||||
from homeassistant.config_entries import ConfigEntry
|
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_CODE,
|
ATTR_CODE,
|
||||||
ATTR_ENTITY_ID,
|
ATTR_ENTITY_ID,
|
||||||
@ -24,12 +25,14 @@ from homeassistant.const import (
|
|||||||
STATE_ALARM_PENDING,
|
STATE_ALARM_PENDING,
|
||||||
STATE_ALARM_TRIGGERED,
|
STATE_ALARM_TRIGGERED,
|
||||||
STATE_UNAVAILABLE,
|
STATE_UNAVAILABLE,
|
||||||
STATE_UNKNOWN,
|
Platform,
|
||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
from homeassistant.helpers import entity_registry as er
|
||||||
|
|
||||||
from .conftest import WebsocketDataType
|
from .conftest import ConfigEntryFactoryType, WebsocketDataType
|
||||||
|
|
||||||
|
from tests.common import snapshot_platform
|
||||||
from tests.test_util.aiohttp import AiohttpClientMocker
|
from tests.test_util.aiohttp import AiohttpClientMocker
|
||||||
|
|
||||||
|
|
||||||
@ -99,125 +102,66 @@ from tests.test_util.aiohttp import AiohttpClientMocker
|
|||||||
)
|
)
|
||||||
async def test_alarm_control_panel(
|
async def test_alarm_control_panel(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
|
entity_registry: er.EntityRegistry,
|
||||||
aioclient_mock: AiohttpClientMocker,
|
aioclient_mock: AiohttpClientMocker,
|
||||||
config_entry_setup: ConfigEntry,
|
config_entry_factory: ConfigEntryFactoryType,
|
||||||
mock_put_request: Callable[[str, str], AiohttpClientMocker],
|
mock_put_request: Callable[[str, str], AiohttpClientMocker],
|
||||||
sensor_ws_data: WebsocketDataType,
|
sensor_ws_data: WebsocketDataType,
|
||||||
|
snapshot: SnapshotAssertion,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test successful creation of alarm control panel entities."""
|
"""Test successful creation of alarm control panel entities."""
|
||||||
assert len(hass.states.async_all()) == 4
|
with patch(
|
||||||
assert hass.states.get("alarm_control_panel.keypad").state == STATE_UNKNOWN
|
"homeassistant.components.deconz.PLATFORMS", [Platform.ALARM_CONTROL_PANEL]
|
||||||
|
|
||||||
# Event signals alarm control panel armed away
|
|
||||||
|
|
||||||
await sensor_ws_data({"state": {"panel": AncillaryControlPanel.ARMED_AWAY}})
|
|
||||||
assert hass.states.get("alarm_control_panel.keypad").state == STATE_ALARM_ARMED_AWAY
|
|
||||||
|
|
||||||
# Event signals alarm control panel armed night
|
|
||||||
|
|
||||||
await sensor_ws_data({"state": {"panel": AncillaryControlPanel.ARMED_NIGHT}})
|
|
||||||
assert (
|
|
||||||
hass.states.get("alarm_control_panel.keypad").state == STATE_ALARM_ARMED_NIGHT
|
|
||||||
)
|
|
||||||
|
|
||||||
# Event signals alarm control panel armed home
|
|
||||||
|
|
||||||
await sensor_ws_data({"state": {"panel": AncillaryControlPanel.ARMED_STAY}})
|
|
||||||
assert hass.states.get("alarm_control_panel.keypad").state == STATE_ALARM_ARMED_HOME
|
|
||||||
|
|
||||||
# Event signals alarm control panel disarmed
|
|
||||||
|
|
||||||
await sensor_ws_data({"state": {"panel": AncillaryControlPanel.DISARMED}})
|
|
||||||
assert hass.states.get("alarm_control_panel.keypad").state == STATE_ALARM_DISARMED
|
|
||||||
|
|
||||||
# Event signals alarm control panel arming
|
|
||||||
|
|
||||||
for arming_event in (
|
|
||||||
AncillaryControlPanel.ARMING_AWAY,
|
|
||||||
AncillaryControlPanel.ARMING_NIGHT,
|
|
||||||
AncillaryControlPanel.ARMING_STAY,
|
|
||||||
):
|
):
|
||||||
await sensor_ws_data({"state": {"panel": arming_event}})
|
config_entry = await config_entry_factory()
|
||||||
assert hass.states.get("alarm_control_panel.keypad").state == STATE_ALARM_ARMING
|
await snapshot_platform(hass, entity_registry, snapshot, config_entry.entry_id)
|
||||||
|
|
||||||
# Event signals alarm control panel pending
|
for action, state in (
|
||||||
|
# Event signals alarm control panel armed state
|
||||||
for pending_event in (
|
(AncillaryControlPanel.ARMED_AWAY, STATE_ALARM_ARMED_AWAY),
|
||||||
AncillaryControlPanel.ENTRY_DELAY,
|
(AncillaryControlPanel.ARMED_NIGHT, STATE_ALARM_ARMED_NIGHT),
|
||||||
AncillaryControlPanel.EXIT_DELAY,
|
(AncillaryControlPanel.ARMED_STAY, STATE_ALARM_ARMED_HOME),
|
||||||
|
(AncillaryControlPanel.DISARMED, STATE_ALARM_DISARMED),
|
||||||
|
# Event signals alarm control panel arming state
|
||||||
|
(AncillaryControlPanel.ARMING_AWAY, STATE_ALARM_ARMING),
|
||||||
|
(AncillaryControlPanel.ARMING_NIGHT, STATE_ALARM_ARMING),
|
||||||
|
(AncillaryControlPanel.ARMING_STAY, STATE_ALARM_ARMING),
|
||||||
|
# Event signals alarm control panel pending state
|
||||||
|
(AncillaryControlPanel.ENTRY_DELAY, STATE_ALARM_PENDING),
|
||||||
|
(AncillaryControlPanel.EXIT_DELAY, STATE_ALARM_PENDING),
|
||||||
|
# Event signals alarm control panel triggered state
|
||||||
|
(AncillaryControlPanel.IN_ALARM, STATE_ALARM_TRIGGERED),
|
||||||
|
# Event signals alarm control panel unknown state keeps previous state
|
||||||
|
(AncillaryControlPanel.NOT_READY, STATE_ALARM_TRIGGERED),
|
||||||
):
|
):
|
||||||
await sensor_ws_data({"state": {"panel": pending_event}})
|
await sensor_ws_data({"state": {"panel": action}})
|
||||||
assert (
|
assert hass.states.get("alarm_control_panel.keypad").state == state
|
||||||
hass.states.get("alarm_control_panel.keypad").state == STATE_ALARM_PENDING
|
|
||||||
)
|
|
||||||
|
|
||||||
# Event signals alarm control panel triggered
|
|
||||||
|
|
||||||
await sensor_ws_data({"state": {"panel": AncillaryControlPanel.IN_ALARM}})
|
|
||||||
assert hass.states.get("alarm_control_panel.keypad").state == STATE_ALARM_TRIGGERED
|
|
||||||
|
|
||||||
# Event signals alarm control panel unknown state keeps previous state
|
|
||||||
|
|
||||||
await sensor_ws_data({"state": {"panel": AncillaryControlPanel.NOT_READY}})
|
|
||||||
assert hass.states.get("alarm_control_panel.keypad").state == STATE_ALARM_TRIGGERED
|
|
||||||
|
|
||||||
# Verify service calls
|
# Verify service calls
|
||||||
|
|
||||||
# Service set alarm to away mode
|
for path, service, code in (
|
||||||
|
# Service set alarm to away mode
|
||||||
|
("arm_away", SERVICE_ALARM_ARM_AWAY, "1234"),
|
||||||
|
# Service set alarm to home mode
|
||||||
|
("arm_stay", SERVICE_ALARM_ARM_HOME, "2345"),
|
||||||
|
# Service set alarm to night mode
|
||||||
|
("arm_night", SERVICE_ALARM_ARM_NIGHT, "3456"),
|
||||||
|
# Service set alarm to disarmed
|
||||||
|
("disarm", SERVICE_ALARM_DISARM, "4567"),
|
||||||
|
):
|
||||||
|
aioclient_mock.mock_calls.clear()
|
||||||
|
aioclient_mock = mock_put_request(f"/alarmsystems/0/{path}")
|
||||||
|
await hass.services.async_call(
|
||||||
|
ALARM_CONTROL_PANEL_DOMAIN,
|
||||||
|
service,
|
||||||
|
{ATTR_ENTITY_ID: "alarm_control_panel.keypad", ATTR_CODE: code},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
assert aioclient_mock.mock_calls[0][2] == {"code0": code}
|
||||||
|
|
||||||
aioclient_mock = mock_put_request("/alarmsystems/0/arm_away")
|
await hass.config_entries.async_unload(config_entry.entry_id)
|
||||||
|
assert hass.states.get("alarm_control_panel.keypad").state == STATE_UNAVAILABLE
|
||||||
|
|
||||||
await hass.services.async_call(
|
await hass.config_entries.async_remove(config_entry.entry_id)
|
||||||
ALARM_CONTROL_PANEL_DOMAIN,
|
|
||||||
SERVICE_ALARM_ARM_AWAY,
|
|
||||||
{ATTR_ENTITY_ID: "alarm_control_panel.keypad", ATTR_CODE: "1234"},
|
|
||||||
blocking=True,
|
|
||||||
)
|
|
||||||
assert aioclient_mock.mock_calls[1][2] == {"code0": "1234"}
|
|
||||||
|
|
||||||
# Service set alarm to home mode
|
|
||||||
|
|
||||||
aioclient_mock = mock_put_request("/alarmsystems/0/arm_stay")
|
|
||||||
|
|
||||||
await hass.services.async_call(
|
|
||||||
ALARM_CONTROL_PANEL_DOMAIN,
|
|
||||||
SERVICE_ALARM_ARM_HOME,
|
|
||||||
{ATTR_ENTITY_ID: "alarm_control_panel.keypad", ATTR_CODE: "2345"},
|
|
||||||
blocking=True,
|
|
||||||
)
|
|
||||||
assert aioclient_mock.mock_calls[2][2] == {"code0": "2345"}
|
|
||||||
|
|
||||||
# Service set alarm to night mode
|
|
||||||
|
|
||||||
aioclient_mock = mock_put_request("/alarmsystems/0/arm_night")
|
|
||||||
|
|
||||||
await hass.services.async_call(
|
|
||||||
ALARM_CONTROL_PANEL_DOMAIN,
|
|
||||||
SERVICE_ALARM_ARM_NIGHT,
|
|
||||||
{ATTR_ENTITY_ID: "alarm_control_panel.keypad", ATTR_CODE: "3456"},
|
|
||||||
blocking=True,
|
|
||||||
)
|
|
||||||
assert aioclient_mock.mock_calls[3][2] == {"code0": "3456"}
|
|
||||||
|
|
||||||
# Service set alarm to disarmed
|
|
||||||
|
|
||||||
aioclient_mock = mock_put_request("/alarmsystems/0/disarm")
|
|
||||||
|
|
||||||
await hass.services.async_call(
|
|
||||||
ALARM_CONTROL_PANEL_DOMAIN,
|
|
||||||
SERVICE_ALARM_DISARM,
|
|
||||||
{ATTR_ENTITY_ID: "alarm_control_panel.keypad", ATTR_CODE: "4567"},
|
|
||||||
blocking=True,
|
|
||||||
)
|
|
||||||
assert aioclient_mock.mock_calls[4][2] == {"code0": "4567"}
|
|
||||||
|
|
||||||
await hass.config_entries.async_unload(config_entry_setup.entry_id)
|
|
||||||
|
|
||||||
states = hass.states.async_all()
|
|
||||||
assert len(states) == 4
|
|
||||||
for state in states:
|
|
||||||
assert state.state == STATE_UNAVAILABLE
|
|
||||||
|
|
||||||
await hass.config_entries.async_remove(config_entry_setup.entry_id)
|
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert len(hass.states.async_all()) == 0
|
assert len(hass.states.async_all()) == 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user