def _resolve_entity(self, entity_id) -> None: """Resolve an entity.""" # Extra: Find automations and scripts that reference this entity. for entity in scene.scenes_with_entity(self.hass, entity_id): self._add_or_resolve("entity", entity) for entity in group.groups_with_entity(self.hass, entity_id): self._add_or_resolve("entity", entity) for entity in automation.automations_with_entity(self.hass, entity_id): self._add_or_resolve("entity", entity) for entity in script.scripts_with_entity(self.hass, entity_id): self._add_or_resolve("entity", entity) # Find devices entity_entry = self._entity_reg.async_get(entity_id) if entity_entry is not None: if entity_entry.device_id: self._add_or_resolve("device", entity_entry.device_id) if entity_entry.config_entry_id is not None: self._add_or_resolve("config_entry", entity_entry.config_entry_id) domain = split_entity_id(entity_id)[0] if domain in self.EXIST_AS_ENTITY: self._add_or_resolve(domain, entity_id)
async def test_extraction_functions(hass): """Test extraction functions.""" assert await async_setup_component( hass, DOMAIN, { DOMAIN: { "test1": { "sequence": [ { "service": "test.script", "data": {"entity_id": "light.in_both"}, }, { "service": "test.script", "data": {"entity_id": "light.in_first"}, }, {"domain": "light", "device_id": "device-in-both"}, ] }, "test2": { "sequence": [ { "service": "test.script", "data": {"entity_id": "light.in_both"}, }, { "condition": "state", "entity_id": "sensor.condition", "state": "100", }, {"scene": "scene.hello"}, {"domain": "light", "device_id": "device-in-both"}, {"domain": "light", "device_id": "device-in-last"}, ], }, } }, ) assert set(script.scripts_with_entity(hass, "light.in_both")) == { "script.test1", "script.test2", } assert set(script.entities_in_script(hass, "script.test1")) == { "light.in_both", "light.in_first", } assert set(script.scripts_with_device(hass, "device-in-both")) == { "script.test1", "script.test2", } assert set(script.devices_in_script(hass, "script.test2")) == { "device-in-both", "device-in-last", }