1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-24 21:06:19 +00:00

Fire events when Google Assistant commands come in #15139 (#20204)

This commit is contained in:
Penny Wood
2019-02-28 03:33:34 +08:00
committed by Paulus Schoutsen
parent 9b3a3fc1ac
commit b87eb9d79e
4 changed files with 134 additions and 9 deletions

View File

@@ -7,7 +7,8 @@ from homeassistant.components.climate.const import (
ATTR_MIN_TEMP, ATTR_MAX_TEMP, STATE_HEAT, SUPPORT_OPERATION_MODE
)
from homeassistant.components.google_assistant import (
const, trait, helpers, smart_home as sh)
const, trait, helpers, smart_home as sh,
EVENT_COMMAND_RECEIVED, EVENT_QUERY_RECEIVED, EVENT_SYNC_RECEIVED)
from homeassistant.components.light.demo import DemoLight
@@ -48,6 +49,9 @@ async def test_sync_message(hass):
}
)
events = []
hass.bus.async_listen(EVENT_SYNC_RECEIVED, events.append)
result = await sh.async_handle_message(hass, config, {
"requestId": REQ_ID,
"inputs": [{
@@ -85,6 +89,13 @@ async def test_sync_message(hass):
}]
}
}
await hass.async_block_till_done()
assert len(events) == 1
assert events[0].event_type == EVENT_SYNC_RECEIVED
assert events[0].data == {
'request_id': REQ_ID,
}
async def test_query_message(hass):
@@ -109,6 +120,9 @@ async def test_query_message(hass):
light2.entity_id = 'light.another_light'
await light2.async_update_ha_state()
events = []
hass.bus.async_listen(EVENT_QUERY_RECEIVED, events.append)
result = await sh.async_handle_message(hass, BASIC_CONFIG, {
"requestId": REQ_ID,
"inputs": [{
@@ -149,12 +163,33 @@ async def test_query_message(hass):
}
}
assert len(events) == 3
assert events[0].event_type == EVENT_QUERY_RECEIVED
assert events[0].data == {
'request_id': REQ_ID,
'entity_id': 'light.demo_light'
}
assert events[1].event_type == EVENT_QUERY_RECEIVED
assert events[1].data == {
'request_id': REQ_ID,
'entity_id': 'light.another_light'
}
assert events[2].event_type == EVENT_QUERY_RECEIVED
assert events[2].data == {
'request_id': REQ_ID,
'entity_id': 'light.non_existing'
}
async def test_execute(hass):
"""Test an execute command."""
await async_setup_component(hass, 'light', {
'light': {'platform': 'demo'}
})
events = []
hass.bus.async_listen(EVENT_COMMAND_RECEIVED, events.append)
await hass.services.async_call(
'light', 'turn_off', {'entity_id': 'light.ceiling_lights'},
blocking=True)
@@ -209,6 +244,52 @@ async def test_execute(hass):
}
}
assert len(events) == 4
assert events[0].event_type == EVENT_COMMAND_RECEIVED
assert events[0].data == {
'request_id': REQ_ID,
'entity_id': 'light.non_existing',
'execution': {
'command': 'action.devices.commands.OnOff',
'params': {
'on': True
}
}
}
assert events[1].event_type == EVENT_COMMAND_RECEIVED
assert events[1].data == {
'request_id': REQ_ID,
'entity_id': 'light.non_existing',
'execution': {
'command': 'action.devices.commands.BrightnessAbsolute',
'params': {
'brightness': 20
}
}
}
assert events[2].event_type == EVENT_COMMAND_RECEIVED
assert events[2].data == {
'request_id': REQ_ID,
'entity_id': 'light.ceiling_lights',
'execution': {
'command': 'action.devices.commands.OnOff',
'params': {
'on': True
}
}
}
assert events[3].event_type == EVENT_COMMAND_RECEIVED
assert events[3].data == {
'request_id': REQ_ID,
'entity_id': 'light.ceiling_lights',
'execution': {
'command': 'action.devices.commands.BrightnessAbsolute',
'params': {
'brightness': 20
}
}
}
async def test_raising_error_trait(hass):
"""Test raising an error while executing a trait command."""
@@ -218,6 +299,11 @@ async def test_raising_error_trait(hass):
ATTR_SUPPORTED_FEATURES: SUPPORT_OPERATION_MODE,
ATTR_UNIT_OF_MEASUREMENT: TEMP_CELSIUS,
})
events = []
hass.bus.async_listen(EVENT_COMMAND_RECEIVED, events.append)
await hass.async_block_till_done()
result = await sh.async_handle_message(hass, BASIC_CONFIG, {
"requestId": REQ_ID,
"inputs": [{
@@ -250,6 +336,19 @@ async def test_raising_error_trait(hass):
}
}
assert len(events) == 1
assert events[0].event_type == EVENT_COMMAND_RECEIVED
assert events[0].data == {
'request_id': REQ_ID,
'entity_id': 'climate.bla',
'execution': {
'command': 'action.devices.commands.ThermostatTemperatureSetpoint',
'params': {
'thermostatTemperatureSetpoint': 10
}
}
}
def test_serialize_input_boolean():
"""Test serializing an input boolean entity."""