From c7b9a0715d2a5ae1d6f7c2752da3d304fa763131 Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Sat, 13 Mar 2021 06:43:03 -0500 Subject: [PATCH] Fix zwave_js preset supported feature (#47819) --- homeassistant/components/zwave_js/climate.py | 4 +- tests/components/zwave_js/test_climate.py | 82 +------------------- 2 files changed, 7 insertions(+), 79 deletions(-) diff --git a/homeassistant/components/zwave_js/climate.py b/homeassistant/components/zwave_js/climate.py index ceb46982949..16139683011 100644 --- a/homeassistant/components/zwave_js/climate.py +++ b/homeassistant/components/zwave_js/climate.py @@ -162,7 +162,9 @@ class ZWaveClimate(ZWaveBaseEntity, ClimateEntity): add_to_watched_value_ids=True, ) self._set_modes_and_presets() - self._supported_features = SUPPORT_PRESET_MODE + self._supported_features = 0 + if len(self._hvac_presets) > 1: + self._supported_features |= SUPPORT_PRESET_MODE # If any setpoint value exists, we can assume temperature # can be set if any(self._setpoint_values.values()): diff --git a/tests/components/zwave_js/test_climate.py b/tests/components/zwave_js/test_climate.py index a31aad19603..637fb96f1ba 100644 --- a/tests/components/zwave_js/test_climate.py +++ b/tests/components/zwave_js/test_climate.py @@ -9,7 +9,6 @@ from homeassistant.components.climate.const import ( ATTR_HVAC_ACTION, ATTR_HVAC_MODE, ATTR_HVAC_MODES, - ATTR_PRESET_MODE, ATTR_TARGET_TEMP_HIGH, ATTR_TARGET_TEMP_LOW, CURRENT_HVAC_IDLE, @@ -19,13 +18,10 @@ from homeassistant.components.climate.const import ( HVAC_MODE_HEAT, HVAC_MODE_HEAT_COOL, HVAC_MODE_OFF, - PRESET_NONE, SERVICE_SET_FAN_MODE, SERVICE_SET_HVAC_MODE, - SERVICE_SET_PRESET_MODE, SERVICE_SET_TEMPERATURE, SUPPORT_FAN_MODE, - SUPPORT_PRESET_MODE, SUPPORT_TARGET_TEMPERATURE, SUPPORT_TARGET_TEMPERATURE_RANGE, ) @@ -63,51 +59,15 @@ async def test_thermostat_v2( assert state.attributes[ATTR_CURRENT_TEMPERATURE] == 22.2 assert state.attributes[ATTR_TEMPERATURE] == 22.2 assert state.attributes[ATTR_HVAC_ACTION] == CURRENT_HVAC_IDLE - assert state.attributes[ATTR_PRESET_MODE] == PRESET_NONE assert state.attributes[ATTR_FAN_MODE] == "Auto low" assert state.attributes[ATTR_FAN_STATE] == "Idle / off" assert ( state.attributes[ATTR_SUPPORTED_FEATURES] - == SUPPORT_PRESET_MODE - | SUPPORT_TARGET_TEMPERATURE + == SUPPORT_TARGET_TEMPERATURE | SUPPORT_TARGET_TEMPERATURE_RANGE | SUPPORT_FAN_MODE ) - # Test setting preset mode - await hass.services.async_call( - CLIMATE_DOMAIN, - SERVICE_SET_PRESET_MODE, - { - ATTR_ENTITY_ID: CLIMATE_RADIO_THERMOSTAT_ENTITY, - ATTR_PRESET_MODE: PRESET_NONE, - }, - blocking=True, - ) - - assert len(client.async_send_command_no_wait.call_args_list) == 1 - args = client.async_send_command_no_wait.call_args[0][0] - assert args["command"] == "node.set_value" - assert args["nodeId"] == 13 - assert args["valueId"] == { - "commandClassName": "Thermostat Mode", - "commandClass": 64, - "endpoint": 1, - "property": "mode", - "propertyName": "mode", - "metadata": { - "type": "number", - "readable": True, - "writeable": True, - "min": 0, - "max": 31, - "label": "Thermostat mode", - "states": {"0": "Off", "1": "Heat", "2": "Cool", "3": "Auto"}, - }, - "value": 1, - } - assert args["value"] == 1 - client.async_send_command_no_wait.reset_mock() # Test setting hvac mode @@ -314,20 +274,6 @@ async def test_thermostat_v2( client.async_send_command_no_wait.reset_mock() - with pytest.raises(ValueError): - # Test setting unknown preset mode - await hass.services.async_call( - CLIMATE_DOMAIN, - SERVICE_SET_PRESET_MODE, - { - ATTR_ENTITY_ID: CLIMATE_RADIO_THERMOSTAT_ENTITY, - ATTR_PRESET_MODE: "unknown_preset", - }, - blocking=True, - ) - - assert len(client.async_send_command_no_wait.call_args_list) == 0 - # Test setting invalid hvac mode with pytest.raises(ValueError): await hass.services.async_call( @@ -340,18 +286,6 @@ async def test_thermostat_v2( blocking=True, ) - # Test setting invalid preset mode - with pytest.raises(ValueError): - await hass.services.async_call( - CLIMATE_DOMAIN, - SERVICE_SET_PRESET_MODE, - { - ATTR_ENTITY_ID: CLIMATE_RADIO_THERMOSTAT_ENTITY, - ATTR_PRESET_MODE: "invalid_mode", - }, - blocking=True, - ) - client.async_send_command_no_wait.reset_mock() # Test setting fan mode @@ -422,11 +356,7 @@ async def test_setpoint_thermostat(hass, client, climate_danfoss_lc_13, integrat assert state.state == HVAC_MODE_HEAT assert state.attributes[ATTR_TEMPERATURE] == 14 assert state.attributes[ATTR_HVAC_MODES] == [HVAC_MODE_HEAT] - assert state.attributes[ATTR_PRESET_MODE] == PRESET_NONE - assert ( - state.attributes[ATTR_SUPPORTED_FEATURES] - == SUPPORT_PRESET_MODE | SUPPORT_TARGET_TEMPERATURE - ) + assert state.attributes[ATTR_SUPPORTED_FEATURES] == SUPPORT_TARGET_TEMPERATURE client.async_send_command_no_wait.reset_mock() @@ -509,11 +439,7 @@ async def test_thermostat_heatit(hass, client, climate_heatit_z_trm3, integratio assert state.attributes[ATTR_CURRENT_TEMPERATURE] == 22.9 assert state.attributes[ATTR_TEMPERATURE] == 22.5 assert state.attributes[ATTR_HVAC_ACTION] == CURRENT_HVAC_IDLE - assert state.attributes[ATTR_PRESET_MODE] == PRESET_NONE - assert ( - state.attributes[ATTR_SUPPORTED_FEATURES] - == SUPPORT_PRESET_MODE | SUPPORT_TARGET_TEMPERATURE - ) + assert state.attributes[ATTR_SUPPORTED_FEATURES] == SUPPORT_TARGET_TEMPERATURE async def test_thermostat_srt321_hrt4_zw(hass, client, srt321_hrt4_zw, integration): @@ -530,4 +456,4 @@ async def test_thermostat_srt321_hrt4_zw(hass, client, srt321_hrt4_zw, integrati HVAC_MODE_HEAT, ] assert state.attributes[ATTR_CURRENT_TEMPERATURE] is None - assert state.attributes[ATTR_SUPPORTED_FEATURES] == SUPPORT_PRESET_MODE + assert state.attributes[ATTR_SUPPORTED_FEATURES] == 0