home-assistant/tests/components/alarm_control_panel/test_reproduce_state.py
Santobert 12f1a8f551 Add improved scene support to the alarm_control_panel integration (#28269)
* Add improved scene support to the alarm_control_panel integration

* Add service description for alarm_arm_custom_bypass
2019-11-01 13:36:18 -07:00

148 lines
5.3 KiB
Python

"""Test reproduce state for Alarm control panel."""
from homeassistant.const import (
SERVICE_ALARM_ARM_AWAY,
SERVICE_ALARM_ARM_CUSTOM_BYPASS,
SERVICE_ALARM_ARM_HOME,
SERVICE_ALARM_ARM_NIGHT,
SERVICE_ALARM_DISARM,
SERVICE_ALARM_TRIGGER,
STATE_ALARM_ARMED_AWAY,
STATE_ALARM_ARMED_CUSTOM_BYPASS,
STATE_ALARM_ARMED_HOME,
STATE_ALARM_ARMED_NIGHT,
STATE_ALARM_DISARMED,
STATE_ALARM_TRIGGERED,
)
from homeassistant.core import State
from tests.common import async_mock_service
async def test_reproducing_states(hass, caplog):
"""Test reproducing Alarm control panel states."""
hass.states.async_set(
"alarm_control_panel.entity_armed_away", STATE_ALARM_ARMED_AWAY, {}
)
hass.states.async_set(
"alarm_control_panel.entity_armed_custom_bypass",
STATE_ALARM_ARMED_CUSTOM_BYPASS,
{},
)
hass.states.async_set(
"alarm_control_panel.entity_armed_home", STATE_ALARM_ARMED_HOME, {}
)
hass.states.async_set(
"alarm_control_panel.entity_armed_night", STATE_ALARM_ARMED_NIGHT, {}
)
hass.states.async_set(
"alarm_control_panel.entity_disarmed", STATE_ALARM_DISARMED, {}
)
hass.states.async_set(
"alarm_control_panel.entity_triggered", STATE_ALARM_TRIGGERED, {}
)
arm_away_calls = async_mock_service(
hass, "alarm_control_panel", SERVICE_ALARM_ARM_AWAY
)
arm_custom_bypass_calls = async_mock_service(
hass, "alarm_control_panel", SERVICE_ALARM_ARM_CUSTOM_BYPASS
)
arm_home_calls = async_mock_service(
hass, "alarm_control_panel", SERVICE_ALARM_ARM_HOME
)
arm_night_calls = async_mock_service(
hass, "alarm_control_panel", SERVICE_ALARM_ARM_NIGHT
)
disarm_calls = async_mock_service(hass, "alarm_control_panel", SERVICE_ALARM_DISARM)
trigger_calls = async_mock_service(
hass, "alarm_control_panel", SERVICE_ALARM_TRIGGER
)
# These calls should do nothing as entities already in desired state
await hass.helpers.state.async_reproduce_state(
[
State("alarm_control_panel.entity_armed_away", STATE_ALARM_ARMED_AWAY),
State(
"alarm_control_panel.entity_armed_custom_bypass",
STATE_ALARM_ARMED_CUSTOM_BYPASS,
),
State("alarm_control_panel.entity_armed_home", STATE_ALARM_ARMED_HOME),
State("alarm_control_panel.entity_armed_night", STATE_ALARM_ARMED_NIGHT),
State("alarm_control_panel.entity_disarmed", STATE_ALARM_DISARMED),
State("alarm_control_panel.entity_triggered", STATE_ALARM_TRIGGERED),
],
blocking=True,
)
assert len(arm_away_calls) == 0
assert len(arm_custom_bypass_calls) == 0
assert len(arm_home_calls) == 0
assert len(arm_night_calls) == 0
assert len(disarm_calls) == 0
assert len(trigger_calls) == 0
# Test invalid state is handled
await hass.helpers.state.async_reproduce_state(
[State("alarm_control_panel.entity_triggered", "not_supported")], blocking=True
)
assert "not_supported" in caplog.text
assert len(arm_away_calls) == 0
assert len(arm_custom_bypass_calls) == 0
assert len(arm_home_calls) == 0
assert len(arm_night_calls) == 0
assert len(disarm_calls) == 0
assert len(trigger_calls) == 0
# Make sure correct services are called
await hass.helpers.state.async_reproduce_state(
[
State("alarm_control_panel.entity_armed_away", STATE_ALARM_TRIGGERED),
State(
"alarm_control_panel.entity_armed_custom_bypass", STATE_ALARM_ARMED_AWAY
),
State(
"alarm_control_panel.entity_armed_home", STATE_ALARM_ARMED_CUSTOM_BYPASS
),
State("alarm_control_panel.entity_armed_night", STATE_ALARM_ARMED_HOME),
State("alarm_control_panel.entity_disarmed", STATE_ALARM_ARMED_NIGHT),
State("alarm_control_panel.entity_triggered", STATE_ALARM_DISARMED),
# Should not raise
State("alarm_control_panel.non_existing", "on"),
],
blocking=True,
)
assert len(arm_away_calls) == 1
assert arm_away_calls[0].domain == "alarm_control_panel"
assert arm_away_calls[0].data == {
"entity_id": "alarm_control_panel.entity_armed_custom_bypass"
}
assert len(arm_custom_bypass_calls) == 1
assert arm_custom_bypass_calls[0].domain == "alarm_control_panel"
assert arm_custom_bypass_calls[0].data == {
"entity_id": "alarm_control_panel.entity_armed_home"
}
assert len(arm_home_calls) == 1
assert arm_home_calls[0].domain == "alarm_control_panel"
assert arm_home_calls[0].data == {
"entity_id": "alarm_control_panel.entity_armed_night"
}
assert len(arm_night_calls) == 1
assert arm_night_calls[0].domain == "alarm_control_panel"
assert arm_night_calls[0].data == {
"entity_id": "alarm_control_panel.entity_disarmed"
}
assert len(disarm_calls) == 1
assert disarm_calls[0].domain == "alarm_control_panel"
assert disarm_calls[0].data == {"entity_id": "alarm_control_panel.entity_triggered"}
assert len(trigger_calls) == 1
assert trigger_calls[0].domain == "alarm_control_panel"
assert trigger_calls[0].data == {
"entity_id": "alarm_control_panel.entity_armed_away"
}