Refactor evohome tests as per best practice (#129229)

Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
This commit is contained in:
David Bonnes 2024-10-29 12:29:10 +00:00 committed by GitHub
parent d68da74790
commit 39ba4cff2f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 1334 additions and 1248 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -9,3 +9,97 @@
}), }),
]) ])
# --- # ---
# name: test_setup_platform[botched][water_heater.domestic_hot_water-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'away_mode': 'on',
'current_temperature': 23,
'friendly_name': 'Domestic Hot Water',
'icon': 'mdi:thermometer-lines',
'max_temp': 60,
'min_temp': 43,
'operation_list': list([
'auto',
'on',
'off',
]),
'operation_mode': 'off',
'status': dict({
'active_faults': list([
]),
'dhw_id': '3933910',
'setpoints': dict({
'next_sp_from': '2024-07-10T13:00:00+01:00',
'next_sp_state': 'Off',
'this_sp_from': '2024-07-10T12:00:00+01:00',
'this_sp_state': 'On',
}),
'state_status': dict({
'mode': 'PermanentOverride',
'state': 'Off',
}),
'temperature_status': dict({
'is_available': True,
'temperature': 23.0,
}),
}),
'supported_features': <WaterHeaterEntityFeature: 6>,
'target_temp_high': None,
'target_temp_low': None,
'temperature': None,
}),
'context': <ANY>,
'entity_id': 'water_heater.domestic_hot_water',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'off',
})
# ---
# name: test_setup_platform[default][water_heater.domestic_hot_water-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'away_mode': 'on',
'current_temperature': 23,
'friendly_name': 'Domestic Hot Water',
'icon': 'mdi:thermometer-lines',
'max_temp': 60,
'min_temp': 43,
'operation_list': list([
'auto',
'on',
'off',
]),
'operation_mode': 'off',
'status': dict({
'active_faults': list([
]),
'dhw_id': '3933910',
'setpoints': dict({
'next_sp_from': '2024-07-10T13:00:00+01:00',
'next_sp_state': 'Off',
'this_sp_from': '2024-07-10T12:00:00+01:00',
'this_sp_state': 'On',
}),
'state_status': dict({
'mode': 'PermanentOverride',
'state': 'Off',
}),
'temperature_status': dict({
'is_available': True,
'temperature': 23.0,
}),
}),
'supported_features': <WaterHeaterEntityFeature: 6>,
'target_temp_high': None,
'target_temp_low': None,
'temperature': None,
}),
'context': <ANY>,
'entity_id': 'water_heater.domestic_hot_water',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'off',
})
# ---

View File

@ -1,4 +1,4 @@
"""The tests for climate entities of evohome. """The tests for the climate platform of evohome.
All evohome systems have controllers and at least one zone. All evohome systems have controllers and at least one zone.
""" """
@ -28,9 +28,31 @@ from homeassistant.const import (
) )
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from .conftest import setup_evohome
from .const import TEST_INSTALLS from .const import TEST_INSTALLS
@pytest.mark.parametrize("install", [*TEST_INSTALLS, "botched"])
async def test_setup_platform(
hass: HomeAssistant,
config: dict[str, str],
install: str,
snapshot: SnapshotAssertion,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test entities and their states after setup of evohome."""
# Cannot use the evohome fixture, as need to set dtm first
# - some extended state attrs are relative the current time
freezer.move_to("2024-07-10T12:00:00Z")
async for _ in setup_evohome(hass, config, install=install):
pass
for x in hass.states.async_all(Platform.CLIMATE):
assert x == snapshot(name=f"{x.entity_id}-state")
@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,

View File

@ -8,7 +8,6 @@ from unittest.mock import patch
from evohomeasync2 import EvohomeClient, exceptions as exc from evohomeasync2 import EvohomeClient, exceptions as exc
from evohomeasync2.broker import _ERR_MSG_LOOKUP_AUTH, _ERR_MSG_LOOKUP_BASE from evohomeasync2.broker import _ERR_MSG_LOOKUP_AUTH, _ERR_MSG_LOOKUP_BASE
from freezegun.api import FrozenDateTimeFactory
import pytest import pytest
from syrupy import SnapshotAssertion from syrupy import SnapshotAssertion
@ -16,29 +15,8 @@ from homeassistant.components.evohome import DOMAIN, EvoService
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 .conftest import setup_evohome
from .const import TEST_INSTALLS from .const import TEST_INSTALLS
@pytest.mark.parametrize("install", [*TEST_INSTALLS, "botched"])
async def test_entities(
hass: HomeAssistant,
config: dict[str, str],
install: str,
snapshot: SnapshotAssertion,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test entities and state after setup of a Honeywell TCC-compatible system."""
# some extended state attrs are relative the current time
freezer.move_to("2024-07-10T12:00:00Z")
async for _ in setup_evohome(hass, config, install=install):
pass
assert hass.states.async_all() == snapshot
SETUP_FAILED_ANTICIPATED = ( SETUP_FAILED_ANTICIPATED = (
"homeassistant.setup", "homeassistant.setup",
logging.ERROR, logging.ERROR,
@ -148,6 +126,20 @@ async def test_client_request_failure_v2(
) )
@pytest.mark.parametrize("install", [*TEST_INSTALLS, "botched"])
async def test_setup(
hass: HomeAssistant,
evohome: EvohomeClient,
snapshot: SnapshotAssertion,
) -> None:
"""Test services after setup of evohome.
Registered services vary by the type of system.
"""
assert hass.services.async_services_for_domain(DOMAIN).keys() == snapshot
@pytest.mark.parametrize("install", ["default"]) @pytest.mark.parametrize("install", ["default"])
async def test_service_refresh_system( async def test_service_refresh_system(
hass: HomeAssistant, hass: HomeAssistant,

View File

@ -1,4 +1,4 @@
"""The tests for water_heater entities of evohome. """The tests for the water_heater platform of evohome.
Not all evohome systems will have a DHW zone. Not all evohome systems will have a DHW zone.
""" """
@ -27,11 +27,33 @@ from homeassistant.const import (
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from .conftest import setup_evohome
from .const import TEST_INSTALLS_WITH_DHW from .const import TEST_INSTALLS_WITH_DHW
DHW_ENTITY_ID = "water_heater.domestic_hot_water" DHW_ENTITY_ID = "water_heater.domestic_hot_water"
@pytest.mark.parametrize("install", [*TEST_INSTALLS_WITH_DHW, "botched"])
async def test_setup_platform(
hass: HomeAssistant,
config: dict[str, str],
install: str,
snapshot: SnapshotAssertion,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test entities and their states after setup of evohome."""
# Cannot use the evohome fixture, as need to set dtm first
# - some extended state attrs are relative the current time
freezer.move_to("2024-07-10T12:00:00Z")
async for _ in setup_evohome(hass, config, install=install):
pass
for x in hass.states.async_all(Platform.WATER_HEATER):
assert x == snapshot(name=f"{x.entity_id}-state")
@pytest.mark.parametrize("install", TEST_INSTALLS_WITH_DHW) @pytest.mark.parametrize("install", TEST_INSTALLS_WITH_DHW)
async def test_set_operation_mode( async def test_set_operation_mode(
hass: HomeAssistant, hass: HomeAssistant,