mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 12:17:07 +00:00
Tweak template alarm tests (#71730)
This commit is contained in:
parent
39313057c4
commit
8f50a70ff5
@ -1,7 +1,12 @@
|
|||||||
"""The tests for the Template alarm control panel platform."""
|
"""The tests for the Template alarm control panel platform."""
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from homeassistant.components.alarm_control_panel import DOMAIN as ALARM_DOMAIN
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
|
ATTR_DOMAIN,
|
||||||
|
ATTR_ENTITY_ID,
|
||||||
|
ATTR_SERVICE_DATA,
|
||||||
|
EVENT_CALL_SERVICE,
|
||||||
STATE_ALARM_ARMED_AWAY,
|
STATE_ALARM_ARMED_AWAY,
|
||||||
STATE_ALARM_ARMED_HOME,
|
STATE_ALARM_ARMED_HOME,
|
||||||
STATE_ALARM_ARMED_NIGHT,
|
STATE_ALARM_ARMED_NIGHT,
|
||||||
@ -10,13 +15,62 @@ from homeassistant.const import (
|
|||||||
STATE_ALARM_PENDING,
|
STATE_ALARM_PENDING,
|
||||||
STATE_ALARM_TRIGGERED,
|
STATE_ALARM_TRIGGERED,
|
||||||
)
|
)
|
||||||
|
from homeassistant.core import callback
|
||||||
from tests.components.alarm_control_panel import common
|
|
||||||
|
|
||||||
TEMPLATE_NAME = "alarm_control_panel.test_template_panel"
|
TEMPLATE_NAME = "alarm_control_panel.test_template_panel"
|
||||||
PANEL_NAME = "alarm_control_panel.test"
|
PANEL_NAME = "alarm_control_panel.test"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def service_calls(hass):
|
||||||
|
"""Track service call events for alarm_control_panel.test."""
|
||||||
|
events = []
|
||||||
|
entity_id = "alarm_control_panel.test"
|
||||||
|
|
||||||
|
@callback
|
||||||
|
def capture_events(event):
|
||||||
|
print(event.data)
|
||||||
|
if event.data[ATTR_DOMAIN] != ALARM_DOMAIN:
|
||||||
|
return
|
||||||
|
if event.data[ATTR_SERVICE_DATA][ATTR_ENTITY_ID] != [entity_id]:
|
||||||
|
return
|
||||||
|
events.append(event)
|
||||||
|
|
||||||
|
hass.bus.async_listen(EVENT_CALL_SERVICE, capture_events)
|
||||||
|
|
||||||
|
return events
|
||||||
|
|
||||||
|
|
||||||
|
OPTIMISTIC_TEMPLATE_ALARM_CONFIG = {
|
||||||
|
"arm_away": {
|
||||||
|
"service": "alarm_control_panel.alarm_arm_away",
|
||||||
|
"entity_id": "alarm_control_panel.test",
|
||||||
|
"data": {"code": "1234"},
|
||||||
|
},
|
||||||
|
"arm_home": {
|
||||||
|
"service": "alarm_control_panel.alarm_arm_home",
|
||||||
|
"entity_id": "alarm_control_panel.test",
|
||||||
|
"data": {"code": "1234"},
|
||||||
|
},
|
||||||
|
"arm_night": {
|
||||||
|
"service": "alarm_control_panel.alarm_arm_night",
|
||||||
|
"entity_id": "alarm_control_panel.test",
|
||||||
|
"data": {"code": "1234"},
|
||||||
|
},
|
||||||
|
"disarm": {
|
||||||
|
"service": "alarm_control_panel.alarm_disarm",
|
||||||
|
"entity_id": "alarm_control_panel.test",
|
||||||
|
"data": {"code": "1234"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TEMPLATE_ALARM_CONFIG = {
|
||||||
|
"value_template": "{{ states('alarm_control_panel.test') }}",
|
||||||
|
**OPTIMISTIC_TEMPLATE_ALARM_CONFIG,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("count,domain", [(1, "alarm_control_panel")])
|
@pytest.mark.parametrize("count,domain", [(1, "alarm_control_panel")])
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"config",
|
"config",
|
||||||
@ -24,31 +78,7 @@ PANEL_NAME = "alarm_control_panel.test"
|
|||||||
{
|
{
|
||||||
"alarm_control_panel": {
|
"alarm_control_panel": {
|
||||||
"platform": "template",
|
"platform": "template",
|
||||||
"panels": {
|
"panels": {"test_template_panel": TEMPLATE_ALARM_CONFIG},
|
||||||
"test_template_panel": {
|
|
||||||
"value_template": "{{ states('alarm_control_panel.test') }}",
|
|
||||||
"arm_away": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_away",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"arm_home": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_home",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"arm_night": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_night",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"disarm": {
|
|
||||||
"service": "alarm_control_panel.alarm_disarm",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@ -83,30 +113,7 @@ async def test_template_state_text(hass, start_ha):
|
|||||||
{
|
{
|
||||||
"alarm_control_panel": {
|
"alarm_control_panel": {
|
||||||
"platform": "template",
|
"platform": "template",
|
||||||
"panels": {
|
"panels": {"test_template_panel": OPTIMISTIC_TEMPLATE_ALARM_CONFIG},
|
||||||
"test_template_panel": {
|
|
||||||
"arm_away": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_away",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"arm_home": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_home",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"arm_night": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_night",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"disarm": {
|
|
||||||
"service": "alarm_control_panel.alarm_disarm",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@ -118,13 +125,15 @@ async def test_optimistic_states(hass, start_ha):
|
|||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert state.state == "unknown"
|
assert state.state == "unknown"
|
||||||
|
|
||||||
for func, set_state in [
|
for service, set_state in [
|
||||||
(common.async_alarm_arm_away, STATE_ALARM_ARMED_AWAY),
|
("alarm_arm_away", STATE_ALARM_ARMED_AWAY),
|
||||||
(common.async_alarm_arm_home, STATE_ALARM_ARMED_HOME),
|
("alarm_arm_home", STATE_ALARM_ARMED_HOME),
|
||||||
(common.async_alarm_arm_night, STATE_ALARM_ARMED_NIGHT),
|
("alarm_arm_night", STATE_ALARM_ARMED_NIGHT),
|
||||||
(common.async_alarm_disarm, STATE_ALARM_DISARMED),
|
("alarm_disarm", STATE_ALARM_DISARMED),
|
||||||
]:
|
]:
|
||||||
await func(hass, entity_id=TEMPLATE_NAME)
|
await hass.services.async_call(
|
||||||
|
ALARM_DOMAIN, service, {"entity_id": TEMPLATE_NAME}, blocking=True
|
||||||
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert hass.states.get(TEMPLATE_NAME).state == set_state
|
assert hass.states.get(TEMPLATE_NAME).state == set_state
|
||||||
|
|
||||||
@ -140,26 +149,7 @@ async def test_optimistic_states(hass, start_ha):
|
|||||||
"panels": {
|
"panels": {
|
||||||
"test_template_panel": {
|
"test_template_panel": {
|
||||||
"value_template": "{% if blah %}",
|
"value_template": "{% if blah %}",
|
||||||
"arm_away": {
|
**OPTIMISTIC_TEMPLATE_ALARM_CONFIG,
|
||||||
"service": "alarm_control_panel.alarm_arm_away",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"arm_home": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_home",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"arm_night": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_night",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"disarm": {
|
|
||||||
"service": "alarm_control_panel.alarm_disarm",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -173,26 +163,7 @@ async def test_optimistic_states(hass, start_ha):
|
|||||||
"panels": {
|
"panels": {
|
||||||
"bad name here": {
|
"bad name here": {
|
||||||
"value_template": "disarmed",
|
"value_template": "disarmed",
|
||||||
"arm_away": {
|
**OPTIMISTIC_TEMPLATE_ALARM_CONFIG,
|
||||||
"service": "alarm_control_panel.alarm_arm_away",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"arm_home": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_home",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"arm_night": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_night",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"disarm": {
|
|
||||||
"service": "alarm_control_panel.alarm_disarm",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -221,26 +192,7 @@ async def test_optimistic_states(hass, start_ha):
|
|||||||
"panels": {
|
"panels": {
|
||||||
"test_template_panel": {
|
"test_template_panel": {
|
||||||
"value_template": "disarmed",
|
"value_template": "disarmed",
|
||||||
"arm_away": {
|
**OPTIMISTIC_TEMPLATE_ALARM_CONFIG,
|
||||||
"service": "alarm_control_panel.alarm_arm_away",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"arm_home": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_home",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"arm_night": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_night",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"disarm": {
|
|
||||||
"service": "alarm_control_panel.alarm_disarm",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"code_format": "bad_format",
|
"code_format": "bad_format",
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -267,26 +219,7 @@ async def test_template_syntax_error(hass, msg, start_ha, caplog_setup_text):
|
|||||||
"test_template_panel": {
|
"test_template_panel": {
|
||||||
"name": "Template Alarm Panel",
|
"name": "Template Alarm Panel",
|
||||||
"value_template": "disarmed",
|
"value_template": "disarmed",
|
||||||
"arm_away": {
|
**OPTIMISTIC_TEMPLATE_ALARM_CONFIG,
|
||||||
"service": "alarm_control_panel.alarm_arm_away",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"arm_home": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_home",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"arm_night": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_night",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"disarm": {
|
|
||||||
"service": "alarm_control_panel.alarm_disarm",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -302,131 +235,33 @@ async def test_name(hass, start_ha):
|
|||||||
|
|
||||||
@pytest.mark.parametrize("count,domain", [(1, "alarm_control_panel")])
|
@pytest.mark.parametrize("count,domain", [(1, "alarm_control_panel")])
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"config,func",
|
"config",
|
||||||
[
|
[
|
||||||
(
|
{
|
||||||
{
|
"alarm_control_panel": {
|
||||||
"alarm_control_panel": {
|
"platform": "template",
|
||||||
"platform": "template",
|
"panels": {"test_template_panel": TEMPLATE_ALARM_CONFIG},
|
||||||
"panels": {
|
}
|
||||||
"test_template_panel": {
|
},
|
||||||
"value_template": "{{ states('alarm_control_panel.test') }}",
|
|
||||||
"arm_away": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_home",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"arm_home": {"service": "test.automation"},
|
|
||||||
"arm_night": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_home",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"disarm": {
|
|
||||||
"service": "alarm_control_panel.alarm_disarm",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
common.async_alarm_arm_home,
|
|
||||||
),
|
|
||||||
(
|
|
||||||
{
|
|
||||||
"alarm_control_panel": {
|
|
||||||
"platform": "template",
|
|
||||||
"panels": {
|
|
||||||
"test_template_panel": {
|
|
||||||
"value_template": "{{ states('alarm_control_panel.test') }}",
|
|
||||||
"arm_home": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_home",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"arm_away": {"service": "test.automation"},
|
|
||||||
"arm_night": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_home",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"disarm": {
|
|
||||||
"service": "alarm_control_panel.alarm_disarm",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
common.async_alarm_arm_away,
|
|
||||||
),
|
|
||||||
(
|
|
||||||
{
|
|
||||||
"alarm_control_panel": {
|
|
||||||
"platform": "template",
|
|
||||||
"panels": {
|
|
||||||
"test_template_panel": {
|
|
||||||
"value_template": "{{ states('alarm_control_panel.test') }}",
|
|
||||||
"arm_home": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_home",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"arm_night": {"service": "test.automation"},
|
|
||||||
"arm_away": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_home",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"disarm": {
|
|
||||||
"service": "alarm_control_panel.alarm_disarm",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
common.async_alarm_arm_night,
|
|
||||||
),
|
|
||||||
(
|
|
||||||
{
|
|
||||||
"alarm_control_panel": {
|
|
||||||
"platform": "template",
|
|
||||||
"panels": {
|
|
||||||
"test_template_panel": {
|
|
||||||
"value_template": "{{ states('alarm_control_panel.test') }}",
|
|
||||||
"arm_home": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_home",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"disarm": {"service": "test.automation"},
|
|
||||||
"arm_away": {
|
|
||||||
"service": "alarm_control_panel.alarm_arm_home",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
"arm_night": {
|
|
||||||
"service": "alarm_control_panel.alarm_disarm",
|
|
||||||
"entity_id": "alarm_control_panel.test",
|
|
||||||
"data": {"code": "1234"},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
common.async_alarm_disarm,
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
async def test_arm_home_action(hass, func, start_ha, calls):
|
@pytest.mark.parametrize(
|
||||||
"""Test arm home action."""
|
"service",
|
||||||
await func(hass, entity_id=TEMPLATE_NAME)
|
[
|
||||||
|
"alarm_arm_home",
|
||||||
|
"alarm_arm_away",
|
||||||
|
"alarm_arm_night",
|
||||||
|
"alarm_disarm",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
async def test_actions(hass, service, start_ha, service_calls):
|
||||||
|
"""Test alarm actions."""
|
||||||
|
await hass.services.async_call(
|
||||||
|
ALARM_DOMAIN, service, {"entity_id": TEMPLATE_NAME}, blocking=True
|
||||||
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert len(calls) == 1
|
assert len(service_calls) == 1
|
||||||
|
assert service_calls[0].data["service"] == service
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("count,domain", [(1, "alarm_control_panel")])
|
@pytest.mark.parametrize("count,domain", [(1, "alarm_control_panel")])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user