New Events and Context Fixes (#18765)
* Add new events for automation trigger and script run, fix context for image processing, add tests to ensure same context * remove custom logbook entry for automation and add new automation event to logbook * code review updates
This commit is contained in:
parent
8e9c73eb18
commit
b900005d1e
8 changed files with 214 additions and 19 deletions
|
@ -1,15 +1,16 @@
|
|||
"""The tests for the Script component."""
|
||||
# pylint: disable=protected-access
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
from unittest.mock import patch, Mock
|
||||
|
||||
from homeassistant.components import script
|
||||
from homeassistant.components.script import DOMAIN
|
||||
from homeassistant.const import (
|
||||
ATTR_ENTITY_ID, SERVICE_RELOAD, SERVICE_TOGGLE, SERVICE_TURN_OFF)
|
||||
ATTR_ENTITY_ID, ATTR_NAME, SERVICE_RELOAD, SERVICE_TOGGLE,
|
||||
SERVICE_TURN_OFF, SERVICE_TURN_ON, EVENT_SCRIPT_STARTED)
|
||||
from homeassistant.core import Context, callback, split_entity_id
|
||||
from homeassistant.loader import bind_hass
|
||||
from homeassistant.setup import setup_component
|
||||
from homeassistant.setup import setup_component, async_setup_component
|
||||
|
||||
from tests.common import get_test_home_assistant
|
||||
|
||||
|
@ -254,3 +255,48 @@ class TestScriptComponent(unittest.TestCase):
|
|||
|
||||
assert self.hass.states.get("script.test2") is not None
|
||||
assert self.hass.services.has_service(script.DOMAIN, 'test2')
|
||||
|
||||
|
||||
async def test_shared_context(hass):
|
||||
"""Test that the shared context is passed down the chain."""
|
||||
event = 'test_event'
|
||||
context = Context()
|
||||
|
||||
event_mock = Mock()
|
||||
run_mock = Mock()
|
||||
|
||||
hass.bus.async_listen(event, event_mock)
|
||||
hass.bus.async_listen(EVENT_SCRIPT_STARTED, run_mock)
|
||||
|
||||
assert await async_setup_component(hass, 'script', {
|
||||
'script': {
|
||||
'test': {
|
||||
'sequence': [
|
||||
{'event': event}
|
||||
]
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
await hass.services.async_call(DOMAIN, SERVICE_TURN_ON,
|
||||
{ATTR_ENTITY_ID: ENTITY_ID},
|
||||
context=context)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert event_mock.call_count == 1
|
||||
assert run_mock.call_count == 1
|
||||
|
||||
args, kwargs = run_mock.call_args
|
||||
assert args[0].context == context
|
||||
# Ensure event data has all attributes set
|
||||
assert args[0].data.get(ATTR_NAME) == 'test'
|
||||
assert args[0].data.get(ATTR_ENTITY_ID) == 'script.test'
|
||||
|
||||
# Ensure context carries through the event
|
||||
args, kwargs = event_mock.call_args
|
||||
assert args[0].context == context
|
||||
|
||||
# Ensure the script state shares the same context
|
||||
state = hass.states.get('script.test')
|
||||
assert state is not None
|
||||
assert state.context == context
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue