From ece8b749676f2973093219c25a544f0967c9c826 Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Thu, 4 Jul 2024 14:23:15 +0200 Subject: [PATCH] Use fixtures in deCONZ device trigger tests (#121103) --- .../components/deconz/test_device_trigger.py | 135 ++++++++---------- 1 file changed, 61 insertions(+), 74 deletions(-) diff --git a/tests/components/deconz/test_device_trigger.py b/tests/components/deconz/test_device_trigger.py index 5f17da89a4b..9daf34f6665 100644 --- a/tests/components/deconz/test_device_trigger.py +++ b/tests/components/deconz/test_device_trigger.py @@ -1,6 +1,6 @@ """deCONZ device automation tests.""" -from unittest.mock import Mock, patch +from unittest.mock import Mock import pytest from pytest_unordered import unordered @@ -18,6 +18,7 @@ from homeassistant.components.deconz.const import DOMAIN as DECONZ_DOMAIN from homeassistant.components.deconz.device_trigger import CONF_SUBTYPE from homeassistant.components.device_automation import DeviceAutomationType from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN +from homeassistant.config_entries import ConfigEntry from homeassistant.const import ( ATTR_BATTERY_LEVEL, ATTR_ENTITY_ID, @@ -32,10 +33,7 @@ from homeassistant.helpers import device_registry as dr, entity_registry as er from homeassistant.helpers.trigger import async_initialize_triggers from homeassistant.setup import async_setup_component -from .test_gateway import DECONZ_WEB_REQUEST, setup_deconz_integration - from tests.common import async_get_device_automations -from tests.test_util.aiohttp import AiohttpClientMocker @pytest.fixture(autouse=True, name="stub_blueprint_populate") @@ -43,15 +41,10 @@ def stub_blueprint_populate_autouse(stub_blueprint_populate: None) -> None: """Stub copying the blueprints to the config folder.""" -async def test_get_triggers( - hass: HomeAssistant, - device_registry: dr.DeviceRegistry, - entity_registry: er.EntityRegistry, - aioclient_mock: AiohttpClientMocker, -) -> None: - """Test triggers work.""" - data = { - "sensors": { +@pytest.mark.parametrize( + "sensor_payload", + [ + { "1": { "config": { "alert": "none", @@ -72,10 +65,15 @@ async def test_get_triggers( "uniqueid": "d0:cf:5e:ff:fe:71:a4:3a-01-1000", } } - } - with patch.dict(DECONZ_WEB_REQUEST, data): - await setup_deconz_integration(hass, aioclient_mock) - + ], +) +@pytest.mark.usefixtures("config_entry_setup") +async def test_get_triggers( + hass: HomeAssistant, + device_registry: dr.DeviceRegistry, + entity_registry: er.EntityRegistry, +) -> None: + """Test triggers work.""" device = device_registry.async_get_device( identifiers={(DECONZ_DOMAIN, "d0:cf:5e:ff:fe:71:a4:3a")} ) @@ -149,15 +147,10 @@ async def test_get_triggers( assert triggers == unordered(expected_triggers) -async def test_get_triggers_for_alarm_event( - hass: HomeAssistant, - device_registry: dr.DeviceRegistry, - entity_registry: er.EntityRegistry, - aioclient_mock: AiohttpClientMocker, -) -> None: - """Test triggers work.""" - data = { - "sensors": { +@pytest.mark.parametrize( + "sensor_payload", + [ + { "1": { "config": { "battery": 95, @@ -185,10 +178,15 @@ async def test_get_triggers_for_alarm_event( "uniqueid": "00:00:00:00:00:00:00:00-00", } } - } - with patch.dict(DECONZ_WEB_REQUEST, data): - await setup_deconz_integration(hass, aioclient_mock) - + ], +) +@pytest.mark.usefixtures("config_entry_setup") +async def test_get_triggers_for_alarm_event( + hass: HomeAssistant, + device_registry: dr.DeviceRegistry, + entity_registry: er.EntityRegistry, +) -> None: + """Test triggers work.""" device = device_registry.async_get_device( identifiers={(DECONZ_DOMAIN, "00:00:00:00:00:00:00:00")} ) @@ -246,14 +244,10 @@ async def test_get_triggers_for_alarm_event( assert triggers == unordered(expected_triggers) -async def test_get_triggers_manage_unsupported_remotes( - hass: HomeAssistant, - aioclient_mock: AiohttpClientMocker, - device_registry: dr.DeviceRegistry, -) -> None: - """Verify no triggers for an unsupported remote.""" - data = { - "sensors": { +@pytest.mark.parametrize( + "sensor_payload", + [ + { "1": { "config": { "alert": "none", @@ -273,10 +267,13 @@ async def test_get_triggers_manage_unsupported_remotes( "uniqueid": "d0:cf:5e:ff:fe:71:a4:3a-01-1000", } } - } - with patch.dict(DECONZ_WEB_REQUEST, data): - await setup_deconz_integration(hass, aioclient_mock) - + ], +) +@pytest.mark.usefixtures("config_entry_setup") +async def test_get_triggers_manage_unsupported_remotes( + hass: HomeAssistant, device_registry: dr.DeviceRegistry +) -> None: + """Verify no triggers for an unsupported remote.""" device = device_registry.async_get_device( identifiers={(DECONZ_DOMAIN, "d0:cf:5e:ff:fe:71:a4:3a")} ) @@ -290,17 +287,10 @@ async def test_get_triggers_manage_unsupported_remotes( assert triggers == unordered(expected_triggers) -async def test_functional_device_trigger( - hass: HomeAssistant, - aioclient_mock: AiohttpClientMocker, - mock_deconz_websocket, - service_calls: list[ServiceCall], - device_registry: dr.DeviceRegistry, -) -> None: - """Test proper matching and attachment of device trigger automation.""" - - data = { - "sensors": { +@pytest.mark.parametrize( + "sensor_payload", + [ + { "1": { "config": { "alert": "none", @@ -321,10 +311,16 @@ async def test_functional_device_trigger( "uniqueid": "d0:cf:5e:ff:fe:71:a4:3a-01-1000", } } - } - with patch.dict(DECONZ_WEB_REQUEST, data): - await setup_deconz_integration(hass, aioclient_mock) - + ], +) +@pytest.mark.usefixtures("config_entry_setup") +async def test_functional_device_trigger( + hass: HomeAssistant, + device_registry: dr.DeviceRegistry, + service_calls: list[ServiceCall], + mock_deconz_websocket, +) -> None: + """Test proper matching and attachment of device trigger automation.""" device = device_registry.async_get_device( identifiers={(DECONZ_DOMAIN, "d0:cf:5e:ff:fe:71:a4:3a")} ) @@ -368,12 +364,9 @@ async def test_functional_device_trigger( @pytest.mark.skip(reason="Temporarily disabled until automation validation is improved") -async def test_validate_trigger_unknown_device( - hass: HomeAssistant, aioclient_mock: AiohttpClientMocker -) -> None: +@pytest.mark.usefixtures("config_entry_setup") +async def test_validate_trigger_unknown_device(hass: HomeAssistant) -> None: """Test unknown device does not return a trigger config.""" - await setup_deconz_integration(hass, aioclient_mock) - assert await async_setup_component( hass, AUTOMATION_DOMAIN, @@ -402,14 +395,12 @@ async def test_validate_trigger_unknown_device( async def test_validate_trigger_unsupported_device( hass: HomeAssistant, - aioclient_mock: AiohttpClientMocker, device_registry: dr.DeviceRegistry, + config_entry_setup: ConfigEntry, ) -> None: """Test unsupported device doesn't return a trigger config.""" - config_entry = await setup_deconz_integration(hass, aioclient_mock) - device = device_registry.async_get_or_create( - config_entry_id=config_entry.entry_id, + config_entry_id=config_entry_setup.entry_id, identifiers={(DECONZ_DOMAIN, "d0:cf:5e:ff:fe:71:a4:3a")}, model="unsupported", ) @@ -444,14 +435,12 @@ async def test_validate_trigger_unsupported_device( async def test_validate_trigger_unsupported_trigger( hass: HomeAssistant, - aioclient_mock: AiohttpClientMocker, device_registry: dr.DeviceRegistry, + config_entry_setup: ConfigEntry, ) -> None: """Test unsupported trigger does not return a trigger config.""" - config_entry = await setup_deconz_integration(hass, aioclient_mock) - device = device_registry.async_get_or_create( - config_entry_id=config_entry.entry_id, + config_entry_id=config_entry_setup.entry_id, identifiers={(DECONZ_DOMAIN, "d0:cf:5e:ff:fe:71:a4:3a")}, model="TRADFRI on/off switch", ) @@ -488,14 +477,12 @@ async def test_validate_trigger_unsupported_trigger( async def test_attach_trigger_no_matching_event( hass: HomeAssistant, - aioclient_mock: AiohttpClientMocker, device_registry: dr.DeviceRegistry, + config_entry_setup: ConfigEntry, ) -> None: """Test no matching event for device doesn't return a trigger config.""" - config_entry = await setup_deconz_integration(hass, aioclient_mock) - device = device_registry.async_get_or_create( - config_entry_id=config_entry.entry_id, + config_entry_id=config_entry_setup.entry_id, identifiers={(DECONZ_DOMAIN, "d0:cf:5e:ff:fe:71:a4:3a")}, name="Tradfri switch", model="TRADFRI on/off switch",