mirror of
https://github.com/home-assistant/core.git
synced 2025-07-26 22:57:17 +00:00
Switch to using a fixture for evohome Climate tests (of zones) (#129100)
This commit is contained in:
parent
78116f1596
commit
76aa69b9ac
@ -11,12 +11,14 @@ from unittest.mock import MagicMock, patch
|
|||||||
from aiohttp import ClientSession
|
from aiohttp import ClientSession
|
||||||
from evohomeasync2 import EvohomeClient
|
from evohomeasync2 import EvohomeClient
|
||||||
from evohomeasync2.broker import Broker
|
from evohomeasync2.broker import Broker
|
||||||
|
from evohomeasync2.zone import Zone
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from homeassistant.components.evohome import CONF_PASSWORD, CONF_USERNAME, DOMAIN
|
from homeassistant.components.evohome import CONF_PASSWORD, CONF_USERNAME, DOMAIN
|
||||||
|
from homeassistant.const import Platform
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
from homeassistant.util import dt as dt_util
|
from homeassistant.util import dt as dt_util, slugify
|
||||||
from homeassistant.util.json import JsonArrayType, JsonObjectType
|
from homeassistant.util.json import JsonArrayType, JsonObjectType
|
||||||
|
|
||||||
from .const import ACCESS_TOKEN, REFRESH_TOKEN, USERNAME
|
from .const import ACCESS_TOKEN, REFRESH_TOKEN, USERNAME
|
||||||
@ -173,3 +175,18 @@ async def evohome(
|
|||||||
|
|
||||||
async for mock_client in setup_evohome(hass, config, install=install):
|
async for mock_client in setup_evohome(hass, config, install=install):
|
||||||
yield mock_client
|
yield mock_client
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
async def zone_id(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
config: dict[str, str],
|
||||||
|
install: MagicMock,
|
||||||
|
) -> AsyncGenerator[str]:
|
||||||
|
"""Return the entity_id of the evohome integration' first Climate zone."""
|
||||||
|
|
||||||
|
async for mock_client in setup_evohome(hass, config, install=install):
|
||||||
|
evo: EvohomeClient = mock_client.return_value
|
||||||
|
zone: Zone = list(evo._get_single_tcs().zones.values())[0]
|
||||||
|
|
||||||
|
yield f"{Platform.CLIMATE}.{slugify(zone.name)}"
|
||||||
|
@ -2,189 +2,170 @@
|
|||||||
# name: test_zone_set_hvac_mode[default]
|
# name: test_zone_set_hvac_mode[default]
|
||||||
list([
|
list([
|
||||||
tuple(
|
tuple(
|
||||||
dict({
|
5.0,
|
||||||
'HeatSetpointValue': 5.0,
|
|
||||||
'setpointMode': <ZoneMode.PERMANENT_OVERRIDE: 'PermanentOverride'>,
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
# name: test_zone_set_hvac_mode[h032585]
|
# name: test_zone_set_hvac_mode[h032585]
|
||||||
list([
|
list([
|
||||||
tuple(
|
tuple(
|
||||||
dict({
|
4.5,
|
||||||
'HeatSetpointValue': 4.5,
|
|
||||||
'setpointMode': <ZoneMode.PERMANENT_OVERRIDE: 'PermanentOverride'>,
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
# name: test_zone_set_hvac_mode[h099625]
|
# name: test_zone_set_hvac_mode[h099625]
|
||||||
list([
|
list([
|
||||||
tuple(
|
tuple(
|
||||||
dict({
|
5.0,
|
||||||
'HeatSetpointValue': 5.0,
|
|
||||||
'setpointMode': <ZoneMode.PERMANENT_OVERRIDE: 'PermanentOverride'>,
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
# name: test_zone_set_hvac_mode[minimal]
|
# name: test_zone_set_hvac_mode[minimal]
|
||||||
list([
|
list([
|
||||||
tuple(
|
tuple(
|
||||||
dict({
|
5.0,
|
||||||
'HeatSetpointValue': 5.0,
|
|
||||||
'setpointMode': <ZoneMode.PERMANENT_OVERRIDE: 'PermanentOverride'>,
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
# name: test_zone_set_hvac_mode[sys_004]
|
# name: test_zone_set_hvac_mode[sys_004]
|
||||||
list([
|
list([
|
||||||
tuple(
|
tuple(
|
||||||
dict({
|
5.0,
|
||||||
'HeatSetpointValue': 5.0,
|
|
||||||
'setpointMode': <ZoneMode.PERMANENT_OVERRIDE: 'PermanentOverride'>,
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
# name: test_zone_set_preset_mode[default]
|
# name: test_zone_set_preset_mode[default]
|
||||||
list([
|
list([
|
||||||
tuple(
|
tuple(
|
||||||
dict({
|
17.0,
|
||||||
'HeatSetpointValue': 17.0,
|
|
||||||
'setpointMode': <ZoneMode.PERMANENT_OVERRIDE: 'PermanentOverride'>,
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
tuple(
|
tuple(
|
||||||
dict({
|
17.0,
|
||||||
'HeatSetpointValue': 17.0,
|
|
||||||
'setpointMode': <ZoneMode.TEMPORARY_OVERRIDE: 'TemporaryOverride'>,
|
|
||||||
'timeUntil': '2024-07-10T21:10:00Z',
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
|
dict({
|
||||||
|
'until': datetime.datetime(2024, 7, 10, 21, 10, tzinfo=datetime.timezone.utc),
|
||||||
|
}),
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
# name: test_zone_set_preset_mode[h032585]
|
# name: test_zone_set_preset_mode[h032585]
|
||||||
list([
|
list([
|
||||||
tuple(
|
tuple(
|
||||||
dict({
|
21.5,
|
||||||
'HeatSetpointValue': 21.5,
|
|
||||||
'setpointMode': <ZoneMode.PERMANENT_OVERRIDE: 'PermanentOverride'>,
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
tuple(
|
tuple(
|
||||||
dict({
|
21.5,
|
||||||
'HeatSetpointValue': 21.5,
|
|
||||||
'setpointMode': <ZoneMode.TEMPORARY_OVERRIDE: 'TemporaryOverride'>,
|
|
||||||
'timeUntil': '2024-07-10T21:10:00Z',
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
|
dict({
|
||||||
|
'until': datetime.datetime(2024, 7, 10, 21, 10, tzinfo=datetime.timezone.utc),
|
||||||
|
}),
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
# name: test_zone_set_preset_mode[h099625]
|
# name: test_zone_set_preset_mode[h099625]
|
||||||
list([
|
list([
|
||||||
tuple(
|
tuple(
|
||||||
dict({
|
21.5,
|
||||||
'HeatSetpointValue': 21.5,
|
|
||||||
'setpointMode': <ZoneMode.PERMANENT_OVERRIDE: 'PermanentOverride'>,
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
tuple(
|
tuple(
|
||||||
dict({
|
21.5,
|
||||||
'HeatSetpointValue': 21.5,
|
|
||||||
'setpointMode': <ZoneMode.TEMPORARY_OVERRIDE: 'TemporaryOverride'>,
|
|
||||||
'timeUntil': '2024-07-10T19:10:00Z',
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
|
dict({
|
||||||
|
'until': datetime.datetime(2024, 7, 10, 19, 10, tzinfo=datetime.timezone.utc),
|
||||||
|
}),
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
# name: test_zone_set_preset_mode[minimal]
|
# name: test_zone_set_preset_mode[minimal]
|
||||||
list([
|
list([
|
||||||
tuple(
|
tuple(
|
||||||
dict({
|
17.0,
|
||||||
'HeatSetpointValue': 17.0,
|
|
||||||
'setpointMode': <ZoneMode.PERMANENT_OVERRIDE: 'PermanentOverride'>,
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
tuple(
|
tuple(
|
||||||
dict({
|
17.0,
|
||||||
'HeatSetpointValue': 17.0,
|
|
||||||
'setpointMode': <ZoneMode.TEMPORARY_OVERRIDE: 'TemporaryOverride'>,
|
|
||||||
'timeUntil': '2024-07-10T21:10:00Z',
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
|
dict({
|
||||||
|
'until': datetime.datetime(2024, 7, 10, 21, 10, tzinfo=datetime.timezone.utc),
|
||||||
|
}),
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
# name: test_zone_set_preset_mode[sys_004]
|
# name: test_zone_set_preset_mode[sys_004]
|
||||||
list([
|
list([
|
||||||
tuple(
|
tuple(
|
||||||
dict({
|
15.0,
|
||||||
'HeatSetpointValue': 15.0,
|
|
||||||
'setpointMode': <ZoneMode.PERMANENT_OVERRIDE: 'PermanentOverride'>,
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
tuple(
|
tuple(
|
||||||
dict({
|
15.0,
|
||||||
'HeatSetpointValue': 15.0,
|
|
||||||
'setpointMode': <ZoneMode.TEMPORARY_OVERRIDE: 'TemporaryOverride'>,
|
|
||||||
'timeUntil': '2024-07-10T20:10:00Z',
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
|
dict({
|
||||||
|
'until': datetime.datetime(2024, 7, 10, 20, 10, tzinfo=datetime.timezone.utc),
|
||||||
|
}),
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
# name: test_zone_set_temperature[default]
|
# name: test_zone_set_temperature[default]
|
||||||
list([
|
list([
|
||||||
tuple(
|
|
||||||
dict({
|
dict({
|
||||||
'HeatSetpointValue': 19.1,
|
'until': datetime.datetime(2024, 7, 10, 21, 10, tzinfo=datetime.timezone.utc),
|
||||||
'setpointMode': <ZoneMode.TEMPORARY_OVERRIDE: 'TemporaryOverride'>,
|
|
||||||
'timeUntil': '2024-07-10T21:10:00Z',
|
|
||||||
}),
|
}),
|
||||||
),
|
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
# name: test_zone_set_temperature[h032585]
|
# name: test_zone_set_temperature[h032585]
|
||||||
list([
|
list([
|
||||||
tuple(
|
|
||||||
dict({
|
dict({
|
||||||
'HeatSetpointValue': 19.1,
|
'until': datetime.datetime(2024, 7, 10, 21, 10, tzinfo=datetime.timezone.utc),
|
||||||
'setpointMode': <ZoneMode.TEMPORARY_OVERRIDE: 'TemporaryOverride'>,
|
|
||||||
'timeUntil': '2024-07-10T21:10:00Z',
|
|
||||||
}),
|
}),
|
||||||
),
|
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
# name: test_zone_set_temperature[h099625]
|
# name: test_zone_set_temperature[h099625]
|
||||||
list([
|
list([
|
||||||
tuple(
|
|
||||||
dict({
|
dict({
|
||||||
'HeatSetpointValue': 19.1,
|
'until': datetime.datetime(2024, 7, 10, 19, 10, tzinfo=datetime.timezone.utc),
|
||||||
'setpointMode': <ZoneMode.TEMPORARY_OVERRIDE: 'TemporaryOverride'>,
|
|
||||||
'timeUntil': '2024-07-10T19:10:00Z',
|
|
||||||
}),
|
}),
|
||||||
),
|
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
# name: test_zone_set_temperature[minimal]
|
# name: test_zone_set_temperature[minimal]
|
||||||
list([
|
list([
|
||||||
tuple(
|
|
||||||
dict({
|
dict({
|
||||||
'HeatSetpointValue': 19.1,
|
'until': datetime.datetime(2024, 7, 10, 21, 10, tzinfo=datetime.timezone.utc),
|
||||||
'setpointMode': <ZoneMode.TEMPORARY_OVERRIDE: 'TemporaryOverride'>,
|
|
||||||
'timeUntil': '2024-07-10T21:10:00Z',
|
|
||||||
}),
|
}),
|
||||||
),
|
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
# name: test_zone_set_temperature[sys_004]
|
# name: test_zone_set_temperature[sys_004]
|
||||||
list([
|
list([
|
||||||
tuple(
|
|
||||||
dict({
|
dict({
|
||||||
'HeatSetpointValue': 19.1,
|
'until': None,
|
||||||
'setpointMode': <ZoneMode.PERMANENT_OVERRIDE: 'PermanentOverride'>,
|
|
||||||
}),
|
}),
|
||||||
|
])
|
||||||
|
# ---
|
||||||
|
# name: test_zone_turn_off[default]
|
||||||
|
list([
|
||||||
|
tuple(
|
||||||
|
5.0,
|
||||||
|
),
|
||||||
|
])
|
||||||
|
# ---
|
||||||
|
# name: test_zone_turn_off[h032585]
|
||||||
|
list([
|
||||||
|
tuple(
|
||||||
|
4.5,
|
||||||
|
),
|
||||||
|
])
|
||||||
|
# ---
|
||||||
|
# name: test_zone_turn_off[h099625]
|
||||||
|
list([
|
||||||
|
tuple(
|
||||||
|
5.0,
|
||||||
|
),
|
||||||
|
])
|
||||||
|
# ---
|
||||||
|
# name: test_zone_turn_off[minimal]
|
||||||
|
list([
|
||||||
|
tuple(
|
||||||
|
5.0,
|
||||||
|
),
|
||||||
|
])
|
||||||
|
# ---
|
||||||
|
# name: test_zone_turn_off[sys_004]
|
||||||
|
list([
|
||||||
|
tuple(
|
||||||
|
5.0,
|
||||||
),
|
),
|
||||||
])
|
])
|
||||||
# ---
|
# ---
|
||||||
|
@ -11,76 +11,67 @@ from freezegun.api import FrozenDateTimeFactory
|
|||||||
import pytest
|
import pytest
|
||||||
from syrupy import SnapshotAssertion
|
from syrupy import SnapshotAssertion
|
||||||
|
|
||||||
from homeassistant.components.climate import HVACMode
|
from homeassistant.components.climate import (
|
||||||
from homeassistant.components.evohome import DOMAIN
|
ATTR_HVAC_MODE,
|
||||||
from homeassistant.components.evohome.climate import EvoZone
|
ATTR_PRESET_MODE,
|
||||||
from homeassistant.components.evohome.coordinator import EvoBroker
|
SERVICE_SET_HVAC_MODE,
|
||||||
from homeassistant.const import Platform
|
SERVICE_SET_PRESET_MODE,
|
||||||
|
SERVICE_SET_TEMPERATURE,
|
||||||
|
HVACMode,
|
||||||
|
)
|
||||||
|
from homeassistant.const import (
|
||||||
|
ATTR_ENTITY_ID,
|
||||||
|
ATTR_TEMPERATURE,
|
||||||
|
SERVICE_TURN_OFF,
|
||||||
|
SERVICE_TURN_ON,
|
||||||
|
Platform,
|
||||||
|
)
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.helpers import entity_registry as er
|
|
||||||
from homeassistant.helpers.entity_component import EntityComponent
|
|
||||||
from homeassistant.util import dt as dt_util
|
|
||||||
|
|
||||||
from .conftest import setup_evohome
|
|
||||||
from .const import TEST_INSTALLS
|
from .const import TEST_INSTALLS
|
||||||
|
|
||||||
|
|
||||||
def get_zone_entity(hass: HomeAssistant) -> EvoZone:
|
|
||||||
"""Return the entity of the first zone of the evohome system."""
|
|
||||||
|
|
||||||
broker: EvoBroker = hass.data[DOMAIN]["broker"]
|
|
||||||
|
|
||||||
unique_id = broker.tcs._zones[0]._id
|
|
||||||
if unique_id == broker.tcs._id:
|
|
||||||
unique_id += "z" # special case of merged controller/zone
|
|
||||||
|
|
||||||
entity_registry = er.async_get(hass)
|
|
||||||
entity_id = entity_registry.async_get_entity_id(Platform.CLIMATE, DOMAIN, unique_id)
|
|
||||||
|
|
||||||
component: EntityComponent = hass.data.get(Platform.CLIMATE) # type: ignore[assignment]
|
|
||||||
return next(e for e in component.entities if e.entity_id == entity_id) # type: ignore[return-value]
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("install", TEST_INSTALLS)
|
@pytest.mark.parametrize("install", TEST_INSTALLS)
|
||||||
async def test_zone_set_hvac_mode(
|
async def test_zone_set_hvac_mode(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: dict[str, str],
|
zone_id: str,
|
||||||
install: str,
|
|
||||||
snapshot: SnapshotAssertion,
|
snapshot: SnapshotAssertion,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test climate methods of a evohome-compatible zone."""
|
"""Test SERVICE_SET_HVAC_MODE of an evohome zone Climate entity."""
|
||||||
|
|
||||||
results = []
|
results = []
|
||||||
|
|
||||||
async for _ in setup_evohome(hass, config, install=install):
|
# SERVICE_SET_HVAC_MODE: HVACMode.HEAT
|
||||||
zone = get_zone_entity(hass)
|
with patch("evohomeasync2.zone.Zone.reset_mode") as mock_fcn:
|
||||||
|
await hass.services.async_call(
|
||||||
assert zone.hvac_modes == [HVACMode.OFF, HVACMode.HEAT]
|
Platform.CLIMATE,
|
||||||
|
SERVICE_SET_HVAC_MODE,
|
||||||
# set_hvac_mode(HVACMode.HEAT): FollowSchedule
|
{
|
||||||
with patch("evohomeasync2.zone.Zone._set_mode") as mock_fcn:
|
ATTR_ENTITY_ID: zone_id,
|
||||||
await zone.async_set_hvac_mode(HVACMode.HEAT)
|
ATTR_HVAC_MODE: HVACMode.HEAT,
|
||||||
|
},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
|
||||||
assert mock_fcn.await_count == 1
|
assert mock_fcn.await_count == 1
|
||||||
assert install != "default" or mock_fcn.await_args.args == (
|
assert mock_fcn.await_args.args == ()
|
||||||
{
|
|
||||||
"setpointMode": "FollowSchedule",
|
|
||||||
},
|
|
||||||
)
|
|
||||||
assert mock_fcn.await_args.kwargs == {}
|
assert mock_fcn.await_args.kwargs == {}
|
||||||
|
|
||||||
# set_hvac_mode(HVACMode.OFF): PermanentOverride, minHeatSetpoint
|
# SERVICE_SET_HVAC_MODE: HVACMode.OFF
|
||||||
with patch("evohomeasync2.zone.Zone._set_mode") as mock_fcn:
|
with patch("evohomeasync2.zone.Zone.set_temperature") as mock_fcn:
|
||||||
await zone.async_set_hvac_mode(HVACMode.OFF)
|
await hass.services.async_call(
|
||||||
|
Platform.CLIMATE,
|
||||||
|
SERVICE_SET_HVAC_MODE,
|
||||||
|
{
|
||||||
|
ATTR_ENTITY_ID: zone_id,
|
||||||
|
ATTR_HVAC_MODE: HVACMode.OFF,
|
||||||
|
},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
|
||||||
assert mock_fcn.await_count == 1
|
assert mock_fcn.await_count == 1
|
||||||
assert install != "default" or mock_fcn.await_args.args == (
|
assert mock_fcn.await_args.args != () # minimum target temp
|
||||||
{
|
assert mock_fcn.await_args.kwargs == {"until": None}
|
||||||
"setpointMode": "PermanentOverride",
|
|
||||||
"HeatSetpointValue": 5.0, # varies by install
|
|
||||||
},
|
|
||||||
)
|
|
||||||
assert mock_fcn.await_args.kwargs == {}
|
|
||||||
|
|
||||||
results.append(mock_fcn.await_args.args)
|
results.append(mock_fcn.await_args.args)
|
||||||
|
|
||||||
@ -90,63 +81,67 @@ async def test_zone_set_hvac_mode(
|
|||||||
@pytest.mark.parametrize("install", TEST_INSTALLS)
|
@pytest.mark.parametrize("install", TEST_INSTALLS)
|
||||||
async def test_zone_set_preset_mode(
|
async def test_zone_set_preset_mode(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: dict[str, str],
|
zone_id: str,
|
||||||
install: str,
|
|
||||||
freezer: FrozenDateTimeFactory,
|
freezer: FrozenDateTimeFactory,
|
||||||
snapshot: SnapshotAssertion,
|
snapshot: SnapshotAssertion,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test climate methods of a evohome-compatible zone."""
|
"""Test SERVICE_SET_PRESET_MODE of an evohome zone Climate entity."""
|
||||||
|
|
||||||
freezer.move_to("2024-07-10T12:00:00Z")
|
freezer.move_to("2024-07-10T12:00:00Z")
|
||||||
results = []
|
results = []
|
||||||
|
|
||||||
async for _ in setup_evohome(hass, config, install=install):
|
# SERVICE_SET_PRESET_MODE: none
|
||||||
zone = get_zone_entity(hass)
|
with patch("evohomeasync2.zone.Zone.reset_mode") as mock_fcn:
|
||||||
|
await hass.services.async_call(
|
||||||
assert zone.preset_modes == ["none", "temporary", "permanent"]
|
Platform.CLIMATE,
|
||||||
|
SERVICE_SET_PRESET_MODE,
|
||||||
# set_preset_mode(none): FollowSchedule
|
{
|
||||||
with patch("evohomeasync2.zone.Zone._set_mode") as mock_fcn:
|
ATTR_ENTITY_ID: zone_id,
|
||||||
await zone.async_set_preset_mode("none")
|
ATTR_PRESET_MODE: "none",
|
||||||
|
},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
|
||||||
assert mock_fcn.await_count == 1
|
assert mock_fcn.await_count == 1
|
||||||
assert mock_fcn.await_args.args == (
|
assert mock_fcn.await_args.args == ()
|
||||||
{
|
|
||||||
"setpointMode": "FollowSchedule",
|
|
||||||
},
|
|
||||||
)
|
|
||||||
assert mock_fcn.await_args.kwargs == {}
|
assert mock_fcn.await_args.kwargs == {}
|
||||||
|
|
||||||
# set_preset_mode(permanent): PermanentOverride
|
# SERVICE_SET_PRESET_MODE: permanent
|
||||||
with patch("evohomeasync2.zone.Zone._set_mode") as mock_fcn:
|
with patch("evohomeasync2.zone.Zone.set_temperature") as mock_fcn:
|
||||||
await zone.async_set_preset_mode("permanent")
|
await hass.services.async_call(
|
||||||
|
Platform.CLIMATE,
|
||||||
|
SERVICE_SET_PRESET_MODE,
|
||||||
|
{
|
||||||
|
ATTR_ENTITY_ID: zone_id,
|
||||||
|
ATTR_PRESET_MODE: "permanent",
|
||||||
|
},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
|
||||||
assert mock_fcn.await_count == 1
|
assert mock_fcn.await_count == 1
|
||||||
assert install != "default" or mock_fcn.await_args.args == (
|
assert mock_fcn.await_args.args != () # current target temp
|
||||||
{
|
assert mock_fcn.await_args.kwargs == {"until": None}
|
||||||
"setpointMode": "PermanentOverride",
|
|
||||||
"HeatSetpointValue": 17.0, # varies by install
|
|
||||||
},
|
|
||||||
)
|
|
||||||
assert mock_fcn.await_args.kwargs == {}
|
|
||||||
|
|
||||||
results.append(mock_fcn.await_args.args)
|
results.append(mock_fcn.await_args.args)
|
||||||
|
|
||||||
# set_preset_mode(permanent): TemporaryOverride
|
# SERVICE_SET_PRESET_MODE: temporary
|
||||||
with patch("evohomeasync2.zone.Zone._set_mode") as mock_fcn:
|
with patch("evohomeasync2.zone.Zone.set_temperature") as mock_fcn:
|
||||||
await zone.async_set_preset_mode("temporary")
|
await hass.services.async_call(
|
||||||
|
Platform.CLIMATE,
|
||||||
|
SERVICE_SET_PRESET_MODE,
|
||||||
|
{
|
||||||
|
ATTR_ENTITY_ID: zone_id,
|
||||||
|
ATTR_PRESET_MODE: "temporary",
|
||||||
|
},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
|
||||||
assert mock_fcn.await_count == 1
|
assert mock_fcn.await_count == 1
|
||||||
assert install != "default" or mock_fcn.await_args.args == (
|
assert mock_fcn.await_args.args != () # current target temp
|
||||||
{
|
assert mock_fcn.await_args.kwargs != {} # next setpoint dtm
|
||||||
"setpointMode": "TemporaryOverride",
|
|
||||||
"HeatSetpointValue": 17.0, # varies by install
|
|
||||||
"timeUntil": "2024-07-10T21:10:00Z", # varies by install
|
|
||||||
},
|
|
||||||
)
|
|
||||||
assert mock_fcn.await_args.kwargs == {}
|
|
||||||
|
|
||||||
results.append(mock_fcn.await_args.args)
|
results.append(mock_fcn.await_args.args)
|
||||||
|
results.append(mock_fcn.await_args.kwargs)
|
||||||
|
|
||||||
assert results == snapshot
|
assert results == snapshot
|
||||||
|
|
||||||
@ -154,50 +149,84 @@ async def test_zone_set_preset_mode(
|
|||||||
@pytest.mark.parametrize("install", TEST_INSTALLS)
|
@pytest.mark.parametrize("install", TEST_INSTALLS)
|
||||||
async def test_zone_set_temperature(
|
async def test_zone_set_temperature(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
config: dict[str, str],
|
zone_id: str,
|
||||||
install: str,
|
|
||||||
freezer: FrozenDateTimeFactory,
|
freezer: FrozenDateTimeFactory,
|
||||||
snapshot: SnapshotAssertion,
|
snapshot: SnapshotAssertion,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test climate methods of a evohome-compatible zone."""
|
"""Test SERVICE_SET_TEMPERATURE of an evohome zone Climate entity."""
|
||||||
|
|
||||||
freezer.move_to("2024-07-10T12:00:00Z")
|
freezer.move_to("2024-07-10T12:00:00Z")
|
||||||
results = []
|
results = []
|
||||||
|
|
||||||
async for _ in setup_evohome(hass, config, install=install):
|
# SERVICE_SET_TEMPERATURE: temperature
|
||||||
zone = get_zone_entity(hass)
|
with patch("evohomeasync2.zone.Zone.set_temperature") as mock_fcn:
|
||||||
|
await hass.services.async_call(
|
||||||
# set_temperature(temp): TemporaryOverride, advanced
|
Platform.CLIMATE,
|
||||||
with patch("evohomeasync2.zone.Zone._set_mode") as mock_fcn:
|
SERVICE_SET_TEMPERATURE,
|
||||||
await zone.async_set_temperature(temperature=19.1)
|
{
|
||||||
|
ATTR_ENTITY_ID: zone_id,
|
||||||
|
ATTR_TEMPERATURE: 19.1,
|
||||||
|
},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
|
||||||
assert mock_fcn.await_count == 1
|
assert mock_fcn.await_count == 1
|
||||||
assert install != "default" or mock_fcn.await_args.args == (
|
assert mock_fcn.await_args.args == (19.1,)
|
||||||
|
assert mock_fcn.await_args.kwargs != {} # next setpoint dtm
|
||||||
|
|
||||||
|
results.append(mock_fcn.await_args.kwargs)
|
||||||
|
|
||||||
|
assert results == snapshot
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("install", TEST_INSTALLS)
|
||||||
|
async def test_zone_turn_off(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
zone_id: str,
|
||||||
|
snapshot: SnapshotAssertion,
|
||||||
|
) -> None:
|
||||||
|
"""Test SERVICE_TURN_OFF of a evohome zone Climate entity."""
|
||||||
|
|
||||||
|
results = []
|
||||||
|
|
||||||
|
# SERVICE_TURN_OFF
|
||||||
|
with patch("evohomeasync2.zone.Zone.set_temperature") as mock_fcn:
|
||||||
|
await hass.services.async_call(
|
||||||
|
Platform.CLIMATE,
|
||||||
|
SERVICE_TURN_OFF,
|
||||||
{
|
{
|
||||||
"setpointMode": "TemporaryOverride",
|
ATTR_ENTITY_ID: zone_id,
|
||||||
"HeatSetpointValue": 19.1,
|
|
||||||
"timeUntil": "2024-07-10T21:10:00Z", # varies by install
|
|
||||||
},
|
},
|
||||||
|
blocking=True,
|
||||||
)
|
)
|
||||||
assert mock_fcn.await_args.kwargs == {}
|
|
||||||
|
assert mock_fcn.await_count == 1
|
||||||
|
assert mock_fcn.await_args.args != () # minimum target temp
|
||||||
|
assert mock_fcn.await_args.kwargs == {"until": None}
|
||||||
|
|
||||||
results.append(mock_fcn.await_args.args)
|
results.append(mock_fcn.await_args.args)
|
||||||
|
|
||||||
# set_temperature(temp, until): TemporaryOverride, until
|
assert results == snapshot
|
||||||
with patch("evohomeasync2.zone.Zone._set_mode") as mock_fcn:
|
|
||||||
await zone.async_set_temperature(
|
|
||||||
temperature=19.2,
|
@pytest.mark.parametrize("install", TEST_INSTALLS)
|
||||||
until=dt_util.parse_datetime("2024-07-10T13:30:00Z"),
|
async def test_zone_turn_on(
|
||||||
|
hass: HomeAssistant,
|
||||||
|
zone_id: str,
|
||||||
|
) -> None:
|
||||||
|
"""Test SERVICE_TURN_ON of a evohome zone Climate entity."""
|
||||||
|
|
||||||
|
# SERVICE_TURN_ON
|
||||||
|
with patch("evohomeasync2.zone.Zone.reset_mode") as mock_fcn:
|
||||||
|
await hass.services.async_call(
|
||||||
|
Platform.CLIMATE,
|
||||||
|
SERVICE_TURN_ON,
|
||||||
|
{
|
||||||
|
ATTR_ENTITY_ID: zone_id,
|
||||||
|
},
|
||||||
|
blocking=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
assert mock_fcn.await_count == 1
|
assert mock_fcn.await_count == 1
|
||||||
assert mock_fcn.await_args.args == (
|
assert mock_fcn.await_args.args == ()
|
||||||
{
|
|
||||||
"setpointMode": "TemporaryOverride",
|
|
||||||
"HeatSetpointValue": 19.2,
|
|
||||||
"timeUntil": "2024-07-10T13:30:00Z",
|
|
||||||
},
|
|
||||||
)
|
|
||||||
assert mock_fcn.await_args.kwargs == {}
|
assert mock_fcn.await_args.kwargs == {}
|
||||||
|
|
||||||
assert results == snapshot
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user