mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 16:57:53 +00:00
ZWave binary sensor tests (#6555)
* ZWave binary sensor tests * Test fixes * Improve coverage of features
This commit is contained in:
parent
5183cb5903
commit
55d60a6a13
@ -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
|
||||
|
@ -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."""
|
||||
|
96
tests/components/binary_sensor/test_zwave.py
Normal file
96
tests/components/binary_sensor/test_zwave.py
Normal 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
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user