From 4b2ff0a0bab2122ab2cba89f9258de18b720bfac Mon Sep 17 00:00:00 2001 From: jan iversen Date: Tue, 14 Sep 2021 22:06:29 +0200 Subject: [PATCH] Update template/alarm_control_panel.py to use pytest (#56229) --- .../template/test_alarm_control_panel.py | 830 +++++++----------- 1 file changed, 328 insertions(+), 502 deletions(-) diff --git a/tests/components/template/test_alarm_control_panel.py b/tests/components/template/test_alarm_control_panel.py index abb2e7b4765..fabf626afd3 100644 --- a/tests/components/template/test_alarm_control_panel.py +++ b/tests/components/template/test_alarm_control_panel.py @@ -1,5 +1,6 @@ """The tests for the Template alarm control panel platform.""" -from homeassistant import setup +import pytest + from homeassistant.const import ( STATE_ALARM_ARMED_AWAY, STATE_ALARM_ARMED_HOME, @@ -10,21 +11,80 @@ from homeassistant.const import ( STATE_ALARM_TRIGGERED, ) -from tests.common import async_mock_service from tests.components.alarm_control_panel import common +TEMPLATE_NAME = "alarm_control_panel.test_template_panel" +PANEL_NAME = "alarm_control_panel.test" -async def test_template_state_text(hass): + +@pytest.mark.parametrize("count,domain", [(1, "alarm_control_panel")]) +@pytest.mark.parametrize( + "config", + [ + { + "alarm_control_panel": { + "platform": "template", + "panels": { + "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"}, + }, + } + }, + } + }, + ], +) +async def test_template_state_text(hass, start_ha): """Test the state text of a template.""" - await setup.async_setup_component( - hass, - "alarm_control_panel", + + for set_state in [ + STATE_ALARM_ARMED_HOME, + STATE_ALARM_ARMED_AWAY, + STATE_ALARM_ARMED_NIGHT, + STATE_ALARM_ARMING, + STATE_ALARM_DISARMED, + STATE_ALARM_PENDING, + STATE_ALARM_TRIGGERED, + ]: + hass.states.async_set(PANEL_NAME, set_state) + await hass.async_block_till_done() + state = hass.states.get(TEMPLATE_NAME) + assert state.state == set_state + + hass.states.async_set(PANEL_NAME, "invalid_state") + await hass.async_block_till_done() + state = hass.states.get(TEMPLATE_NAME) + assert state.state == "unknown" + + +@pytest.mark.parametrize("count,domain", [(1, "alarm_control_panel")]) +@pytest.mark.parametrize( + "config", + [ { "alarm_control_panel": { "platform": "template", "panels": { "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", @@ -49,140 +109,30 @@ async def test_template_state_text(hass): }, } }, - ) - - await hass.async_block_till_done() - await hass.async_start() - await hass.async_block_till_done() - - hass.states.async_set("alarm_control_panel.test", STATE_ALARM_ARMED_HOME) - await hass.async_block_till_done() - - state = hass.states.get("alarm_control_panel.test_template_panel") - assert state.state == STATE_ALARM_ARMED_HOME - - hass.states.async_set("alarm_control_panel.test", STATE_ALARM_ARMED_AWAY) - await hass.async_block_till_done() - - state = hass.states.get("alarm_control_panel.test_template_panel") - assert state.state == STATE_ALARM_ARMED_AWAY - - hass.states.async_set("alarm_control_panel.test", STATE_ALARM_ARMED_NIGHT) - await hass.async_block_till_done() - - state = hass.states.get("alarm_control_panel.test_template_panel") - assert state.state == STATE_ALARM_ARMED_NIGHT - - hass.states.async_set("alarm_control_panel.test", STATE_ALARM_ARMING) - await hass.async_block_till_done() - - state = hass.states.get("alarm_control_panel.test_template_panel") - assert state.state == STATE_ALARM_ARMING - - hass.states.async_set("alarm_control_panel.test", STATE_ALARM_DISARMED) - await hass.async_block_till_done() - - state = hass.states.get("alarm_control_panel.test_template_panel") - assert state.state == STATE_ALARM_DISARMED - - hass.states.async_set("alarm_control_panel.test", STATE_ALARM_PENDING) - await hass.async_block_till_done() - - state = hass.states.get("alarm_control_panel.test_template_panel") - assert state.state == STATE_ALARM_PENDING - - hass.states.async_set("alarm_control_panel.test", STATE_ALARM_TRIGGERED) - await hass.async_block_till_done() - - state = hass.states.get("alarm_control_panel.test_template_panel") - assert state.state == STATE_ALARM_TRIGGERED - - hass.states.async_set("alarm_control_panel.test", "invalid_state") - await hass.async_block_till_done() - - state = hass.states.get("alarm_control_panel.test_template_panel") - assert state.state == "unknown" - - -async def test_optimistic_states(hass): + ], +) +async def test_optimistic_states(hass, start_ha): """Test the optimistic state.""" - await setup.async_setup_component( - hass, - "alarm_control_panel", - { - "alarm_control_panel": { - "platform": "template", - "panels": { - "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"}, - }, - } - }, - } - }, - ) - await hass.async_block_till_done() - await hass.async_start() - await hass.async_block_till_done() - - state = hass.states.get("alarm_control_panel.test_template_panel") + state = hass.states.get(TEMPLATE_NAME) await hass.async_block_till_done() assert state.state == "unknown" - await common.async_alarm_arm_away( - hass, entity_id="alarm_control_panel.test_template_panel" - ) - await hass.async_block_till_done() - state = hass.states.get("alarm_control_panel.test_template_panel") - await hass.async_block_till_done() - assert state.state == STATE_ALARM_ARMED_AWAY - - await common.async_alarm_arm_home( - hass, entity_id="alarm_control_panel.test_template_panel" - ) - state = hass.states.get("alarm_control_panel.test_template_panel") - await hass.async_block_till_done() - assert state.state == STATE_ALARM_ARMED_HOME - - await common.async_alarm_arm_night( - hass, entity_id="alarm_control_panel.test_template_panel" - ) - state = hass.states.get("alarm_control_panel.test_template_panel") - await hass.async_block_till_done() - assert state.state == STATE_ALARM_ARMED_NIGHT - - await common.async_alarm_disarm( - hass, entity_id="alarm_control_panel.test_template_panel" - ) - state = hass.states.get("alarm_control_panel.test_template_panel") - await hass.async_block_till_done() - assert state.state == STATE_ALARM_DISARMED + for func, set_state in [ + (common.async_alarm_arm_away, STATE_ALARM_ARMED_AWAY), + (common.async_alarm_arm_home, STATE_ALARM_ARMED_HOME), + (common.async_alarm_arm_night, STATE_ALARM_ARMED_NIGHT), + (common.async_alarm_disarm, STATE_ALARM_DISARMED), + ]: + await func(hass, entity_id=TEMPLATE_NAME) + await hass.async_block_till_done() + assert hass.states.get(TEMPLATE_NAME).state == set_state -async def test_no_action_scripts(hass): - """Test no action scripts per state.""" - await setup.async_setup_component( - hass, - "alarm_control_panel", +@pytest.mark.parametrize("count,domain", [(1, "alarm_control_panel")]) +@pytest.mark.parametrize( + "config", + [ { "alarm_control_panel": { "platform": "template", @@ -193,180 +143,121 @@ async def test_no_action_scripts(hass): }, } }, - ) - - await hass.async_block_till_done() - await hass.async_start() - await hass.async_block_till_done() - + ], +) +async def test_no_action_scripts(hass, start_ha): + """Test no action scripts per state.""" hass.states.async_set("alarm_control_panel.test", STATE_ALARM_ARMED_AWAY) await hass.async_block_till_done() - await common.async_alarm_arm_away( - hass, entity_id="alarm_control_panel.test_template_panel" - ) - await hass.async_block_till_done() - state = hass.states.get("alarm_control_panel.test_template_panel") - await hass.async_block_till_done() - assert state.state == STATE_ALARM_ARMED_AWAY - - await common.async_alarm_arm_home( - hass, entity_id="alarm_control_panel.test_template_panel" - ) - await hass.async_block_till_done() - state = hass.states.get("alarm_control_panel.test_template_panel") - await hass.async_block_till_done() - assert state.state == STATE_ALARM_ARMED_AWAY - - await common.async_alarm_arm_night( - hass, entity_id="alarm_control_panel.test_template_panel" - ) - await hass.async_block_till_done() - state = hass.states.get("alarm_control_panel.test_template_panel") - await hass.async_block_till_done() - assert state.state == STATE_ALARM_ARMED_AWAY - - await common.async_alarm_disarm( - hass, entity_id="alarm_control_panel.test_template_panel" - ) - await hass.async_block_till_done() - state = hass.states.get("alarm_control_panel.test_template_panel") - await hass.async_block_till_done() - assert state.state == STATE_ALARM_ARMED_AWAY + for func, set_state in [ + (common.async_alarm_arm_away, STATE_ALARM_ARMED_AWAY), + (common.async_alarm_arm_home, STATE_ALARM_ARMED_AWAY), + (common.async_alarm_arm_night, STATE_ALARM_ARMED_AWAY), + (common.async_alarm_disarm, STATE_ALARM_ARMED_AWAY), + ]: + await func(hass, entity_id=TEMPLATE_NAME) + await hass.async_block_till_done() + assert hass.states.get(TEMPLATE_NAME).state == set_state -async def test_template_syntax_error(hass, caplog): +@pytest.mark.parametrize("count,domain", [(0, "alarm_control_panel")]) +@pytest.mark.parametrize( + "config,msg", + [ + ( + { + "alarm_control_panel": { + "platform": "template", + "panels": { + "test_template_panel": { + "value_template": "{% if blah %}", + "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"}, + }, + } + }, + } + }, + "invalid template", + ), + ( + { + "alarm_control_panel": { + "platform": "template", + "panels": { + "bad name here": { + "value_template": "{{ disarmed }}", + "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"}, + }, + } + }, + } + }, + "invalid slug bad name", + ), + ( + { + "alarm_control_panel": { + "platform": "template", + "wibble": {"test_panel": "Invalid"}, + } + }, + "[wibble] is an invalid option", + ), + ( + { + "alarm_control_panel": {"platform": "template"}, + }, + "required key not provided @ data['panels']", + ), + ], +) +async def test_template_syntax_error(hass, msg, start_ha, caplog_setup_text): """Test templating syntax error.""" - await setup.async_setup_component( - hass, - "alarm_control_panel", - { - "alarm_control_panel": { - "platform": "template", - "panels": { - "test_template_panel": { - "value_template": "{% if blah %}", - "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"}, - }, - } - }, - } - }, - ) - - await hass.async_block_till_done() - await hass.async_start() - await hass.async_block_till_done() - assert len(hass.states.async_all()) == 0 - assert ("invalid template") in caplog.text + assert (msg) in caplog_setup_text -async def test_invalid_name_does_not_create(hass, caplog): - """Test invalid name.""" - await setup.async_setup_component( - hass, - "alarm_control_panel", - { - "alarm_control_panel": { - "platform": "template", - "panels": { - "bad name here": { - "value_template": "{{ disarmed }}", - "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"}, - }, - } - }, - } - }, - ) - - await hass.async_block_till_done() - await hass.async_start() - await hass.async_block_till_done() - - assert len(hass.states.async_all()) == 0 - assert ("invalid slug bad name") in caplog.text - - -async def test_invalid_panel_does_not_create(hass, caplog): - """Test invalid alarm control panel.""" - await setup.async_setup_component( - hass, - "alarm_control_panel", - { - "alarm_control_panel": { - "platform": "template", - "wibble": {"test_panel": "Invalid"}, - } - }, - ) - - await hass.async_block_till_done() - await hass.async_start() - await hass.async_block_till_done() - - assert len(hass.states.async_all()) == 0 - assert ("[wibble] is an invalid option") in caplog.text - - -async def test_no_panels_does_not_create(hass, caplog): - """Test if there are no panels -> no creation.""" - await setup.async_setup_component( - hass, - "alarm_control_panel", - {"alarm_control_panel": {"platform": "template"}}, - ) - - await hass.async_block_till_done() - await hass.async_start() - await hass.async_block_till_done() - - assert len(hass.states.async_all()) == 0 - assert ("required key not provided @ data['panels']") in caplog.text - - -async def test_name(hass): - """Test the accessibility of the name attribute.""" - await setup.async_setup_component( - hass, - "alarm_control_panel", +@pytest.mark.parametrize("count,domain", [(1, "alarm_control_panel")]) +@pytest.mark.parametrize( + "config", + [ { "alarm_control_panel": { "platform": "template", @@ -398,211 +289,148 @@ async def test_name(hass): }, } }, - ) - - await hass.async_block_till_done() - await hass.async_start() - await hass.async_block_till_done() - - state = hass.states.get("alarm_control_panel.test_template_panel") + ], +) +async def test_name(hass, start_ha): + """Test the accessibility of the name attribute.""" + state = hass.states.get(TEMPLATE_NAME) assert state is not None - assert state.attributes.get("friendly_name") == "Template Alarm Panel" -async def test_arm_home_action(hass): +@pytest.mark.parametrize("count,domain", [(1, "alarm_control_panel")]) +@pytest.mark.parametrize( + "config,func", + [ + ( + { + "alarm_control_panel": { + "platform": "template", + "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): """Test arm home action.""" - await setup.async_setup_component( - hass, - "alarm_control_panel", - { - "alarm_control_panel": { - "platform": "template", - "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"}, - }, - } - }, - } - }, - ) - + await func(hass, entity_id=TEMPLATE_NAME) await hass.async_block_till_done() - await hass.async_start() - await hass.async_block_till_done() - - service_calls = async_mock_service(hass, "test", "automation") - - await common.async_alarm_arm_home( - hass, entity_id="alarm_control_panel.test_template_panel" - ) - await hass.async_block_till_done() - - assert len(service_calls) == 1 + assert len(calls) == 1 -async def test_arm_away_action(hass): - """Test arm away action.""" - await setup.async_setup_component( - hass, - "alarm_control_panel", - { - "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"}, - }, - } - }, - } - }, - ) - - await hass.async_block_till_done() - await hass.async_start() - await hass.async_block_till_done() - - service_calls = async_mock_service(hass, "test", "automation") - - await common.async_alarm_arm_away( - hass, entity_id="alarm_control_panel.test_template_panel" - ) - await hass.async_block_till_done() - - assert len(service_calls) == 1 - - -async def test_arm_night_action(hass): - """Test arm night action.""" - await setup.async_setup_component( - hass, - "alarm_control_panel", - { - "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"}, - }, - } - }, - } - }, - ) - - await hass.async_block_till_done() - await hass.async_start() - await hass.async_block_till_done() - - service_calls = async_mock_service(hass, "test", "automation") - - await common.async_alarm_arm_night( - hass, entity_id="alarm_control_panel.test_template_panel" - ) - await hass.async_block_till_done() - - assert len(service_calls) == 1 - - -async def test_disarm_action(hass): - """Test disarm action.""" - await setup.async_setup_component( - hass, - "alarm_control_panel", - { - "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"}, - }, - } - }, - } - }, - ) - - await hass.async_block_till_done() - await hass.async_start() - await hass.async_block_till_done() - - service_calls = async_mock_service(hass, "test", "automation") - - await common.async_alarm_disarm( - hass, entity_id="alarm_control_panel.test_template_panel" - ) - await hass.async_block_till_done() - - assert len(service_calls) == 1 - - -async def test_unique_id(hass): - """Test unique_id option only creates one alarm control panel per id.""" - await setup.async_setup_component( - hass, - "alarm_control_panel", +@pytest.mark.parametrize("count,domain", [(1, "alarm_control_panel")]) +@pytest.mark.parametrize( + "config", + [ { "alarm_control_panel": { "platform": "template", @@ -618,10 +446,8 @@ async def test_unique_id(hass): }, }, }, - ) - - await hass.async_block_till_done() - await hass.async_start() - await hass.async_block_till_done() - + ], +) +async def test_unique_id(hass, start_ha): + """Test unique_id option only creates one alarm control panel per id.""" assert len(hass.states.async_all()) == 1