mirror of
https://github.com/home-assistant/core.git
synced 2025-07-27 23:27:37 +00:00
Add raw service data to event (#19163)
This commit is contained in:
parent
3cf8610cb3
commit
59581786d3
@ -1098,9 +1098,11 @@ class ServiceRegistry:
|
|||||||
raise ServiceNotFound(domain, service) from None
|
raise ServiceNotFound(domain, service) from None
|
||||||
|
|
||||||
if handler.schema:
|
if handler.schema:
|
||||||
service_data = handler.schema(service_data)
|
processed_data = handler.schema(service_data)
|
||||||
|
else:
|
||||||
|
processed_data = service_data
|
||||||
|
|
||||||
service_call = ServiceCall(domain, service, service_data, context)
|
service_call = ServiceCall(domain, service, processed_data, context)
|
||||||
|
|
||||||
self._hass.bus.async_fire(EVENT_CALL_SERVICE, {
|
self._hass.bus.async_fire(EVENT_CALL_SERVICE, {
|
||||||
ATTR_DOMAIN: domain.lower(),
|
ATTR_DOMAIN: domain.lower(),
|
||||||
|
@ -8,6 +8,7 @@ from unittest.mock import patch, MagicMock
|
|||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from tempfile import TemporaryDirectory
|
from tempfile import TemporaryDirectory
|
||||||
|
|
||||||
|
import voluptuous as vol
|
||||||
import pytz
|
import pytz
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
@ -21,7 +22,7 @@ from homeassistant.const import (
|
|||||||
__version__, EVENT_STATE_CHANGED, ATTR_FRIENDLY_NAME, CONF_UNIT_SYSTEM,
|
__version__, EVENT_STATE_CHANGED, ATTR_FRIENDLY_NAME, CONF_UNIT_SYSTEM,
|
||||||
ATTR_NOW, EVENT_TIME_CHANGED, EVENT_TIMER_OUT_OF_SYNC, ATTR_SECONDS,
|
ATTR_NOW, EVENT_TIME_CHANGED, EVENT_TIMER_OUT_OF_SYNC, ATTR_SECONDS,
|
||||||
EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_CLOSE,
|
EVENT_HOMEASSISTANT_STOP, EVENT_HOMEASSISTANT_CLOSE,
|
||||||
EVENT_SERVICE_REGISTERED, EVENT_SERVICE_REMOVED)
|
EVENT_SERVICE_REGISTERED, EVENT_SERVICE_REMOVED, EVENT_CALL_SERVICE)
|
||||||
|
|
||||||
from tests.common import get_test_home_assistant, async_mock_service
|
from tests.common import get_test_home_assistant, async_mock_service
|
||||||
|
|
||||||
@ -1000,3 +1001,27 @@ async def test_service_executed_with_subservices(hass):
|
|||||||
assert len(calls) == 4
|
assert len(calls) == 4
|
||||||
assert [call.service for call in calls] == [
|
assert [call.service for call in calls] == [
|
||||||
'outer', 'inner', 'inner', 'outer']
|
'outer', 'inner', 'inner', 'outer']
|
||||||
|
|
||||||
|
|
||||||
|
async def test_service_call_event_contains_original_data(hass):
|
||||||
|
"""Test that service call event contains original data."""
|
||||||
|
events = []
|
||||||
|
|
||||||
|
@ha.callback
|
||||||
|
def callback(event):
|
||||||
|
events.append(event)
|
||||||
|
|
||||||
|
hass.bus.async_listen(EVENT_CALL_SERVICE, callback)
|
||||||
|
|
||||||
|
calls = async_mock_service(hass, 'test', 'service', vol.Schema({
|
||||||
|
'number': vol.Coerce(int)
|
||||||
|
}))
|
||||||
|
|
||||||
|
await hass.services.async_call('test', 'service', {
|
||||||
|
'number': '23'
|
||||||
|
}, blocking=True)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
assert len(events) == 1
|
||||||
|
assert events[0].data['service_data']['number'] == '23'
|
||||||
|
assert len(calls) == 1
|
||||||
|
assert calls[0].data['number'] == 23
|
||||||
|
Loading…
x
Reference in New Issue
Block a user