From dbcdc32f053711dccebd55c625748171866c1c40 Mon Sep 17 00:00:00 2001 From: Andrew Loe Date: Mon, 15 Apr 2019 14:24:20 -0700 Subject: [PATCH] Ensure Boolean configuration values are handled correctly. (#22810) --- homeassistant/components/zwave/__init__.py | 10 ++- tests/components/zwave/test_init.py | 84 +++++++++++++++------- 2 files changed, 67 insertions(+), 27 deletions(-) diff --git a/homeassistant/components/zwave/__init__.py b/homeassistant/components/zwave/__init__.py index 3240e389bb4..741c6f852a8 100644 --- a/homeassistant/components/zwave/__init__.py +++ b/homeassistant/components/zwave/__init__.py @@ -522,10 +522,16 @@ async def async_setup_entry(hass, config_entry): .values()): if value.index != param: continue - if value.type in [const.TYPE_LIST, const.TYPE_BOOL]: + if value.type == const.TYPE_BOOL: + value.data = int(selection == 'True') + _LOGGER.info("Setting config parameter %s on Node %s " + "with bool selection %s", param, node_id, + str(selection)) + return + if value.type == const.TYPE_LIST: value.data = str(selection) _LOGGER.info("Setting config parameter %s on Node %s " - "with list/bool selection %s", param, node_id, + "with list selection %s", param, node_id, str(selection)) return if value.type == const.TYPE_BUTTON: diff --git a/tests/components/zwave/test_init.py b/tests/components/zwave/test_init.py index f2f32aeb54c..7fc9f55cf03 100644 --- a/tests/components/zwave/test_init.py +++ b/tests/components/zwave/test_init.py @@ -1114,7 +1114,7 @@ class TestZWaveServices(unittest.TestCase): def test_set_config_parameter(self): """Test zwave set_config_parameter service.""" - value = MockValue( + value_byte = MockValue( index=12, command_class=const.COMMAND_CLASS_CONFIGURATION, type=const.TYPE_BYTE, @@ -1125,23 +1125,43 @@ class TestZWaveServices(unittest.TestCase): type=const.TYPE_LIST, data_items=['item1', 'item2', 'item3'], ) + value_button = MockValue( + index=14, + command_class=const.COMMAND_CLASS_CONFIGURATION, + type=const.TYPE_BUTTON, + ) value_list_int = MockValue( index=15, command_class=const.COMMAND_CLASS_CONFIGURATION, type=const.TYPE_LIST, data_items=['1', '2', '3'], ) - value_button = MockValue( - index=14, + value_bool = MockValue( + index=16, command_class=const.COMMAND_CLASS_CONFIGURATION, - type=const.TYPE_BUTTON, + type=const.TYPE_BOOL, ) node = MockNode(node_id=14) - node.get_values.return_value = {12: value, 13: value_list, - 14: value_button, - 15: value_list_int} + node.get_values.return_value = { + 12: value_byte, + 13: value_list, + 14: value_button, + 15: value_list_int, + 16: value_bool + } self.zwave_network.nodes = {14: node} + # Byte + self.hass.services.call('zwave', 'set_config_parameter', { + const.ATTR_NODE_ID: 14, + const.ATTR_CONFIG_PARAMETER: 12, + const.ATTR_CONFIG_VALUE: 7, + }) + self.hass.block_till_done() + + assert value_byte.data == 7 + + # List self.hass.services.call('zwave', 'set_config_parameter', { const.ATTR_NODE_ID: 14, const.ATTR_CONFIG_PARAMETER: 13, @@ -1151,24 +1171,7 @@ class TestZWaveServices(unittest.TestCase): assert value_list.data == 'item3' - self.hass.services.call('zwave', 'set_config_parameter', { - const.ATTR_NODE_ID: 14, - const.ATTR_CONFIG_PARAMETER: 15, - const.ATTR_CONFIG_VALUE: 3, - }) - self.hass.block_till_done() - - assert value_list_int.data == '3' - - self.hass.services.call('zwave', 'set_config_parameter', { - const.ATTR_NODE_ID: 14, - const.ATTR_CONFIG_PARAMETER: 12, - const.ATTR_CONFIG_VALUE: 7, - }) - self.hass.block_till_done() - - assert value.data == 7 - + # Button self.hass.services.call('zwave', 'set_config_parameter', { const.ATTR_NODE_ID: 14, const.ATTR_CONFIG_PARAMETER: 14, @@ -1179,6 +1182,37 @@ class TestZWaveServices(unittest.TestCase): assert self.zwave_network.manager.pressButton.called assert self.zwave_network.manager.releaseButton.called + # List of Ints + self.hass.services.call('zwave', 'set_config_parameter', { + const.ATTR_NODE_ID: 14, + const.ATTR_CONFIG_PARAMETER: 15, + const.ATTR_CONFIG_VALUE: 3, + }) + self.hass.block_till_done() + + assert value_list_int.data == '3' + + # Boolean Truthy + self.hass.services.call('zwave', 'set_config_parameter', { + const.ATTR_NODE_ID: 14, + const.ATTR_CONFIG_PARAMETER: 16, + const.ATTR_CONFIG_VALUE: 'True', + }) + self.hass.block_till_done() + + assert value_bool.data == 1 + + # Boolean Falsy + self.hass.services.call('zwave', 'set_config_parameter', { + const.ATTR_NODE_ID: 14, + const.ATTR_CONFIG_PARAMETER: 16, + const.ATTR_CONFIG_VALUE: 'False', + }) + self.hass.block_till_done() + + assert value_bool.data == 0 + + # Different Parameter Size self.hass.services.call('zwave', 'set_config_parameter', { const.ATTR_NODE_ID: 14, const.ATTR_CONFIG_PARAMETER: 19,