Add zwave light tests (#6710)

* Add zwave light tests

* Test turn_off
This commit is contained in:
Adam Mills 2017-03-20 01:22:13 -04:00 committed by Paulus Schoutsen
parent 3f38b9e52f
commit 8325f9db8a
4 changed files with 254 additions and 4 deletions

View File

@ -229,7 +229,6 @@ 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

View File

@ -264,10 +264,10 @@ class ZwaveColorLight(ZwaveDimmer):
if self._zw098:
if kwargs[ATTR_COLOR_TEMP] > TEMP_MID_HASS:
self._ct = TEMP_WARM_HASS
rgbw = b'#000000FF00'
rgbw = b'#000000ff00'
else:
self._ct = TEMP_COLD_HASS
rgbw = b'#00000000FF'
rgbw = b'#00000000ff'
elif ATTR_RGB_COLOR in kwargs:
self._rgb = kwargs[ATTR_RGB_COLOR]

View File

@ -1,6 +1,10 @@
"""Test Z-Wave lights."""
from unittest.mock import patch, MagicMock
import homeassistant.components.zwave
from homeassistant.components.zwave import const
from homeassistant.components.light import zwave, ATTR_BRIGHTNESS
from homeassistant.components.light import (
zwave, ATTR_BRIGHTNESS, ATTR_COLOR_TEMP, ATTR_RGB_COLOR)
from tests.mock.zwave import (
MockNode, MockValue, MockEntityValues, value_changed)
@ -24,6 +28,7 @@ def test_get_device_detects_dimmer(mock_openzwave):
device = zwave.get_device(node=node, values=values, node_config={})
assert isinstance(device, zwave.ZwaveDimmer)
assert device.supported_features == zwave.SUPPORT_ZWAVE_DIMMER
def test_get_device_detects_colorlight(mock_openzwave):
@ -34,6 +39,18 @@ def test_get_device_detects_colorlight(mock_openzwave):
device = zwave.get_device(node=node, values=values, node_config={})
assert isinstance(device, zwave.ZwaveColorLight)
assert device.supported_features == zwave.SUPPORT_ZWAVE_COLOR
def test_get_device_detects_zw098(mock_openzwave):
"""Test get_device returns a zw098 color light."""
node = MockNode(manufacturer_id='0086', product_id='0062',
command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
values = MockLightValues(primary=value)
device = zwave.get_device(node=node, values=values, node_config={})
assert isinstance(device, zwave.ZwaveColorLight)
assert device.supported_features == zwave.SUPPORT_ZWAVE_COLORTEMP
def test_dimmer_turn_on(mock_openzwave):
@ -61,6 +78,21 @@ def test_dimmer_turn_on(mock_openzwave):
assert brightness == 46 # int(120 / 255 * 99)
def test_dimmer_turn_off(mock_openzwave):
"""Test turning off a dimmable Z-Wave light."""
node = MockNode()
value = MockValue(data=46, node=node)
values = MockLightValues(primary=value)
device = zwave.get_device(node=node, values=values, node_config={})
device.turn_off()
assert node.set_dimmer.called
value_id, brightness = node.set_dimmer.mock_calls[0][1]
assert value_id == value.value_id
assert brightness == 0
def test_dimmer_value_changed(mock_openzwave):
"""Test value changed for dimmer lights."""
node = MockNode()
@ -75,3 +107,218 @@ def test_dimmer_value_changed(mock_openzwave):
assert device.is_on
assert device.brightness == 118
def test_dimmer_refresh_value(mock_openzwave):
"""Test value changed for dimmer lights."""
node = MockNode()
value = MockValue(data=0, node=node)
values = MockLightValues(primary=value)
device = zwave.get_device(node=node, values=values, node_config={
homeassistant.components.zwave.CONF_REFRESH_VALUE: True,
homeassistant.components.zwave.CONF_REFRESH_DELAY: 5,
})
assert not device.is_on
with patch.object(zwave, 'Timer', MagicMock()) as mock_timer:
value.data = 46
value_changed(value)
assert not device.is_on
assert mock_timer.called
assert len(mock_timer.mock_calls) == 2
timeout, callback = mock_timer.mock_calls[0][1][:2]
assert timeout == 5
assert mock_timer().start.called
assert len(mock_timer().start.mock_calls) == 1
with patch.object(zwave, 'Timer', MagicMock()) as mock_timer_2:
value_changed(value)
assert not device.is_on
assert mock_timer().cancel.called
assert len(mock_timer_2.mock_calls) == 2
timeout, callback = mock_timer_2.mock_calls[0][1][:2]
assert timeout == 5
assert mock_timer_2().start.called
assert len(mock_timer_2().start.mock_calls) == 1
callback()
assert device.is_on
assert device.brightness == 118
def test_set_rgb_color(mock_openzwave):
"""Test setting zwave light color."""
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
# Suppoorts RGB only
color_channels = MockValue(data=0x1c, node=node)
values = MockLightValues(primary=value, color=color,
color_channels=color_channels)
device = zwave.get_device(node=node, values=values, node_config={})
assert color.data == b'#0000000000'
device.turn_on(**{ATTR_RGB_COLOR: (200, 150, 100)})
assert color.data == b'#c896640000'
def test_set_rgbw_color(mock_openzwave):
"""Test setting zwave light color."""
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
# Suppoorts RGBW
color_channels = MockValue(data=0x1d, node=node)
values = MockLightValues(primary=value, color=color,
color_channels=color_channels)
device = zwave.get_device(node=node, values=values, node_config={})
assert color.data == b'#0000000000'
device.turn_on(**{ATTR_RGB_COLOR: (200, 150, 100)})
assert color.data == b'#c86400c800'
def test_zw098_set_color_temp(mock_openzwave):
"""Test setting zwave light color."""
node = MockNode(manufacturer_id='0086', product_id='0062',
command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
# Suppoorts RGB, warm white, cold white
color_channels = MockValue(data=0x1f, node=node)
values = MockLightValues(primary=value, color=color,
color_channels=color_channels)
device = zwave.get_device(node=node, values=values, node_config={})
assert color.data == b'#0000000000'
device.turn_on(**{ATTR_COLOR_TEMP: 200})
assert color.data == b'#00000000ff'
device.turn_on(**{ATTR_COLOR_TEMP: 400})
assert color.data == b'#000000ff00'
def test_rgb_not_supported(mock_openzwave):
"""Test value changed for rgb lights."""
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
# Suppoorts color temperature only
color_channels = MockValue(data=0x01, node=node)
values = MockLightValues(primary=value, color=color,
color_channels=color_channels)
device = zwave.get_device(node=node, values=values, node_config={})
assert device.rgb_color is None
def test_no_color_value(mock_openzwave):
"""Test value changed for rgb lights."""
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
values = MockLightValues(primary=value)
device = zwave.get_device(node=node, values=values, node_config={})
assert device.rgb_color is None
def test_no_color_channels_value(mock_openzwave):
"""Test value changed for rgb lights."""
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
values = MockLightValues(primary=value, color=color)
device = zwave.get_device(node=node, values=values, node_config={})
assert device.rgb_color is None
def test_rgb_value_changed(mock_openzwave):
"""Test value changed for rgb lights."""
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
# Suppoorts RGB only
color_channels = MockValue(data=0x1c, node=node)
values = MockLightValues(primary=value, color=color,
color_channels=color_channels)
device = zwave.get_device(node=node, values=values, node_config={})
assert device.rgb_color == [0, 0, 0]
color.data = b'#c896640000'
value_changed(color)
assert device.rgb_color == [200, 150, 100]
def test_rgbww_value_changed(mock_openzwave):
"""Test value changed for rgb lights."""
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
# Suppoorts RGB, Warm White
color_channels = MockValue(data=0x1d, node=node)
values = MockLightValues(primary=value, color=color,
color_channels=color_channels)
device = zwave.get_device(node=node, values=values, node_config={})
assert device.rgb_color == [0, 0, 0]
color.data = b'#c86400c800'
value_changed(color)
assert device.rgb_color == [200, 150, 100]
def test_rgbcw_value_changed(mock_openzwave):
"""Test value changed for rgb lights."""
node = MockNode(command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
# Suppoorts RGB, Cold White
color_channels = MockValue(data=0x1e, node=node)
values = MockLightValues(primary=value, color=color,
color_channels=color_channels)
device = zwave.get_device(node=node, values=values, node_config={})
assert device.rgb_color == [0, 0, 0]
color.data = b'#c86400c800'
value_changed(color)
assert device.rgb_color == [200, 150, 100]
def test_ct_value_changed(mock_openzwave):
"""Test value changed for zw098 lights."""
node = MockNode(manufacturer_id='0086', product_id='0062',
command_classes=[const.COMMAND_CLASS_SWITCH_COLOR])
value = MockValue(data=0, node=node)
color = MockValue(data=b'#0000000000', node=node)
# Suppoorts RGB, Cold White
color_channels = MockValue(data=0x1f, node=node)
values = MockLightValues(primary=value, color=color,
color_channels=color_channels)
device = zwave.get_device(node=node, values=values, node_config={})
assert device.color_temp == zwave.TEMP_MID_HASS
color.data = b'#000000ff00'
value_changed(color)
assert device.color_temp == zwave.TEMP_WARM_HASS
color.data = b'#00000000ff'
value_changed(color)
assert device.color_temp == zwave.TEMP_COLD_HASS

View File

@ -78,6 +78,10 @@ class MockValue(MagicMock):
"""Create child mocks with right MagicMock class."""
return MagicMock(**kw)
def refresh(self):
"""Mock refresh of node value."""
value_changed(self)
class MockEntityValues():
"""Mock Z-Wave entity values."""