Implement google_assistant ModesTrait for input_select (#36313)
This commit is contained in:
parent
a333417ddf
commit
47706dac1a
3 changed files with 121 additions and 14 deletions
|
@ -11,6 +11,7 @@ from homeassistant.components import (
|
|||
fan,
|
||||
group,
|
||||
input_boolean,
|
||||
input_select,
|
||||
light,
|
||||
lock,
|
||||
media_player,
|
||||
|
@ -1267,8 +1268,8 @@ async def test_fan_speed(hass):
|
|||
assert calls[0].data == {"entity_id": "fan.living_room_fan", "speed": "medium"}
|
||||
|
||||
|
||||
async def test_modes(hass):
|
||||
"""Test Mode trait."""
|
||||
async def test_modes_media_player(hass):
|
||||
"""Test Media Player Mode trait."""
|
||||
assert helpers.get_google_type(media_player.DOMAIN, None) is not None
|
||||
assert trait.ModesTrait.supported(
|
||||
media_player.DOMAIN, media_player.SUPPORT_SELECT_SOURCE, None
|
||||
|
@ -1351,6 +1352,72 @@ async def test_modes(hass):
|
|||
assert calls[0].data == {"entity_id": "media_player.living_room", "source": "media"}
|
||||
|
||||
|
||||
async def test_modes_input_select(hass):
|
||||
"""Test Input Select Mode trait."""
|
||||
assert helpers.get_google_type(input_select.DOMAIN, None) is not None
|
||||
assert trait.ModesTrait.supported(input_select.DOMAIN, None, None)
|
||||
|
||||
trt = trait.ModesTrait(
|
||||
hass,
|
||||
State(
|
||||
"input_select.bla",
|
||||
"abc",
|
||||
attributes={input_select.ATTR_OPTIONS: ["abc", "123", "xyz"]},
|
||||
),
|
||||
BASIC_CONFIG,
|
||||
)
|
||||
|
||||
attribs = trt.sync_attributes()
|
||||
assert attribs == {
|
||||
"availableModes": [
|
||||
{
|
||||
"name": "option",
|
||||
"name_values": [
|
||||
{
|
||||
"name_synonym": ["option", "setting", "mode", "value"],
|
||||
"lang": "en",
|
||||
}
|
||||
],
|
||||
"settings": [
|
||||
{
|
||||
"setting_name": "abc",
|
||||
"setting_values": [{"setting_synonym": ["abc"], "lang": "en"}],
|
||||
},
|
||||
{
|
||||
"setting_name": "123",
|
||||
"setting_values": [{"setting_synonym": ["123"], "lang": "en"}],
|
||||
},
|
||||
{
|
||||
"setting_name": "xyz",
|
||||
"setting_values": [{"setting_synonym": ["xyz"], "lang": "en"}],
|
||||
},
|
||||
],
|
||||
"ordered": False,
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
assert trt.query_attributes() == {
|
||||
"currentModeSettings": {"option": "abc"},
|
||||
"on": True,
|
||||
"online": True,
|
||||
}
|
||||
|
||||
assert trt.can_execute(
|
||||
trait.COMMAND_MODES, params={"updateModeSettings": {"option": "xyz"}},
|
||||
)
|
||||
|
||||
calls = async_mock_service(
|
||||
hass, input_select.DOMAIN, input_select.SERVICE_SELECT_OPTION
|
||||
)
|
||||
await trt.execute(
|
||||
trait.COMMAND_MODES, BASIC_DATA, {"updateModeSettings": {"option": "xyz"}}, {},
|
||||
)
|
||||
|
||||
assert len(calls) == 1
|
||||
assert calls[0].data == {"entity_id": "input_select.bla", "option": "xyz"}
|
||||
|
||||
|
||||
async def test_sound_modes(hass):
|
||||
"""Test Mode trait."""
|
||||
assert helpers.get_google_type(media_player.DOMAIN, None) is not None
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue