Google assistant enable fan speed controls (#18373)
* Initial commit of Traits changes. * Initial commit of tests chagnes for added FanSpeed trait. * pylint fixes. * Default reversible to false * Ensure reversible returns True/False. * Fix FanSpeed trait name and fix order. * Add remaining checks to FanSpeed trait Test. * Remove un-needed blank lines at EOF. * Update homeassistant/components/google_assistant/trait.py Co-Authored-By: marchingphoenix <eanagley@gmail.com> * use fan.SPEED_* constants as keys to speed_synonyms dict. convert True if() to bool() for reversible assignment. * use fan.SPEED_OFF constant of 'on' check.
This commit is contained in:
parent
5129a48750
commit
ddeeba20b9
3 changed files with 170 additions and 9 deletions
|
@ -1,10 +1,6 @@
|
|||
"""Tests for the Google Assistant traits."""
|
||||
import pytest
|
||||
|
||||
from homeassistant.const import (
|
||||
STATE_ON, STATE_OFF, ATTR_ENTITY_ID, SERVICE_TURN_ON, SERVICE_TURN_OFF,
|
||||
TEMP_CELSIUS, TEMP_FAHRENHEIT, ATTR_SUPPORTED_FEATURES)
|
||||
from homeassistant.core import State, DOMAIN as HA_DOMAIN
|
||||
from homeassistant.components import (
|
||||
climate,
|
||||
cover,
|
||||
|
@ -20,8 +16,11 @@ from homeassistant.components import (
|
|||
group,
|
||||
)
|
||||
from homeassistant.components.google_assistant import trait, helpers, const
|
||||
from homeassistant.const import (
|
||||
STATE_ON, STATE_OFF, ATTR_ENTITY_ID, SERVICE_TURN_ON, SERVICE_TURN_OFF,
|
||||
TEMP_CELSIUS, TEMP_FAHRENHEIT, ATTR_SUPPORTED_FEATURES)
|
||||
from homeassistant.core import State, DOMAIN as HA_DOMAIN
|
||||
from homeassistant.util import color
|
||||
|
||||
from tests.common import async_mock_service
|
||||
|
||||
BASIC_CONFIG = helpers.Config(
|
||||
|
@ -795,3 +794,84 @@ async def test_lock_unlock_unlock(hass):
|
|||
assert calls[0].data == {
|
||||
ATTR_ENTITY_ID: 'lock.front_door'
|
||||
}
|
||||
|
||||
|
||||
async def test_fan_speed(hass):
|
||||
"""Test FanSpeed trait speed control support for fan domain."""
|
||||
assert trait.FanSpeedTrait.supported(fan.DOMAIN, fan.SUPPORT_SET_SPEED)
|
||||
|
||||
trt = trait.FanSpeedTrait(
|
||||
hass, State(
|
||||
'fan.living_room_fan', fan.SPEED_HIGH, attributes={
|
||||
'speed_list': [
|
||||
fan.SPEED_OFF, fan.SPEED_LOW, fan.SPEED_MEDIUM,
|
||||
fan.SPEED_HIGH
|
||||
],
|
||||
'speed': 'low'
|
||||
}), BASIC_CONFIG)
|
||||
|
||||
assert trt.sync_attributes() == {
|
||||
'availableFanSpeeds': {
|
||||
'ordered': True,
|
||||
'speeds': [
|
||||
{
|
||||
'speed_name': 'off',
|
||||
'speed_values': [
|
||||
{
|
||||
'speed_synonym': ['stop', 'off'],
|
||||
'lang': 'en'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
'speed_name': 'low',
|
||||
'speed_values': [
|
||||
{
|
||||
'speed_synonym': [
|
||||
'slow', 'low', 'slowest', 'lowest'],
|
||||
'lang': 'en'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
'speed_name': 'medium',
|
||||
'speed_values': [
|
||||
{
|
||||
'speed_synonym': ['medium', 'mid', 'middle'],
|
||||
'lang': 'en'
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
'speed_name': 'high',
|
||||
'speed_values': [
|
||||
{
|
||||
'speed_synonym': [
|
||||
'high', 'max', 'fast', 'highest', 'fastest',
|
||||
'maximum'],
|
||||
'lang': 'en'
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
'reversible': False
|
||||
}
|
||||
|
||||
assert trt.query_attributes() == {
|
||||
'currentFanSpeedSetting': 'low',
|
||||
'on': True,
|
||||
'online': True
|
||||
}
|
||||
|
||||
assert trt.can_execute(
|
||||
trait.COMMAND_FANSPEED, params={'fanSpeed': 'medium'})
|
||||
|
||||
calls = async_mock_service(hass, fan.DOMAIN, fan.SERVICE_SET_SPEED)
|
||||
await trt.execute(trait.COMMAND_FANSPEED, params={'fanSpeed': 'medium'})
|
||||
|
||||
assert len(calls) == 1
|
||||
assert calls[0].data == {
|
||||
'entity_id': 'fan.living_room_fan',
|
||||
'speed': 'medium'
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue