Tweak template alarm tests (#71730)

This commit is contained in:
Erik Montnemery 2022-05-12 14:09:43 +02:00 committed by GitHub
parent 39313057c4
commit 8f50a70ff5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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")])