Validate generated device actions (#27262)

* Validate generated actions

* Use hass.services.async_call instead of service.async_call_from_config
This commit is contained in:
Erik Montnemery 2019-10-08 19:06:17 +02:00 committed by Paulus Schoutsen
parent 1a9d07dbdc
commit 0ba4ee1398
3 changed files with 12 additions and 16 deletions

View File

@ -17,6 +17,7 @@ from homeassistant.components.device_automation.const import (
CONF_TURNED_ON, CONF_TURNED_ON,
) )
from homeassistant.const import ( from homeassistant.const import (
ATTR_ENTITY_ID,
CONF_CONDITION, CONF_CONDITION,
CONF_ENTITY_ID, CONF_ENTITY_ID,
CONF_FOR, CONF_FOR,
@ -24,7 +25,7 @@ from homeassistant.const import (
CONF_TYPE, CONF_TYPE,
) )
from homeassistant.helpers.entity_registry import async_entries_for_device from homeassistant.helpers.entity_registry import async_entries_for_device
from homeassistant.helpers import condition, config_validation as cv, service from homeassistant.helpers import condition, config_validation as cv
from homeassistant.helpers.typing import ConfigType, TemplateVarsType from homeassistant.helpers.typing import ConfigType, TemplateVarsType
from . import TRIGGER_BASE_SCHEMA from . import TRIGGER_BASE_SCHEMA
@ -112,13 +113,10 @@ async def async_call_action_from_config(
else: else:
action = "toggle" action = "toggle"
service_action = { service_data = {ATTR_ENTITY_ID: config[CONF_ENTITY_ID]}
service.CONF_SERVICE: "{}.{}".format(domain, action),
CONF_ENTITY_ID: config[CONF_ENTITY_ID],
}
await service.async_call_from_config( await hass.services.async_call(
hass, service_action, blocking=True, variables=variables, context=context domain, action, service_data, blocking=True, context=context
) )

View File

@ -5,7 +5,7 @@ import voluptuous as vol
from homeassistant.const import CONF_DEVICE_ID, CONF_DOMAIN, CONF_TYPE from homeassistant.const import CONF_DEVICE_ID, CONF_DOMAIN, CONF_TYPE
from homeassistant.core import Context, HomeAssistant from homeassistant.core import Context, HomeAssistant
from homeassistant.helpers import config_validation as cv, service from homeassistant.helpers import config_validation as cv
from homeassistant.helpers.typing import ConfigType, TemplateVarsType from homeassistant.helpers.typing import ConfigType, TemplateVarsType
from . import DOMAIN from . import DOMAIN
@ -78,13 +78,10 @@ async def _execute_service_based_action(
service_name = SERVICE_NAMES[action_type] service_name = SERVICE_NAMES[action_type]
zha_device = await async_get_zha_device(hass, config[CONF_DEVICE_ID]) zha_device = await async_get_zha_device(hass, config[CONF_DEVICE_ID])
service_action = { service_data = {ATTR_IEEE: str(zha_device.ieee)}
service.CONF_SERVICE: "{}.{}".format(DOMAIN, service_name),
ATTR_DATA: {ATTR_IEEE: str(zha_device.ieee)},
}
await service.async_call_from_config( await hass.services.async_call(
hass, service_action, blocking=True, variables=variables, context=context DOMAIN, service_name, service_data, blocking=True, context=context
) )

View File

@ -8,6 +8,7 @@ from homeassistant.helpers import device_registry
from tests.common import ( from tests.common import (
MockConfigEntry, MockConfigEntry,
assert_lists_same,
async_mock_service, async_mock_service,
mock_device_registry, mock_device_registry,
mock_registry, mock_registry,
@ -28,7 +29,7 @@ def entity_reg(hass):
async def test_get_actions(hass, device_reg, entity_reg): async def test_get_actions(hass, device_reg, entity_reg):
"""Test we get the expected actions from a switch.""" """Test we get the expected actions from a NEW_DOMAIN."""
config_entry = MockConfigEntry(domain="test", data={}) config_entry = MockConfigEntry(domain="test", data={})
config_entry.add_to_hass(hass) config_entry.add_to_hass(hass)
device_entry = device_reg.async_get_or_create( device_entry = device_reg.async_get_or_create(
@ -51,7 +52,7 @@ async def test_get_actions(hass, device_reg, entity_reg):
}, },
] ]
actions = await async_get_device_automations(hass, "action", device_entry.id) actions = await async_get_device_automations(hass, "action", device_entry.id)
assert actions == expected_actions assert_lists_same(actions, expected_actions)
async def test_action(hass): async def test_action(hass):