
* Add improved scene support to the alarm_control_panel integration * Add service description for alarm_arm_custom_bypass
148 lines
5.3 KiB
Python
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"
|
|
}
|