mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 00:37:53 +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."""
|
||||
|
||||
from collections.abc import Callable
|
||||
from unittest.mock import patch
|
||||
|
||||
from pydeconz.models.sensor.ancillary_control import AncillaryControlPanel
|
||||
import pytest
|
||||
from syrupy import SnapshotAssertion
|
||||
|
||||
from homeassistant.components.alarm_control_panel import (
|
||||
DOMAIN as ALARM_CONTROL_PANEL_DOMAIN,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import (
|
||||
ATTR_CODE,
|
||||
ATTR_ENTITY_ID,
|
||||
@ -24,12 +25,14 @@ from homeassistant.const import (
|
||||
STATE_ALARM_PENDING,
|
||||
STATE_ALARM_TRIGGERED,
|
||||
STATE_UNAVAILABLE,
|
||||
STATE_UNKNOWN,
|
||||
Platform,
|
||||
)
|
||||
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
|
||||
|
||||
|
||||
@ -99,125 +102,66 @@ from tests.test_util.aiohttp import AiohttpClientMocker
|
||||
)
|
||||
async def test_alarm_control_panel(
|
||||
hass: HomeAssistant,
|
||||
entity_registry: er.EntityRegistry,
|
||||
aioclient_mock: AiohttpClientMocker,
|
||||
config_entry_setup: ConfigEntry,
|
||||
config_entry_factory: ConfigEntryFactoryType,
|
||||
mock_put_request: Callable[[str, str], AiohttpClientMocker],
|
||||
sensor_ws_data: WebsocketDataType,
|
||||
snapshot: SnapshotAssertion,
|
||||
) -> None:
|
||||
"""Test successful creation of alarm control panel entities."""
|
||||
assert len(hass.states.async_all()) == 4
|
||||
assert hass.states.get("alarm_control_panel.keypad").state == STATE_UNKNOWN
|
||||
|
||||
# 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,
|
||||
with patch(
|
||||
"homeassistant.components.deconz.PLATFORMS", [Platform.ALARM_CONTROL_PANEL]
|
||||
):
|
||||
await sensor_ws_data({"state": {"panel": arming_event}})
|
||||
assert hass.states.get("alarm_control_panel.keypad").state == STATE_ALARM_ARMING
|
||||
config_entry = await config_entry_factory()
|
||||
await snapshot_platform(hass, entity_registry, snapshot, config_entry.entry_id)
|
||||
|
||||
# Event signals alarm control panel pending
|
||||
|
||||
for pending_event in (
|
||||
AncillaryControlPanel.ENTRY_DELAY,
|
||||
AncillaryControlPanel.EXIT_DELAY,
|
||||
for action, state in (
|
||||
# Event signals alarm control panel armed state
|
||||
(AncillaryControlPanel.ARMED_AWAY, STATE_ALARM_ARMED_AWAY),
|
||||
(AncillaryControlPanel.ARMED_NIGHT, STATE_ALARM_ARMED_NIGHT),
|
||||
(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}})
|
||||
assert (
|
||||
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
|
||||
await sensor_ws_data({"state": {"panel": action}})
|
||||
assert hass.states.get("alarm_control_panel.keypad").state == state
|
||||
|
||||
# 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(
|
||||
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.config_entries.async_remove(config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
assert len(hass.states.async_all()) == 0
|
||||
|
Loading…
x
Reference in New Issue
Block a user