Improve test coverage of automation extraction functions (#94878)

This commit is contained in:
Erik Montnemery 2023-06-19 23:05:20 +02:00 committed by GitHub
parent 5d138b64d9
commit a7d327afa2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1537,6 +1537,27 @@ async def test_automation_restore_last_triggered_with_initial_state(
assert state.attributes["last_triggered"] == time assert state.attributes["last_triggered"] == time
async def test_extraction_functions_not_setup(hass: HomeAssistant) -> None:
"""Test extraction functions when automation is not setup."""
assert automation.automations_with_area(hass, "area-in-both") == []
assert automation.areas_in_automation(hass, "automation.test") == []
assert automation.automations_with_blueprint(hass, "blabla.yaml") == []
assert automation.blueprint_in_automation(hass, "automation.test") is None
assert automation.automations_with_device(hass, "device-in-both") == []
assert automation.devices_in_automation(hass, "automation.test") == []
assert automation.automations_with_entity(hass, "light.in_both") == []
assert automation.entities_in_automation(hass, "automation.test") == []
async def test_extraction_functions_unknown_automation(hass: HomeAssistant) -> None:
"""Test extraction functions for an unknown automation."""
assert await async_setup_component(hass, DOMAIN, {})
assert automation.areas_in_automation(hass, "automation.unknown") == []
assert automation.blueprint_in_automation(hass, "automation.unknown") is None
assert automation.devices_in_automation(hass, "automation.unknown") == []
assert automation.entities_in_automation(hass, "automation.unknown") == []
async def test_extraction_functions(hass: HomeAssistant) -> None: async def test_extraction_functions(hass: HomeAssistant) -> None:
"""Test extraction functions.""" """Test extraction functions."""
await async_setup_component(hass, "homeassistant", {}) await async_setup_component(hass, "homeassistant", {})
@ -1604,6 +1625,10 @@ async def test_extraction_functions(hass: HomeAssistant) -> None:
"entity_id": "light.bla", "entity_id": "light.bla",
"type": "turn_on", "type": "turn_on",
}, },
{
"service": "test.test",
"target": {"area_id": "area-in-both"},
},
], ],
}, },
{ {
@ -1635,7 +1660,7 @@ async def test_extraction_functions(hass: HomeAssistant) -> None:
{ {
"platform": "event", "platform": "event",
"event_type": "esphome.button_pressed", "event_type": "esphome.button_pressed",
"event_data": {"device_id": ["device-trigger-event"]}, "event_data": {"device_id": ["device-trigger-event2"]},
}, },
# device_id is not a string # device_id is not a string
{ {
@ -1676,6 +1701,55 @@ async def test_extraction_functions(hass: HomeAssistant) -> None:
}, },
], ],
}, },
{
"alias": "test3",
"trigger": [
{
"platform": "event",
"event_type": "esphome.button_pressed",
"event_data": {"area_id": "area-trigger-event"},
},
# area_id is a list of strings (not supported)
{
"platform": "event",
"event_type": "esphome.button_pressed",
"event_data": {"area_id": ["area-trigger-event2"]},
},
# area_id is not a string
{
"platform": "event",
"event_type": "esphome.button_pressed",
"event_data": {"area_id": 123},
},
],
"condition": {
"condition": "device",
"device_id": "condition-device",
"domain": "light",
"type": "is_on",
"entity_id": "light.bla",
},
"action": [
{
"service": "test.script",
"data": {"entity_id": "light.in_both"},
},
{
"condition": "state",
"entity_id": "sensor.condition",
"state": "100",
},
{"scene": "scene.hello"},
{
"service": "test.test",
"target": {"area_id": "area-in-both"},
},
{
"service": "test.test",
"target": {"area_id": "area-in-last"},
},
],
},
] ]
}, },
) )
@ -1683,6 +1757,7 @@ async def test_extraction_functions(hass: HomeAssistant) -> None:
assert set(automation.automations_with_entity(hass, "light.in_both")) == { assert set(automation.automations_with_entity(hass, "light.in_both")) == {
"automation.test1", "automation.test1",
"automation.test2", "automation.test2",
"automation.test3",
} }
assert set(automation.entities_in_automation(hass, "automation.test1")) == { assert set(automation.entities_in_automation(hass, "automation.test1")) == {
"calendar.trigger_calendar", "calendar.trigger_calendar",
@ -1707,6 +1782,15 @@ async def test_extraction_functions(hass: HomeAssistant) -> None:
"device-trigger-tag2", "device-trigger-tag2",
"device-trigger-tag3", "device-trigger-tag3",
} }
assert set(automation.automations_with_area(hass, "area-in-both")) == {
"automation.test1",
"automation.test3",
}
assert set(automation.areas_in_automation(hass, "automation.test3")) == {
"area-in-both",
"area-in-last",
}
assert automation.blueprint_in_automation(hass, "automation.test3") is None
async def test_logbook_humanify_automation_triggered_event(hass: HomeAssistant) -> None: async def test_logbook_humanify_automation_triggered_event(hass: HomeAssistant) -> None:
@ -1980,6 +2064,13 @@ async def test_blueprint_automation(hass: HomeAssistant, calls) -> None:
assert automation.entities_in_automation(hass, "automation.automation_0") == [ assert automation.entities_in_automation(hass, "automation.automation_0") == [
"light.kitchen" "light.kitchen"
] ]
assert (
automation.blueprint_in_automation(hass, "automation.automation_0")
== "test_event_service.yaml"
)
assert automation.automations_with_blueprint(hass, "test_event_service.yaml") == [
"automation.automation_0"
]
@pytest.mark.parametrize( @pytest.mark.parametrize(