def test_roller_value_changed(opp, mock_openzwave): """Test position changed.""" opp.data[const.DATA_NETWORK] = MagicMock() node = MockNode() value = MockValue(data=None, node=node, command_class=const.COMMAND_CLASS_SWITCH_MULTILEVEL) values = MockEntityValues(primary=value, open=None, close=None, node=node) device = cover.get_device(opp=opp, node=node, values=values, node_config={}) assert device.current_cover_position is None assert device.is_closed is None value.data = 2 value_changed(value) assert device.current_cover_position == 0 assert device.is_closed value.data = 35 value_changed(value) assert device.current_cover_position == 35 assert not device.is_closed value.data = 97 value_changed(value) assert device.current_cover_position == 100 assert not device.is_closed
def test_roller_reverse_open_close(opp, mock_openzwave): """Test position changed.""" mock_network = opp.data[const.DATA_NETWORK] = MagicMock() node = MockNode() value = MockValue(data=50, node=node, command_class=const.COMMAND_CLASS_SWITCH_MULTILEVEL) open_value = MockValue(data=False, node=node) close_value = MockValue(data=False, node=node) values = MockEntityValues(primary=value, open=open_value, close=close_value, node=node) device = cover.get_device( opp=opp, node=node, values=values, node_config={CONF_INVERT_OPENCLOSE_BUTTONS: True}, ) device.open_cover() assert mock_network.manager.pressButton.called (value_id, ) = mock_network.manager.pressButton.mock_calls.pop(0)[1] assert value_id == close_value.value_id device.close_cover() assert mock_network.manager.pressButton.called (value_id, ) = mock_network.manager.pressButton.mock_calls.pop(0)[1] assert value_id == open_value.value_id device.stop_cover() assert mock_network.manager.releaseButton.called (value_id, ) = mock_network.manager.releaseButton.mock_calls.pop(0)[1] assert value_id == close_value.value_id
def test_barrier_garage_value_changed(opp, mock_openzwave): """Test position changed.""" node = MockNode() value = MockValue(data="Closed", node=node, command_class=const.COMMAND_CLASS_BARRIER_OPERATOR) values = MockEntityValues(primary=value, node=node) device = cover.get_device(opp=opp, node=node, values=values, node_config={}) assert device.is_closed assert not device.is_opening assert not device.is_closing value.data = "Opening" value_changed(value) assert not device.is_closed assert device.is_opening assert not device.is_closing value.data = "Opened" value_changed(value) assert not device.is_closed assert not device.is_opening assert not device.is_closing value.data = "Closing" value_changed(value) assert not device.is_closed assert not device.is_opening assert device.is_closing
def test_lock_alarm_level(mock_openzwave): """Test alarm level for Z-Wave lock.""" node = MockNode() values = MockEntityValues( primary=MockValue(data=None, node=node), access_control=None, alarm_type=MockValue(data=None, node=node), alarm_level=MockValue(data=None, node=node), ) device = lock.get_device(node=node, values=values, node_config={}) assert lock.ATTR_LOCK_STATUS not in device.extra_state_attributes values.alarm_type.data = 21 values.alarm_level.data = 1 value_changed(values.alarm_type) value_changed(values.alarm_level) assert (device.extra_state_attributes[lock.ATTR_LOCK_STATUS] == "Manually Locked by Key Cylinder or Inside thumb turn") values.alarm_type.data = 18 values.alarm_level.data = "alice" value_changed(values.alarm_type) value_changed(values.alarm_level) assert (device.extra_state_attributes[lock.ATTR_LOCK_STATUS] == "Locked with Keypad by user alice") values.alarm_type.data = 161 values.alarm_level.data = 1 value_changed(values.alarm_type) value_changed(values.alarm_level) assert (device.extra_state_attributes[lock.ATTR_LOCK_STATUS] == "Tamper Alarm: Too many keypresses")
def test_roller_invert_percent(opp, mock_openzwave): """Test position changed.""" mock_network = opp.data[const.DATA_NETWORK] = MagicMock() node = MockNode() value = MockValue(data=50, node=node, command_class=const.COMMAND_CLASS_SWITCH_MULTILEVEL) open_value = MockValue(data=False, node=node) close_value = MockValue(data=False, node=node) values = MockEntityValues(primary=value, open=open_value, close=close_value, node=node) device = cover.get_device(opp=opp, node=node, values=values, node_config={CONF_INVERT_PERCENT: True}) device.set_cover_position(position=25) assert node.set_dimmer.called value_id, brightness = node.set_dimmer.mock_calls[0][1] assert value_id == value.value_id assert brightness == 75 device.open_cover() assert mock_network.manager.pressButton.called (value_id, ) = mock_network.manager.pressButton.mock_calls.pop(0)[1] assert value_id == open_value.value_id
def device_single_setpoint_with_mode(hass, mock_openzwave): """Fixture to provide a precreated climate device. SETPOINT_THERMOSTAT device class with COMMAND_CLASS_THERMOSTAT_MODE command class """ node = MockNode() values = MockEntityValues( primary=MockValue( command_class=const.COMMAND_CLASS_THERMOSTAT_SETPOINT, data=1, node=node), mode=MockValue( command_class=const.COMMAND_CLASS_THERMOSTAT_MODE, data=HVAC_MODE_HEAT, data_items=[HVAC_MODE_OFF, HVAC_MODE_HEAT], node=node, ), temperature=MockValue(data=5, node=node, units=None), fan_mode=MockValue(data="test2", data_items=[3, 4, 5], node=node), operating_state=MockValue(data=CURRENT_HVAC_HEAT, node=node), fan_action=MockValue(data=7, node=node), ) device = climate.get_device(hass, node=node, values=values, node_config={}) yield device
def device_zxt_120(hass, mock_openzwave): """Fixture to provide a precreated climate device.""" node = MockNode(manufacturer_id="5254", product_id="8377") values = MockEntityValues( primary=MockValue( command_class=const.COMMAND_CLASS_THERMOSTAT_MODE, data=HVAC_MODE_HEAT, data_items=[ HVAC_MODE_OFF, HVAC_MODE_HEAT, HVAC_MODE_COOL, HVAC_MODE_HEAT_COOL, ], node=node, ), setpoint_heating=MockValue(data=1, node=node), setpoint_cooling=MockValue(data=10, node=node), temperature=MockValue(data=5, node=node, units=None), fan_mode=MockValue(data="test2", data_items=[3, 4, 5], node=node), operating_state=MockValue(data=CURRENT_HVAC_HEAT, node=node), fan_action=MockValue(data=7, node=node), zxt_120_swing_mode=MockValue(data="test3", data_items=[6, 7, 8], node=node), ) device = climate.get_device(hass, node=node, values=values, node_config={}) yield device
async 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) value_off_delay = MockValue(data=15, node=node) values = MockEntityValues(primary=value, off_delay=value_off_delay) device = binary_sensor.get_device(node=node, values=values, node_config={}) assert not device.is_on value.data = True await hass.async_add_job(value_changed, value) assert device.invalidate_after is None device.hass = hass value.data = True await hass.async_add_job(value_changed, value) 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
def device_heat_cool_away(hass, mock_openzwave): """Fixture to provide a precreated climate device. Target range mode.""" node = MockNode() values = MockEntityValues( primary=MockValue( command_class=const.COMMAND_CLASS_THERMOSTAT_MODE, data=HVAC_MODE_HEAT_COOL, data_items=[ HVAC_MODE_OFF, HVAC_MODE_HEAT, HVAC_MODE_COOL, HVAC_MODE_HEAT_COOL, PRESET_AWAY, ], node=node, ), setpoint_heating=MockValue(data=2, node=node), setpoint_cooling=MockValue(data=9, node=node), setpoint_away_heating=MockValue(data=1, node=node), setpoint_away_cooling=MockValue(data=10, node=node), temperature=MockValue(data=5, node=node, units=None), fan_mode=MockValue(data="test2", data_items=[3, 4, 5], node=node), operating_state=MockValue(data="test4", node=node), fan_action=MockValue(data=7, node=node), ) device = climate.get_device(hass, node=node, values=values, node_config={}) yield device
def test_fan_value_changed(mock_openzwave): """Test value changed for zwave fan.""" node = MockNode() value = MockValue(data=0, node=node) values = MockEntityValues(primary=value) device = fan.get_device(node=node, values=values, node_config={}) assert not device.is_on value.data = 10 value_changed(value) assert device.is_on assert device.speed == SPEED_LOW value.data = 50 value_changed(value) assert device.is_on assert device.speed == SPEED_MEDIUM value.data = 90 value_changed(value) assert device.is_on assert device.speed == SPEED_HIGH
def test_switch_refresh_on_update(mock_counter, mock_openzwave): """Test value changed for refresh on update Z-Wave switch.""" mock_counter.return_value = 10 node = MockNode(manufacturer_id='013c', product_type='0001', product_id='0005') value = MockValue(data=False, node=node) values = MockEntityValues(primary=value) device = zwave.get_device(node=node, values=values, node_config={}) assert not device.is_on mock_counter.return_value = 15 value.data = True value_changed(value) assert device.is_on assert not node.request_state.called mock_counter.return_value = 45 value.data = False value_changed(value) assert not device.is_on assert node.request_state.called
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) values = MockEntityValues(primary=value) device = zwave.get_device(node=node, values=values, 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
def test_refresh_entity(self): """Test zwave refresh_entity service.""" node = MockNode() value = MockValue(data=False, node=node, command_class=const.COMMAND_CLASS_SENSOR_BINARY) power_value = MockValue(data=50, node=node, command_class=const.COMMAND_CLASS_METER) values = MockEntityValues(primary=value, power=power_value) device = get_device(node=node, values=values, node_config={}) device.hass = self.hass device.entity_id = 'binary_sensor.mock_entity_id' self.hass.add_job(device.async_added_to_hass()) self.hass.block_till_done() self.hass.services.call('zwave', 'refresh_entity', { ATTR_ENTITY_ID: 'binary_sensor.mock_entity_id', }) self.hass.block_till_done() assert node.refresh_value.called assert len(node.refresh_value.mock_calls) == 2 self.assertEqual( sorted([ node.refresh_value.mock_calls[0][1][0], node.refresh_value.mock_calls[1][1][0] ]), sorted([value.value_id, power_value.value_id]))
def test_lock_alarm_type(mock_openzwave): """Test alarm type for Z-Wave lock.""" node = MockNode() values = MockEntityValues( primary=MockValue(data=None, node=node), access_control=None, alarm_type=MockValue(data=None, node=node), alarm_level=None, ) device = lock.get_device(node=node, values=values, node_config={}) assert lock.ATTR_LOCK_STATUS not in device.device_state_attributes values.alarm_type.data = 21 value_changed(values.alarm_type) assert (device.device_state_attributes[lock.ATTR_LOCK_STATUS] == "Manually Locked None") values.alarm_type.data = 18 value_changed(values.alarm_type) assert (device.device_state_attributes[lock.ATTR_LOCK_STATUS] == "Locked with Keypad by user None") values.alarm_type.data = 161 value_changed(values.alarm_type) assert device.device_state_attributes[ lock.ATTR_LOCK_STATUS] == "Tamper Alarm: None" values.alarm_type.data = 9 value_changed(values.alarm_type) assert device.device_state_attributes[ lock.ATTR_LOCK_STATUS] == "Deadbolt Jammed"
def test_roller_commands(mock_network, mock_openzwave): """Test position changed.""" node = MockNode() value = MockValue(data=50, node=node, command_class=const.COMMAND_CLASS_SWITCH_MULTILEVEL) open_value = MockValue(data=False, node=node) close_value = MockValue(data=False, node=node) values = MockEntityValues(primary=value, open=open_value, close=close_value, node=node) device = zwave.get_device(node=node, values=values, node_config={}) device.set_cover_position(25) assert node.set_dimmer.called value_id, brightness = node.set_dimmer.mock_calls[0][1] assert value_id == value.value_id assert brightness == 25 device.open_cover() assert mock_network.manager.pressButton.called value_id, = mock_network.manager.pressButton.mock_calls.pop(0)[1] assert value_id == open_value.value_id device.close_cover() assert mock_network.manager.pressButton.called value_id, = mock_network.manager.pressButton.mock_calls.pop(0)[1] assert value_id == close_value.value_id device.stop_cover() assert mock_network.manager.releaseButton.called value_id, = mock_network.manager.releaseButton.mock_calls.pop(0)[1] assert value_id == open_value.value_id
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 = sensor.get_device(node=node, values=values, node_config={}) assert device is None
def test_get_device_detects_switch(mock_openzwave): """Test get_device returns a Z-Wave switch.""" node = MockNode() value = MockValue(data=0, node=node) values = MockEntityValues(primary=value) device = zwave.get_device(node=node, values=values, node_config={}) assert isinstance(device, zwave.ZwaveSwitch)
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 = sensor.get_device(node=node, values=values, node_config={}) assert isinstance(device, sensor.ZWaveMultilevelSensor)
def test_get_device_detects_none(mock_openzwave): """Test device is not returned.""" node = MockNode() value = MockValue(data=False, node=node) values = MockEntityValues(primary=value) device = zwave.get_device(node=node, values=values, node_config={}) assert device is None
def test_roller_no_position_workaround(mock_openzwave): """Test position changed.""" node = MockNode(manufacturer_id='0047', product_type='5a52') value = MockValue(data=45, node=node, command_class=const.COMMAND_CLASS_SWITCH_MULTILEVEL) values = MockEntityValues(primary=value, open=None, close=None, node=node) device = zwave.get_device(node=node, values=values, node_config={}) assert device.current_cover_position is None
def test_get_device_detects_rollershutter(mock_openzwave): """Test device returns rollershutter.""" node = MockNode() value = MockValue(data=0, node=node, command_class=const.COMMAND_CLASS_SWITCH_MULTILEVEL) values = MockEntityValues(primary=value, open=None, close=None, node=node) device = zwave.get_device(node=node, values=values, node_config={}) assert isinstance(device, zwave.ZwaveRollershutter)
def test_get_device_detects_alarmsensor(mock_openzwave): """Test get_device returns a Z-Wave alarmsensor.""" node = MockNode(command_classes=[const.COMMAND_CLASS_ALARM, const.COMMAND_CLASS_SENSOR_ALARM]) value = MockValue(data=0, node=node) values = MockEntityValues(primary=value) device = sensor.get_device(node=node, values=values, node_config={}) assert isinstance(device, sensor.ZWaveAlarmSensor)
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) values = MockEntityValues(primary=value) device = binary_sensor.get_device(node=node, values=values, node_config={}) assert isinstance(device, binary_sensor.ZWaveTriggerSensor) assert device.device_class == "motion"
def test_get_device_detects_fan(mock_openzwave): """Test get_device returns a zwave fan.""" node = MockNode() value = MockValue(data=0, node=node) values = MockEntityValues(primary=value) device = fan.get_device(node=node, values=values, node_config={}) assert isinstance(device, fan.ZwaveFan) assert device.supported_features == SUPPORT_SET_SPEED assert device.speed_list == [SPEED_OFF, SPEED_LOW, SPEED_MEDIUM, SPEED_HIGH]
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) values = MockEntityValues(primary=value) device = binary_sensor.get_device(node=node, values=values, node_config={}) assert isinstance(device, binary_sensor.ZWaveBinarySensor)
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) values = MockEntityValues(primary=value) device = binary_sensor.get_device(node=node, values=values, node_config={}) assert isinstance(device, binary_sensor.ZWaveBinarySensor)
def test_get_device_detects_multilevelsensor(mock_openzwave): """Test get_device returns a Z-Wave multilevel sensor.""" node = MockNode(command_classes=[const.COMMAND_CLASS_SENSOR_MULTILEVEL, const.COMMAND_CLASS_METER]) value = MockValue(data=0, node=node) values = MockEntityValues(primary=value) device = sensor.get_device(node=node, values=values, node_config={}) assert isinstance(device, sensor.ZWaveMultilevelSensor) assert device.force_update
def test_get_device_detects_garagedoor(mock_openzwave): """Test device returns garage door.""" node = MockNode() value = MockValue(data=0, node=node, command_class=const.COMMAND_CLASS_BARRIER_OPERATOR) values = MockEntityValues(primary=value, node=node) device = zwave.get_device(node=node, values=values, node_config={}) assert isinstance(device, zwave.ZwaveGarageDoor) assert device.device_class == "garage" assert device.supported_features == SUPPORT_OPEN | SUPPORT_CLOSE
def test_roller_no_position_workaround(hass, mock_openzwave): """Test position changed.""" hass.data[const.DATA_NETWORK] = MagicMock() node = MockNode(manufacturer_id="0047", product_type="5a52") value = MockValue( data=45, node=node, command_class=const.COMMAND_CLASS_SWITCH_MULTILEVEL ) values = MockEntityValues(primary=value, open=None, close=None, node=node) device = cover.get_device(hass=hass, node=node, values=values, node_config={}) assert device.current_cover_position is None
def test_get_device_detects_rollershutter(hass, mock_openzwave): """Test device returns rollershutter.""" hass.data[const.DATA_NETWORK] = MagicMock() node = MockNode() value = MockValue( data=0, node=node, command_class=const.COMMAND_CLASS_SWITCH_MULTILEVEL ) values = MockEntityValues(primary=value, open=None, close=None, node=node) device = cover.get_device(hass=hass, node=node, values=values, node_config={}) assert isinstance(device, cover.ZwaveRollershutter)