From 3c41c0c46e6f9d8d3fdff91507f0875eae2d4a0e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 9 Mar 2018 19:38:33 -0800 Subject: [PATCH] Add support for input boolean to Google Assistant (#13030) --- .../components/google_assistant/trait.py | 2 + .../components/google_assistant/test_trait.py | 40 ++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/google_assistant/trait.py b/homeassistant/components/google_assistant/trait.py index dd7b761e782..c78d70e21e6 100644 --- a/homeassistant/components/google_assistant/trait.py +++ b/homeassistant/components/google_assistant/trait.py @@ -5,6 +5,7 @@ from homeassistant.components import ( cover, group, fan, + input_boolean, media_player, light, scene, @@ -182,6 +183,7 @@ class OnOffTrait(_Trait): """Test if state is supported.""" return domain in ( group.DOMAIN, + input_boolean.DOMAIN, switch.DOMAIN, fan.DOMAIN, light.DOMAIN, diff --git a/tests/components/google_assistant/test_trait.py b/tests/components/google_assistant/test_trait.py index 90dd5d33581..4ffb273662e 100644 --- a/tests/components/google_assistant/test_trait.py +++ b/tests/components/google_assistant/test_trait.py @@ -9,8 +9,9 @@ from homeassistant.components import ( climate, cover, fan, - media_player, + input_boolean, light, + media_player, scene, script, switch, @@ -138,6 +139,43 @@ async def test_onoff_group(hass): } +async def test_onoff_input_boolean(hass): + """Test OnOff trait support for input_boolean domain.""" + assert trait.OnOffTrait.supported(media_player.DOMAIN, 0) + + trt_on = trait.OnOffTrait(State('input_boolean.bla', STATE_ON)) + + assert trt_on.sync_attributes() == {} + + assert trt_on.query_attributes() == { + 'on': True + } + + trt_off = trait.OnOffTrait(State('input_boolean.bla', STATE_OFF)) + assert trt_off.query_attributes() == { + 'on': False + } + + on_calls = async_mock_service(hass, input_boolean.DOMAIN, SERVICE_TURN_ON) + await trt_on.execute(hass, trait.COMMAND_ONOFF, { + 'on': True + }) + assert len(on_calls) == 1 + assert on_calls[0].data == { + ATTR_ENTITY_ID: 'input_boolean.bla', + } + + off_calls = async_mock_service(hass, input_boolean.DOMAIN, + SERVICE_TURN_OFF) + await trt_on.execute(hass, trait.COMMAND_ONOFF, { + 'on': False + }) + assert len(off_calls) == 1 + assert off_calls[0].data == { + ATTR_ENTITY_ID: 'input_boolean.bla', + } + + async def test_onoff_switch(hass): """Test OnOff trait support for switch domain.""" assert trait.OnOffTrait.supported(media_player.DOMAIN, 0)