mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +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/*/zigbee.py
|
||||||
|
|
||||||
homeassistant/components/zwave/*
|
homeassistant/components/zwave/*
|
||||||
homeassistant/components/*/zwave.py
|
|
||||||
|
|
||||||
homeassistant/components/enocean.py
|
homeassistant/components/enocean.py
|
||||||
homeassistant/components/*/enocean.py
|
homeassistant/components/*/enocean.py
|
||||||
@ -171,12 +170,15 @@ omit =
|
|||||||
homeassistant/components/climate/oem.py
|
homeassistant/components/climate/oem.py
|
||||||
homeassistant/components/climate/proliphix.py
|
homeassistant/components/climate/proliphix.py
|
||||||
homeassistant/components/climate/radiotherm.py
|
homeassistant/components/climate/radiotherm.py
|
||||||
|
homeassistant/components/climate/zwave.py
|
||||||
|
homeassistant/components/config/zwave.py
|
||||||
homeassistant/components/cover/garadget.py
|
homeassistant/components/cover/garadget.py
|
||||||
homeassistant/components/cover/homematic.py
|
homeassistant/components/cover/homematic.py
|
||||||
homeassistant/components/cover/myq.py
|
homeassistant/components/cover/myq.py
|
||||||
homeassistant/components/cover/rpi_gpio.py
|
homeassistant/components/cover/rpi_gpio.py
|
||||||
homeassistant/components/cover/scsgate.py
|
homeassistant/components/cover/scsgate.py
|
||||||
homeassistant/components/cover/wink.py
|
homeassistant/components/cover/wink.py
|
||||||
|
homeassistant/components/cover/zwave.py
|
||||||
homeassistant/components/device_tracker/actiontec.py
|
homeassistant/components/device_tracker/actiontec.py
|
||||||
homeassistant/components/device_tracker/aruba.py
|
homeassistant/components/device_tracker/aruba.py
|
||||||
homeassistant/components/device_tracker/asuswrt.py
|
homeassistant/components/device_tracker/asuswrt.py
|
||||||
@ -229,8 +231,10 @@ omit =
|
|||||||
homeassistant/components/light/yeelightsunflower.py
|
homeassistant/components/light/yeelightsunflower.py
|
||||||
homeassistant/components/light/piglow.py
|
homeassistant/components/light/piglow.py
|
||||||
homeassistant/components/light/zengge.py
|
homeassistant/components/light/zengge.py
|
||||||
|
homeassistant/components/light/zwave.py
|
||||||
homeassistant/components/lirc.py
|
homeassistant/components/lirc.py
|
||||||
homeassistant/components/lock/nuki.py
|
homeassistant/components/lock/nuki.py
|
||||||
|
homeassistant/components/lock/zwave.py
|
||||||
homeassistant/components/media_player/anthemav.py
|
homeassistant/components/media_player/anthemav.py
|
||||||
homeassistant/components/media_player/apple_tv.py
|
homeassistant/components/media_player/apple_tv.py
|
||||||
homeassistant/components/media_player/aquostv.py
|
homeassistant/components/media_player/aquostv.py
|
||||||
@ -398,6 +402,7 @@ omit =
|
|||||||
homeassistant/components/sensor/xbox_live.py
|
homeassistant/components/sensor/xbox_live.py
|
||||||
homeassistant/components/sensor/yweather.py
|
homeassistant/components/sensor/yweather.py
|
||||||
homeassistant/components/sensor/zamg.py
|
homeassistant/components/sensor/zamg.py
|
||||||
|
homeassistant/components/sensor/zwave.py
|
||||||
homeassistant/components/switch/acer_projector.py
|
homeassistant/components/switch/acer_projector.py
|
||||||
homeassistant/components/switch/anel_pwrctrl.py
|
homeassistant/components/switch/anel_pwrctrl.py
|
||||||
homeassistant/components/switch/arest.py
|
homeassistant/components/switch/arest.py
|
||||||
@ -420,6 +425,7 @@ omit =
|
|||||||
homeassistant/components/switch/tplink.py
|
homeassistant/components/switch/tplink.py
|
||||||
homeassistant/components/switch/transmission.py
|
homeassistant/components/switch/transmission.py
|
||||||
homeassistant/components/switch/wake_on_lan.py
|
homeassistant/components/switch/wake_on_lan.py
|
||||||
|
homeassistant/components/switch/zwave.py
|
||||||
homeassistant/components/telegram_webhooks.py
|
homeassistant/components/telegram_webhooks.py
|
||||||
homeassistant/components/thingspeak.py
|
homeassistant/components/thingspeak.py
|
||||||
homeassistant/components/tts/amazon_polly.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 the class of this sensor, from DEVICE_CLASSES."""
|
||||||
return self._sensor_type
|
return self._sensor_type
|
||||||
|
|
||||||
@property
|
|
||||||
def should_poll(self):
|
|
||||||
"""No polling needed."""
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
class ZWaveTriggerSensor(ZWaveBinarySensor):
|
class ZWaveTriggerSensor(ZWaveBinarySensor):
|
||||||
"""Representation of a stateless sensor within Z-Wave."""
|
"""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()
|
node = MockNode()
|
||||||
value = MockValue(data=0, node=node)
|
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)
|
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])
|
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
|
||||||
value = MockValue(data=0, node=node)
|
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)
|
assert isinstance(device, zwave.ZwaveColorLight)
|
||||||
|
|
||||||
|
|
||||||
@ -27,7 +27,7 @@ def test_dimmer_turn_on(mock_openzwave):
|
|||||||
"""Test turning on a dimmable Z-Wave light."""
|
"""Test turning on a dimmable Z-Wave light."""
|
||||||
node = MockNode()
|
node = MockNode()
|
||||||
value = MockValue(data=0, node=node)
|
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()
|
device.turn_on()
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ def test_dimmer_value_changed(mock_openzwave):
|
|||||||
"""Test value changed for dimmer lights."""
|
"""Test value changed for dimmer lights."""
|
||||||
node = MockNode()
|
node = MockNode()
|
||||||
value = MockValue(data=0, node=node)
|
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
|
assert not device.is_on
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@ class MockNode(MagicMock):
|
|||||||
name='Mock Node',
|
name='Mock Node',
|
||||||
manufacturer_id='ABCD',
|
manufacturer_id='ABCD',
|
||||||
product_id='123',
|
product_id='123',
|
||||||
|
product_type='678',
|
||||||
command_classes=None):
|
command_classes=None):
|
||||||
"""Initialize a Z-Wave mock node."""
|
"""Initialize a Z-Wave mock node."""
|
||||||
super().__init__()
|
super().__init__()
|
||||||
@ -31,6 +32,7 @@ class MockNode(MagicMock):
|
|||||||
self.name = name
|
self.name = name
|
||||||
self.manufacturer_id = manufacturer_id
|
self.manufacturer_id = manufacturer_id
|
||||||
self.product_id = product_id
|
self.product_id = product_id
|
||||||
|
self.product_type = product_type
|
||||||
self._command_classes = command_classes or []
|
self._command_classes = command_classes or []
|
||||||
|
|
||||||
def has_command_class(self, command_class):
|
def has_command_class(self, command_class):
|
||||||
@ -53,6 +55,7 @@ class MockValue(MagicMock):
|
|||||||
node=None,
|
node=None,
|
||||||
instance=0,
|
instance=0,
|
||||||
index=0,
|
index=0,
|
||||||
|
command_class=None,
|
||||||
value_id=None):
|
value_id=None):
|
||||||
"""Initialize a Z-Wave mock value."""
|
"""Initialize a Z-Wave mock value."""
|
||||||
super().__init__()
|
super().__init__()
|
||||||
@ -61,6 +64,7 @@ class MockValue(MagicMock):
|
|||||||
self.node = node
|
self.node = node
|
||||||
self.instance = instance
|
self.instance = instance
|
||||||
self.index = 0
|
self.index = 0
|
||||||
|
self.command_class = command_class
|
||||||
if value_id is None:
|
if value_id is None:
|
||||||
MockValue._mock_value_id += 1
|
MockValue._mock_value_id += 1
|
||||||
value_id = MockValue._mock_value_id
|
value_id = MockValue._mock_value_id
|
||||||
|
Loading…
x
Reference in New Issue
Block a user