ZWave binary sensor tests (#6555)

* ZWave binary sensor tests

* Test fixes

* Improve coverage of features
This commit is contained in:
Adam Mills 2017-03-13 01:08:53 -04:00 committed by Paulus Schoutsen
parent 5183cb5903
commit 55d60a6a13
5 changed files with 111 additions and 10 deletions

View File

@ -116,7 +116,6 @@ omit =
homeassistant/components/*/zigbee.py
homeassistant/components/zwave/*
homeassistant/components/*/zwave.py
homeassistant/components/enocean.py
homeassistant/components/*/enocean.py
@ -171,12 +170,15 @@ omit =
homeassistant/components/climate/oem.py
homeassistant/components/climate/proliphix.py
homeassistant/components/climate/radiotherm.py
homeassistant/components/climate/zwave.py
homeassistant/components/config/zwave.py
homeassistant/components/cover/garadget.py
homeassistant/components/cover/homematic.py
homeassistant/components/cover/myq.py
homeassistant/components/cover/rpi_gpio.py
homeassistant/components/cover/scsgate.py
homeassistant/components/cover/wink.py
homeassistant/components/cover/zwave.py
homeassistant/components/device_tracker/actiontec.py
homeassistant/components/device_tracker/aruba.py
homeassistant/components/device_tracker/asuswrt.py
@ -229,8 +231,10 @@ omit =
homeassistant/components/light/yeelightsunflower.py
homeassistant/components/light/piglow.py
homeassistant/components/light/zengge.py
homeassistant/components/light/zwave.py
homeassistant/components/lirc.py
homeassistant/components/lock/nuki.py
homeassistant/components/lock/zwave.py
homeassistant/components/media_player/anthemav.py
homeassistant/components/media_player/apple_tv.py
homeassistant/components/media_player/aquostv.py
@ -398,6 +402,7 @@ 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
@ -420,6 +425,7 @@ omit =
homeassistant/components/switch/tplink.py
homeassistant/components/switch/transmission.py
homeassistant/components/switch/wake_on_lan.py
homeassistant/components/switch/zwave.py
homeassistant/components/telegram_webhooks.py
homeassistant/components/thingspeak.py
homeassistant/components/tts/amazon_polly.py

View File

@ -58,11 +58,6 @@ class ZWaveBinarySensor(BinarySensorDevice, zwave.ZWaveDeviceEntity):
"""Return the class of this sensor, from DEVICE_CLASSES."""
return self._sensor_type
@property
def should_poll(self):
"""No polling needed."""
return False
class ZWaveTriggerSensor(ZWaveBinarySensor):
"""Representation of a stateless sensor within Z-Wave."""

View File

@ -0,0 +1,96 @@
"""Test Z-Wave binary sensors."""
import asyncio
import datetime
from unittest.mock import patch
from homeassistant.components.zwave import const
from homeassistant.components.binary_sensor import zwave
from tests.mock.zwave import MockNode, MockValue, value_changed
def test_get_device_detects_none(mock_openzwave):
"""Test device is not returned."""
node = MockNode()
value = MockValue(data=False, node=node)
device = zwave.get_device(node=node, value=value, node_config={})
assert device is None
def test_get_device_detects_trigger_sensor(mock_openzwave):
"""Test device is a trigger sensor."""
node = MockNode(
manufacturer_id='013c', product_type='0002', product_id='0002')
value = MockValue(data=False, node=node)
device = zwave.get_device(node=node, value=value, node_config={})
assert isinstance(device, zwave.ZWaveTriggerSensor)
assert device.device_class == "motion"
def test_get_device_detects_workaround_sensor(mock_openzwave):
"""Test that workaround returns a binary sensor."""
node = MockNode(manufacturer_id='010f', product_type='0b00')
value = MockValue(data=False, node=node,
command_class=const.COMMAND_CLASS_SENSOR_ALARM)
device = zwave.get_device(node=node, value=value, node_config={})
assert isinstance(device, zwave.ZWaveBinarySensor)
def test_get_device_detects_sensor(mock_openzwave):
"""Test that device returns a binary sensor."""
node = MockNode()
value = MockValue(data=False, node=node,
command_class=const.COMMAND_CLASS_SENSOR_BINARY)
device = zwave.get_device(node=node, value=value, node_config={})
assert isinstance(device, zwave.ZWaveBinarySensor)
def test_binary_sensor_value_changed(mock_openzwave):
"""Test value changed for binary sensor."""
node = MockNode()
value = MockValue(data=False, node=node,
command_class=const.COMMAND_CLASS_SENSOR_BINARY)
device = zwave.get_device(node=node, value=value, node_config={})
assert not device.is_on
value.data = True
value_changed(value)
assert device.is_on
@asyncio.coroutine
def test_trigger_sensor_value_changed(hass, mock_openzwave):
"""Test value changed for trigger sensor."""
node = MockNode(
manufacturer_id='013c', product_type='0002', product_id='0002')
value = MockValue(data=False, node=node)
device = zwave.get_device(node=node, value=value, node_config={})
assert not device.is_on
value.data = True
yield from hass.loop.run_in_executor(None, value_changed, value)
yield from hass.async_block_till_done()
assert device.invalidate_after is None
device.hass = hass
value.data = True
yield from hass.loop.run_in_executor(None, value_changed, value)
yield from hass.async_block_till_done()
assert device.is_on
test_time = device.invalidate_after - datetime.timedelta(seconds=1)
with patch('homeassistant.util.dt.utcnow', return_value=test_time):
assert device.is_on
test_time = device.invalidate_after
with patch('homeassistant.util.dt.utcnow', return_value=test_time):
assert not device.is_on

View File

@ -10,7 +10,7 @@ def test_get_device_detects_dimmer(mock_openzwave):
node = MockNode()
value = MockValue(data=0, node=node)
device = zwave.get_device(node, value, {})
device = zwave.get_device(node=node, value=value, node_config={})
assert isinstance(device, zwave.ZwaveDimmer)
@ -19,7 +19,7 @@ def test_get_device_detects_colorlight(mock_openzwave):
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
device = zwave.get_device(node, value, {})
device = zwave.get_device(node=node, value=value, node_config={})
assert isinstance(device, zwave.ZwaveColorLight)
@ -27,7 +27,7 @@ def test_dimmer_turn_on(mock_openzwave):
"""Test turning on a dimmable Z-Wave light."""
node = MockNode()
value = MockValue(data=0, node=node)
device = zwave.get_device(node, value, {})
device = zwave.get_device(node=node, value=value, node_config={})
device.turn_on()
@ -51,7 +51,7 @@ def test_dimmer_value_changed(mock_openzwave):
"""Test value changed for dimmer lights."""
node = MockNode()
value = MockValue(data=0, node=node)
device = zwave.get_device(node, value, {})
device = zwave.get_device(node=node, value=value, node_config={})
assert not device.is_on

View File

@ -24,6 +24,7 @@ class MockNode(MagicMock):
name='Mock Node',
manufacturer_id='ABCD',
product_id='123',
product_type='678',
command_classes=None):
"""Initialize a Z-Wave mock node."""
super().__init__()
@ -31,6 +32,7 @@ class MockNode(MagicMock):
self.name = name
self.manufacturer_id = manufacturer_id
self.product_id = product_id
self.product_type = product_type
self._command_classes = command_classes or []
def has_command_class(self, command_class):
@ -53,6 +55,7 @@ class MockValue(MagicMock):
node=None,
instance=0,
index=0,
command_class=None,
value_id=None):
"""Initialize a Z-Wave mock value."""
super().__init__()
@ -61,6 +64,7 @@ class MockValue(MagicMock):
self.node = node
self.instance = instance
self.index = 0
self.command_class = command_class
if value_id is None:
MockValue._mock_value_id += 1
value_id = MockValue._mock_value_id