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:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user