1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-23 20:39:01 +00:00

Improve homekit_controller tests (#65266)

This commit is contained in:
Jc2k
2022-01-30 22:59:39 +00:00
committed by GitHub
parent eb94fe1ca7
commit 58b8c30221
16 changed files with 1487 additions and 650 deletions

View File

@@ -22,21 +22,6 @@ from homeassistant.components.climate.const import (
from tests.components.homekit_controller.common import setup_test_component
HEATING_COOLING_TARGET = ("thermostat", "heating-cooling.target")
HEATING_COOLING_CURRENT = ("thermostat", "heating-cooling.current")
THERMOSTAT_TEMPERATURE_COOLING_THRESHOLD = (
"thermostat",
"temperature.cooling-threshold",
)
THERMOSTAT_TEMPERATURE_HEATING_THRESHOLD = (
"thermostat",
"temperature.heating-threshold",
)
TEMPERATURE_TARGET = ("thermostat", "temperature.target")
TEMPERATURE_CURRENT = ("thermostat", "temperature.current")
HUMIDITY_TARGET = ("thermostat", "relative-humidity.target")
HUMIDITY_CURRENT = ("thermostat", "relative-humidity.current")
# Test thermostat devices
@@ -116,8 +101,12 @@ async def test_climate_change_thermostat_state(hass, utcnow):
{"entity_id": "climate.testdevice", "hvac_mode": HVAC_MODE_HEAT},
blocking=True,
)
assert helper.characteristics[HEATING_COOLING_TARGET].value == 1
helper.async_assert_service_values(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.HEATING_COOLING_TARGET: 1,
},
)
await hass.services.async_call(
DOMAIN,
@@ -125,7 +114,12 @@ async def test_climate_change_thermostat_state(hass, utcnow):
{"entity_id": "climate.testdevice", "hvac_mode": HVAC_MODE_COOL},
blocking=True,
)
assert helper.characteristics[HEATING_COOLING_TARGET].value == 2
helper.async_assert_service_values(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.HEATING_COOLING_TARGET: 2,
},
)
await hass.services.async_call(
DOMAIN,
@@ -133,7 +127,12 @@ async def test_climate_change_thermostat_state(hass, utcnow):
{"entity_id": "climate.testdevice", "hvac_mode": HVAC_MODE_HEAT_COOL},
blocking=True,
)
assert helper.characteristics[HEATING_COOLING_TARGET].value == 3
helper.async_assert_service_values(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.HEATING_COOLING_TARGET: 3,
},
)
await hass.services.async_call(
DOMAIN,
@@ -141,7 +140,12 @@ async def test_climate_change_thermostat_state(hass, utcnow):
{"entity_id": "climate.testdevice", "hvac_mode": HVAC_MODE_OFF},
blocking=True,
)
assert helper.characteristics[HEATING_COOLING_TARGET].value == 0
helper.async_assert_service_values(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.HEATING_COOLING_TARGET: 0,
},
)
async def test_climate_check_min_max_values_per_mode(hass, utcnow):
@@ -189,7 +193,12 @@ async def test_climate_change_thermostat_temperature(hass, utcnow):
{"entity_id": "climate.testdevice", "temperature": 21},
blocking=True,
)
assert helper.characteristics[TEMPERATURE_TARGET].value == 21
helper.async_assert_service_values(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.TEMPERATURE_TARGET: 21,
},
)
await hass.services.async_call(
DOMAIN,
@@ -197,7 +206,12 @@ async def test_climate_change_thermostat_temperature(hass, utcnow):
{"entity_id": "climate.testdevice", "temperature": 25},
blocking=True,
)
assert helper.characteristics[TEMPERATURE_TARGET].value == 25
helper.async_assert_service_values(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.TEMPERATURE_TARGET: 25,
},
)
async def test_climate_change_thermostat_temperature_range(hass, utcnow):
@@ -222,9 +236,15 @@ async def test_climate_change_thermostat_temperature_range(hass, utcnow):
},
blocking=True,
)
assert helper.characteristics[TEMPERATURE_TARGET].value == 22.5
assert helper.characteristics[THERMOSTAT_TEMPERATURE_HEATING_THRESHOLD].value == 20
assert helper.characteristics[THERMOSTAT_TEMPERATURE_COOLING_THRESHOLD].value == 25
helper.async_assert_service_values(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.TEMPERATURE_TARGET: 22.5,
CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD: 20,
CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD: 25,
},
)
async def test_climate_change_thermostat_temperature_range_iphone(hass, utcnow):
@@ -250,9 +270,14 @@ async def test_climate_change_thermostat_temperature_range_iphone(hass, utcnow):
},
blocking=True,
)
assert helper.characteristics[TEMPERATURE_TARGET].value == 22
assert helper.characteristics[THERMOSTAT_TEMPERATURE_HEATING_THRESHOLD].value == 20
assert helper.characteristics[THERMOSTAT_TEMPERATURE_COOLING_THRESHOLD].value == 24
helper.async_assert_service_values(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.TEMPERATURE_TARGET: 22,
CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD: 20,
CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD: 24,
},
)
async def test_climate_cannot_set_thermostat_temp_range_in_wrong_mode(hass, utcnow):
@@ -277,9 +302,14 @@ async def test_climate_cannot_set_thermostat_temp_range_in_wrong_mode(hass, utcn
},
blocking=True,
)
assert helper.characteristics[TEMPERATURE_TARGET].value == 22
assert helper.characteristics[THERMOSTAT_TEMPERATURE_HEATING_THRESHOLD].value == 0
assert helper.characteristics[THERMOSTAT_TEMPERATURE_COOLING_THRESHOLD].value == 0
helper.async_assert_service_values(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.TEMPERATURE_TARGET: 22,
CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD: 0,
CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD: 0,
},
)
def create_thermostat_single_set_point_auto(accessory):
@@ -359,7 +389,12 @@ async def test_climate_set_thermostat_temp_on_sspa_device(hass, utcnow):
{"entity_id": "climate.testdevice", "temperature": 21},
blocking=True,
)
assert helper.characteristics[TEMPERATURE_TARGET].value == 21
helper.async_assert_service_values(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.TEMPERATURE_TARGET: 21,
},
)
await hass.services.async_call(
DOMAIN,
@@ -367,7 +402,12 @@ async def test_climate_set_thermostat_temp_on_sspa_device(hass, utcnow):
{"entity_id": "climate.testdevice", "hvac_mode": HVAC_MODE_HEAT_COOL},
blocking=True,
)
assert helper.characteristics[TEMPERATURE_TARGET].value == 21
helper.async_assert_service_values(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.TEMPERATURE_TARGET: 21,
},
)
await hass.services.async_call(
DOMAIN,
@@ -378,7 +418,12 @@ async def test_climate_set_thermostat_temp_on_sspa_device(hass, utcnow):
},
blocking=True,
)
assert helper.characteristics[TEMPERATURE_TARGET].value == 22
helper.async_assert_service_values(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.TEMPERATURE_TARGET: 22,
},
)
async def test_climate_set_mode_via_temp(hass, utcnow):
@@ -395,8 +440,13 @@ async def test_climate_set_mode_via_temp(hass, utcnow):
},
blocking=True,
)
assert helper.characteristics[TEMPERATURE_TARGET].value == 21
assert helper.characteristics[HEATING_COOLING_TARGET].value == 1
helper.async_assert_service_values(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.TEMPERATURE_TARGET: 21,
CharacteristicsTypes.HEATING_COOLING_TARGET: 1,
},
)
await hass.services.async_call(
DOMAIN,
@@ -408,8 +458,13 @@ async def test_climate_set_mode_via_temp(hass, utcnow):
},
blocking=True,
)
assert helper.characteristics[TEMPERATURE_TARGET].value == 22
assert helper.characteristics[HEATING_COOLING_TARGET].value == 3
helper.async_assert_service_values(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.TEMPERATURE_TARGET: 22,
CharacteristicsTypes.HEATING_COOLING_TARGET: 3,
},
)
async def test_climate_change_thermostat_humidity(hass, utcnow):
@@ -422,7 +477,12 @@ async def test_climate_change_thermostat_humidity(hass, utcnow):
{"entity_id": "climate.testdevice", "humidity": 50},
blocking=True,
)
assert helper.characteristics[HUMIDITY_TARGET].value == 50
helper.async_assert_service_values(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.RELATIVE_HUMIDITY_TARGET: 50,
},
)
await hass.services.async_call(
DOMAIN,
@@ -430,7 +490,12 @@ async def test_climate_change_thermostat_humidity(hass, utcnow):
{"entity_id": "climate.testdevice", "humidity": 45},
blocking=True,
)
assert helper.characteristics[HUMIDITY_TARGET].value == 45
helper.async_assert_service_values(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.RELATIVE_HUMIDITY_TARGET: 45,
},
)
async def test_climate_read_thermostat_state(hass, utcnow):
@@ -438,12 +503,17 @@ async def test_climate_read_thermostat_state(hass, utcnow):
helper = await setup_test_component(hass, create_thermostat_service)
# Simulate that heating is on
helper.characteristics[TEMPERATURE_CURRENT].value = 19
helper.characteristics[TEMPERATURE_TARGET].value = 21
helper.characteristics[HEATING_COOLING_CURRENT].value = 1
helper.characteristics[HEATING_COOLING_TARGET].value = 1
helper.characteristics[HUMIDITY_CURRENT].value = 50
helper.characteristics[HUMIDITY_TARGET].value = 45
await helper.async_update(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.TEMPERATURE_CURRENT: 19,
CharacteristicsTypes.TEMPERATURE_TARGET: 21,
CharacteristicsTypes.HEATING_COOLING_CURRENT: 1,
CharacteristicsTypes.HEATING_COOLING_TARGET: 1,
CharacteristicsTypes.RELATIVE_HUMIDITY_CURRENT: 50,
CharacteristicsTypes.RELATIVE_HUMIDITY_TARGET: 45,
},
)
state = await helper.poll_and_get_state()
assert state.state == HVAC_MODE_HEAT
@@ -453,12 +523,17 @@ async def test_climate_read_thermostat_state(hass, utcnow):
assert state.attributes["max_temp"] == 35
# Simulate that cooling is on
helper.characteristics[TEMPERATURE_CURRENT].value = 21
helper.characteristics[TEMPERATURE_TARGET].value = 19
helper.characteristics[HEATING_COOLING_CURRENT].value = 2
helper.characteristics[HEATING_COOLING_TARGET].value = 2
helper.characteristics[HUMIDITY_CURRENT].value = 45
helper.characteristics[HUMIDITY_TARGET].value = 45
await helper.async_update(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.TEMPERATURE_CURRENT: 21,
CharacteristicsTypes.TEMPERATURE_TARGET: 19,
CharacteristicsTypes.HEATING_COOLING_CURRENT: 2,
CharacteristicsTypes.HEATING_COOLING_TARGET: 2,
CharacteristicsTypes.RELATIVE_HUMIDITY_CURRENT: 45,
CharacteristicsTypes.RELATIVE_HUMIDITY_TARGET: 45,
},
)
state = await helper.poll_and_get_state()
assert state.state == HVAC_MODE_COOL
@@ -466,10 +541,15 @@ async def test_climate_read_thermostat_state(hass, utcnow):
assert state.attributes["current_humidity"] == 45
# Simulate that we are in heat/cool mode
helper.characteristics[TEMPERATURE_CURRENT].value = 21
helper.characteristics[TEMPERATURE_TARGET].value = 21
helper.characteristics[HEATING_COOLING_CURRENT].value = 0
helper.characteristics[HEATING_COOLING_TARGET].value = 3
await helper.async_update(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.TEMPERATURE_CURRENT: 21,
CharacteristicsTypes.TEMPERATURE_TARGET: 21,
CharacteristicsTypes.HEATING_COOLING_CURRENT: 0,
CharacteristicsTypes.HEATING_COOLING_TARGET: 3,
},
)
state = await helper.poll_and_get_state()
assert state.state == HVAC_MODE_HEAT_COOL
@@ -481,12 +561,17 @@ async def test_hvac_mode_vs_hvac_action(hass, utcnow):
# Simulate that current temperature is above target temp
# Heating might be on, but hvac_action currently 'off'
helper.characteristics[TEMPERATURE_CURRENT].value = 22
helper.characteristics[TEMPERATURE_TARGET].value = 21
helper.characteristics[HEATING_COOLING_CURRENT].value = 0
helper.characteristics[HEATING_COOLING_TARGET].value = 1
helper.characteristics[HUMIDITY_CURRENT].value = 50
helper.characteristics[HUMIDITY_TARGET].value = 45
await helper.async_update(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.TEMPERATURE_CURRENT: 22,
CharacteristicsTypes.TEMPERATURE_TARGET: 21,
CharacteristicsTypes.HEATING_COOLING_CURRENT: 0,
CharacteristicsTypes.HEATING_COOLING_TARGET: 1,
CharacteristicsTypes.RELATIVE_HUMIDITY_CURRENT: 50,
CharacteristicsTypes.RELATIVE_HUMIDITY_TARGET: 45,
},
)
state = await helper.poll_and_get_state()
assert state.state == "heat"
@@ -494,23 +579,19 @@ async def test_hvac_mode_vs_hvac_action(hass, utcnow):
# Simulate that current temperature is below target temp
# Heating might be on and hvac_action currently 'heat'
helper.characteristics[TEMPERATURE_CURRENT].value = 19
helper.characteristics[HEATING_COOLING_CURRENT].value = 1
await helper.async_update(
ServicesTypes.THERMOSTAT,
{
CharacteristicsTypes.TEMPERATURE_CURRENT: 19,
CharacteristicsTypes.HEATING_COOLING_CURRENT: 1,
},
)
state = await helper.poll_and_get_state()
assert state.state == "heat"
assert state.attributes["hvac_action"] == "heating"
TARGET_HEATER_COOLER_STATE = ("heater-cooler", "heater-cooler.state.target")
CURRENT_HEATER_COOLER_STATE = ("heater-cooler", "heater-cooler.state.current")
HEATER_COOLER_ACTIVE = ("heater-cooler", "active")
HEATER_COOLER_TEMPERATURE_CURRENT = ("heater-cooler", "temperature.current")
TEMPERATURE_COOLING_THRESHOLD = ("heater-cooler", "temperature.cooling-threshold")
TEMPERATURE_HEATING_THRESHOLD = ("heater-cooler", "temperature.heating-threshold")
SWING_MODE = ("heater-cooler", "swing-mode")
def create_heater_cooler_service(accessory):
"""Define thermostat characteristics."""
service = accessory.add_service(ServicesTypes.HEATER_COOLER)
@@ -583,10 +664,11 @@ async def test_heater_cooler_change_thermostat_state(hass, utcnow):
{"entity_id": "climate.testdevice", "hvac_mode": HVAC_MODE_HEAT},
blocking=True,
)
assert (
helper.characteristics[TARGET_HEATER_COOLER_STATE].value
== TargetHeaterCoolerStateValues.HEAT
helper.async_assert_service_values(
ServicesTypes.HEATER_COOLER,
{
CharacteristicsTypes.TARGET_HEATER_COOLER_STATE: TargetHeaterCoolerStateValues.HEAT,
},
)
await hass.services.async_call(
@@ -595,9 +677,11 @@ async def test_heater_cooler_change_thermostat_state(hass, utcnow):
{"entity_id": "climate.testdevice", "hvac_mode": HVAC_MODE_COOL},
blocking=True,
)
assert (
helper.characteristics[TARGET_HEATER_COOLER_STATE].value
== TargetHeaterCoolerStateValues.COOL
helper.async_assert_service_values(
ServicesTypes.HEATER_COOLER,
{
CharacteristicsTypes.TARGET_HEATER_COOLER_STATE: TargetHeaterCoolerStateValues.COOL,
},
)
await hass.services.async_call(
@@ -606,9 +690,11 @@ async def test_heater_cooler_change_thermostat_state(hass, utcnow):
{"entity_id": "climate.testdevice", "hvac_mode": HVAC_MODE_HEAT_COOL},
blocking=True,
)
assert (
helper.characteristics[TARGET_HEATER_COOLER_STATE].value
== TargetHeaterCoolerStateValues.AUTOMATIC
helper.async_assert_service_values(
ServicesTypes.HEATER_COOLER,
{
CharacteristicsTypes.TARGET_HEATER_COOLER_STATE: TargetHeaterCoolerStateValues.AUTOMATIC,
},
)
await hass.services.async_call(
@@ -617,9 +703,11 @@ async def test_heater_cooler_change_thermostat_state(hass, utcnow):
{"entity_id": "climate.testdevice", "hvac_mode": HVAC_MODE_OFF},
blocking=True,
)
assert (
helper.characteristics[HEATER_COOLER_ACTIVE].value
== ActivationStateValues.INACTIVE
helper.async_assert_service_values(
ServicesTypes.HEATER_COOLER,
{
CharacteristicsTypes.ACTIVE: ActivationStateValues.INACTIVE,
},
)
@@ -639,7 +727,12 @@ async def test_heater_cooler_change_thermostat_temperature(hass, utcnow):
{"entity_id": "climate.testdevice", "temperature": 20},
blocking=True,
)
assert helper.characteristics[TEMPERATURE_HEATING_THRESHOLD].value == 20
helper.async_assert_service_values(
ServicesTypes.HEATER_COOLER,
{
CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD: 20,
},
)
await hass.services.async_call(
DOMAIN,
@@ -653,7 +746,12 @@ async def test_heater_cooler_change_thermostat_temperature(hass, utcnow):
{"entity_id": "climate.testdevice", "temperature": 26},
blocking=True,
)
assert helper.characteristics[TEMPERATURE_COOLING_THRESHOLD].value == 26
helper.async_assert_service_values(
ServicesTypes.HEATER_COOLER,
{
CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD: 26,
},
)
async def test_heater_cooler_read_thermostat_state(hass, utcnow):
@@ -661,15 +759,16 @@ async def test_heater_cooler_read_thermostat_state(hass, utcnow):
helper = await setup_test_component(hass, create_heater_cooler_service)
# Simulate that heating is on
helper.characteristics[HEATER_COOLER_TEMPERATURE_CURRENT].value = 19
helper.characteristics[TEMPERATURE_HEATING_THRESHOLD].value = 20
helper.characteristics[
CURRENT_HEATER_COOLER_STATE
].value = CurrentHeaterCoolerStateValues.HEATING
helper.characteristics[
TARGET_HEATER_COOLER_STATE
].value = TargetHeaterCoolerStateValues.HEAT
helper.characteristics[SWING_MODE].value = SwingModeValues.DISABLED
await helper.async_update(
ServicesTypes.HEATER_COOLER,
{
CharacteristicsTypes.TEMPERATURE_CURRENT: 19,
CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD: 21,
CharacteristicsTypes.CURRENT_HEATER_COOLER_STATE: CurrentHeaterCoolerStateValues.HEATING,
CharacteristicsTypes.TARGET_HEATER_COOLER_STATE: TargetHeaterCoolerStateValues.HEAT,
CharacteristicsTypes.SWING_MODE: SwingModeValues.DISABLED,
},
)
state = await helper.poll_and_get_state()
assert state.state == HVAC_MODE_HEAT
@@ -678,30 +777,32 @@ async def test_heater_cooler_read_thermostat_state(hass, utcnow):
assert state.attributes["max_temp"] == 35
# Simulate that cooling is on
helper.characteristics[HEATER_COOLER_TEMPERATURE_CURRENT].value = 21
helper.characteristics[TEMPERATURE_COOLING_THRESHOLD].value = 19
helper.characteristics[
CURRENT_HEATER_COOLER_STATE
].value = CurrentHeaterCoolerStateValues.COOLING
helper.characteristics[
TARGET_HEATER_COOLER_STATE
].value = TargetHeaterCoolerStateValues.COOL
helper.characteristics[SWING_MODE].value = SwingModeValues.DISABLED
await helper.async_update(
ServicesTypes.HEATER_COOLER,
{
CharacteristicsTypes.TEMPERATURE_CURRENT: 21,
CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD: 19,
CharacteristicsTypes.CURRENT_HEATER_COOLER_STATE: CurrentHeaterCoolerStateValues.COOLING,
CharacteristicsTypes.TARGET_HEATER_COOLER_STATE: TargetHeaterCoolerStateValues.COOL,
CharacteristicsTypes.SWING_MODE: SwingModeValues.DISABLED,
},
)
state = await helper.poll_and_get_state()
assert state.state == HVAC_MODE_COOL
assert state.attributes["current_temperature"] == 21
# Simulate that we are in auto mode
helper.characteristics[HEATER_COOLER_TEMPERATURE_CURRENT].value = 21
helper.characteristics[TEMPERATURE_COOLING_THRESHOLD].value = 21
helper.characteristics[
CURRENT_HEATER_COOLER_STATE
].value = CurrentHeaterCoolerStateValues.COOLING
helper.characteristics[
TARGET_HEATER_COOLER_STATE
].value = TargetHeaterCoolerStateValues.AUTOMATIC
helper.characteristics[SWING_MODE].value = SwingModeValues.DISABLED
await helper.async_update(
ServicesTypes.HEATER_COOLER,
{
CharacteristicsTypes.TEMPERATURE_CURRENT: 21,
CharacteristicsTypes.TEMPERATURE_COOLING_THRESHOLD: 21,
CharacteristicsTypes.CURRENT_HEATER_COOLER_STATE: CurrentHeaterCoolerStateValues.COOLING,
CharacteristicsTypes.TARGET_HEATER_COOLER_STATE: TargetHeaterCoolerStateValues.AUTOMATIC,
CharacteristicsTypes.SWING_MODE: SwingModeValues.DISABLED,
},
)
state = await helper.poll_and_get_state()
assert state.state == HVAC_MODE_HEAT_COOL
@@ -713,15 +814,16 @@ async def test_heater_cooler_hvac_mode_vs_hvac_action(hass, utcnow):
# Simulate that current temperature is above target temp
# Heating might be on, but hvac_action currently 'off'
helper.characteristics[HEATER_COOLER_TEMPERATURE_CURRENT].value = 22
helper.characteristics[TEMPERATURE_HEATING_THRESHOLD].value = 21
helper.characteristics[
CURRENT_HEATER_COOLER_STATE
].value = CurrentHeaterCoolerStateValues.IDLE
helper.characteristics[
TARGET_HEATER_COOLER_STATE
].value = TargetHeaterCoolerStateValues.HEAT
helper.characteristics[SWING_MODE].value = SwingModeValues.DISABLED
await helper.async_update(
ServicesTypes.HEATER_COOLER,
{
CharacteristicsTypes.TEMPERATURE_CURRENT: 22,
CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD: 21,
CharacteristicsTypes.CURRENT_HEATER_COOLER_STATE: CurrentHeaterCoolerStateValues.IDLE,
CharacteristicsTypes.TARGET_HEATER_COOLER_STATE: TargetHeaterCoolerStateValues.HEAT,
CharacteristicsTypes.SWING_MODE: SwingModeValues.DISABLED,
},
)
state = await helper.poll_and_get_state()
assert state.state == "heat"
@@ -729,10 +831,16 @@ async def test_heater_cooler_hvac_mode_vs_hvac_action(hass, utcnow):
# Simulate that current temperature is below target temp
# Heating might be on and hvac_action currently 'heat'
helper.characteristics[HEATER_COOLER_TEMPERATURE_CURRENT].value = 19
helper.characteristics[
CURRENT_HEATER_COOLER_STATE
].value = CurrentHeaterCoolerStateValues.HEATING
await helper.async_update(
ServicesTypes.HEATER_COOLER,
{
CharacteristicsTypes.TEMPERATURE_CURRENT: 19,
CharacteristicsTypes.TEMPERATURE_HEATING_THRESHOLD: 21,
CharacteristicsTypes.CURRENT_HEATER_COOLER_STATE: CurrentHeaterCoolerStateValues.HEATING,
CharacteristicsTypes.TARGET_HEATER_COOLER_STATE: TargetHeaterCoolerStateValues.HEAT,
CharacteristicsTypes.SWING_MODE: SwingModeValues.DISABLED,
},
)
state = await helper.poll_and_get_state()
assert state.state == "heat"
@@ -749,7 +857,12 @@ async def test_heater_cooler_change_swing_mode(hass, utcnow):
{"entity_id": "climate.testdevice", "swing_mode": "vertical"},
blocking=True,
)
assert helper.characteristics[SWING_MODE].value == SwingModeValues.ENABLED
helper.async_assert_service_values(
ServicesTypes.HEATER_COOLER,
{
CharacteristicsTypes.SWING_MODE: SwingModeValues.ENABLED,
},
)
await hass.services.async_call(
DOMAIN,
@@ -757,20 +870,28 @@ async def test_heater_cooler_change_swing_mode(hass, utcnow):
{"entity_id": "climate.testdevice", "swing_mode": "off"},
blocking=True,
)
assert helper.characteristics[SWING_MODE].value == SwingModeValues.DISABLED
helper.async_assert_service_values(
ServicesTypes.HEATER_COOLER,
{
CharacteristicsTypes.SWING_MODE: SwingModeValues.DISABLED,
},
)
async def test_heater_cooler_turn_off(hass, utcnow):
"""Test that both hvac_action and hvac_mode return "off" when turned off."""
helper = await setup_test_component(hass, create_heater_cooler_service)
# Simulate that the device is turned off but CURRENT_HEATER_COOLER_STATE still returns HEATING/COOLING
helper.characteristics[HEATER_COOLER_ACTIVE].value = ActivationStateValues.INACTIVE
helper.characteristics[
CURRENT_HEATER_COOLER_STATE
].value = CurrentHeaterCoolerStateValues.HEATING
helper.characteristics[
TARGET_HEATER_COOLER_STATE
].value = TargetHeaterCoolerStateValues.HEAT
await helper.async_update(
ServicesTypes.HEATER_COOLER,
{
CharacteristicsTypes.ACTIVE: ActivationStateValues.INACTIVE,
CharacteristicsTypes.CURRENT_HEATER_COOLER_STATE: CurrentHeaterCoolerStateValues.HEATING,
CharacteristicsTypes.TARGET_HEATER_COOLER_STATE: TargetHeaterCoolerStateValues.HEAT,
},
)
state = await helper.poll_and_get_state()
assert state.state == "off"
assert state.attributes["hvac_action"] == "off"