diff --git a/.coveragerc b/.coveragerc index 60aa27d7981..f56e071482c 100644 --- a/.coveragerc +++ b/.coveragerc @@ -399,7 +399,6 @@ omit = homeassistant/components/sensor/xbox_live.py homeassistant/components/sensor/yweather.py homeassistant/components/sensor/zamg.py - homeassistant/components/sensor/zwave.py homeassistant/components/switch/acer_projector.py homeassistant/components/switch/anel_pwrctrl.py homeassistant/components/switch/arest.py diff --git a/tests/components/sensor/test_zwave.py b/tests/components/sensor/test_zwave.py index f117814b8f5..b1cb3a90576 100644 --- a/tests/components/sensor/test_zwave.py +++ b/tests/components/sensor/test_zwave.py @@ -1,10 +1,22 @@ """Test Z-Wave sensor.""" from homeassistant.components.sensor import zwave from homeassistant.components.zwave import const +import homeassistant.const + from tests.mock.zwave import ( MockNode, MockValue, MockEntityValues, value_changed) +def test_get_device_detects_none(mock_openzwave): + """Test get_device returns None.""" + node = MockNode() + value = MockValue(data=0, node=node) + values = MockEntityValues(primary=value) + + device = zwave.get_device(node=node, values=values, node_config={}) + assert device is None + + def test_get_device_detects_sensor(mock_openzwave): """Test get_device returns a Z-Wave Sensor.""" node = MockNode(command_classes=[const.COMMAND_CLASS_BATTERY]) @@ -14,6 +26,7 @@ def test_get_device_detects_sensor(mock_openzwave): device = zwave.get_device(node=node, values=values, node_config={}) assert isinstance(device, zwave.ZWaveSensor) + assert device.force_update def test_get_device_detects_alarmsensor(mock_openzwave): @@ -38,7 +51,32 @@ def test_get_device_detects_multilevelsensor(mock_openzwave): assert isinstance(device, zwave.ZWaveMultilevelSensor) -def test_multilevelsensor_value_changed_temp_units(mock_openzwave): +def test_get_device_detects_multilevel_meter(mock_openzwave): + """Test get_device returns a Z-Wave multilevel sensor.""" + node = MockNode(command_classes=[const.COMMAND_CLASS_METER]) + value = MockValue(data=0, node=node, type=const.TYPE_DECIMAL) + values = MockEntityValues(primary=value) + + device = zwave.get_device(node=node, values=values, node_config={}) + assert isinstance(device, zwave.ZWaveMultilevelSensor) + + +def test_sensor_value_changed(mock_openzwave): + """Test value changed for Z-Wave sensor.""" + node = MockNode(command_classes=[const.COMMAND_CLASS_BATTERY]) + value = MockValue(data=12.34, command_class=const.COMMAND_CLASS_BATTERY, + node=node, units='%') + values = MockEntityValues(primary=value) + + device = zwave.get_device(node=node, values=values, node_config={}) + assert device.state == 12.34 + assert device.unit_of_measurement == '%' + value.data = 45.67 + value_changed(value) + assert device.state == 45.67 + + +def test_multilevelsensor_value_changed_temp_fahrenheit(mock_openzwave): """Test value changed for Z-Wave multilevel sensor for temperature.""" node = MockNode(command_classes=[const.COMMAND_CLASS_SENSOR_MULTILEVEL, const.COMMAND_CLASS_METER]) @@ -47,12 +85,27 @@ def test_multilevelsensor_value_changed_temp_units(mock_openzwave): device = zwave.get_device(node=node, values=values, node_config={}) assert device.state == 191.0 - assert value.units == 'F' + assert device.unit_of_measurement == homeassistant.const.TEMP_FAHRENHEIT value.data = 197.95555 value_changed(value) assert device.state == 198.0 +def test_multilevelsensor_value_changed_temp_celsius(mock_openzwave): + """Test value changed for Z-Wave multilevel sensor for temperature.""" + node = MockNode(command_classes=[const.COMMAND_CLASS_SENSOR_MULTILEVEL, + const.COMMAND_CLASS_METER]) + value = MockValue(data=38.85555, units='C', node=node) + values = MockEntityValues(primary=value) + + device = zwave.get_device(node=node, values=values, node_config={}) + assert device.state == 38.9 + assert device.unit_of_measurement == homeassistant.const.TEMP_CELSIUS + value.data = 37.95555 + value_changed(value) + assert device.state == 38.0 + + def test_multilevelsensor_value_changed_other_units(mock_openzwave): """Test value changed for Z-Wave multilevel sensor for other units.""" node = MockNode(command_classes=[const.COMMAND_CLASS_SENSOR_MULTILEVEL, @@ -62,7 +115,22 @@ def test_multilevelsensor_value_changed_other_units(mock_openzwave): device = zwave.get_device(node=node, values=values, node_config={}) assert device.state == 190.96 - assert value.units == 'kWh' + assert device.unit_of_measurement == 'kWh' value.data = 197.95555 value_changed(value) assert device.state == 197.96 + + +def test_multilevelsensor_value_changed_integer(mock_openzwave): + """Test value changed for Z-Wave multilevel sensor for other units.""" + node = MockNode(command_classes=[const.COMMAND_CLASS_SENSOR_MULTILEVEL, + const.COMMAND_CLASS_METER]) + value = MockValue(data=5, units='counts', node=node) + values = MockEntityValues(primary=value) + + device = zwave.get_device(node=node, values=values, node_config={}) + assert device.state == 5 + assert device.unit_of_measurement == 'counts' + value.data = 6 + value_changed(value) + assert device.state == 6 diff --git a/tests/mock/zwave.py b/tests/mock/zwave.py index 87465cc3bc1..62678dbafff 100644 --- a/tests/mock/zwave.py +++ b/tests/mock/zwave.py @@ -58,6 +58,7 @@ class MockValue(MagicMock): index=0, command_class=None, units=None, + type=None, value_id=None): """Initialize a Z-Wave mock value.""" super().__init__() @@ -69,6 +70,7 @@ class MockValue(MagicMock): self.index = 0 self.command_class = command_class self.units = units + self.type = type if value_id is None: MockValue._mock_value_id += 1 value_id = MockValue._mock_value_id