1
0
mirror of https://github.com/home-assistant/core.git synced 2025-12-25 05:26:47 +00:00
Files
core/tests/components/tado/test_climate.py
2025-11-12 10:08:15 +01:00

136 lines
4.4 KiB
Python

"""The climate tests for the tado platform."""
from collections.abc import Generator
from unittest.mock import patch
from PyTado.interface.api.my_tado import TadoZone
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.components.climate import (
ATTR_HVAC_MODE,
DOMAIN as CLIMATE_DOMAIN,
SERVICE_SET_HVAC_MODE,
SERVICE_SET_TEMPERATURE,
HVACMode,
)
from homeassistant.components.tado import DOMAIN
from homeassistant.const import ATTR_ENTITY_ID, ATTR_TEMPERATURE, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from tests.common import MockConfigEntry, snapshot_platform
@pytest.fixture(autouse=True)
def setup_platforms() -> Generator[None]:
"""Set up the platforms for the tests."""
with patch("homeassistant.components.tado.PLATFORMS", [Platform.CLIMATE]):
yield
@pytest.mark.usefixtures("init_integration")
async def test_entities(
hass: HomeAssistant, entity_registry: er.EntityRegistry, snapshot: SnapshotAssertion
) -> None:
"""Test creation of climate entities."""
config_entry: MockConfigEntry = hass.config_entries.async_entries(DOMAIN)[0]
await snapshot_platform(hass, entity_registry, snapshot, config_entry.entry_id)
@pytest.mark.usefixtures("init_integration")
async def test_heater_set_temperature(
hass: HomeAssistant, snapshot: SnapshotAssertion
) -> None:
"""Test the set temperature of the heater."""
with (
patch(
"homeassistant.components.tado.PyTado.interface.api.Tado.set_zone_overlay"
) as mock_set_state,
):
await hass.services.async_call(
CLIMATE_DOMAIN,
SERVICE_SET_TEMPERATURE,
{ATTR_ENTITY_ID: "climate.baseboard_heater", ATTR_TEMPERATURE: 22.0},
blocking=True,
)
mock_set_state.assert_called_once()
snapshot.assert_match(mock_set_state.call_args)
@pytest.mark.parametrize(
("hvac_mode", "set_hvac_mode"),
[
(HVACMode.HEAT, "HEAT"),
(HVACMode.DRY, "DRY"),
(HVACMode.FAN_ONLY, "FAN"),
(HVACMode.COOL, "COOL"),
(HVACMode.OFF, "OFF"),
],
)
@pytest.mark.usefixtures("init_integration")
async def test_aircon_set_hvac_mode(
hass: HomeAssistant,
snapshot: SnapshotAssertion,
hvac_mode: HVACMode,
set_hvac_mode: str,
) -> None:
"""Test the set hvac mode of the air conditioning."""
with (
patch(
"homeassistant.components.tado.PyTado.interface.api.Tado.set_zone_overlay"
) as mock_set_state,
patch(
"homeassistant.components.tado.PyTado.interface.api.Tado.get_zone_state",
return_value=TadoZone(
zone_id=1,
current_temp=18.7,
connection=None,
current_temp_timestamp="2025-01-02T12:51:52.802Z",
current_humidity=45.1,
current_humidity_timestamp="2025-01-02T12:51:52.802Z",
is_away=False,
current_hvac_action="IDLE",
current_fan_speed=None,
current_fan_level=None,
current_hvac_mode=set_hvac_mode,
current_swing_mode="OFF",
current_vertical_swing_mode="OFF",
current_horizontal_swing_mode="OFF",
target_temp=16.0,
available=True,
power="ON",
link="ONLINE",
ac_power_timestamp=None,
heating_power_timestamp="2025-01-02T13:01:11.758Z",
ac_power=None,
heating_power=None,
heating_power_percentage=0.0,
tado_mode="HOME",
overlay_termination_type="MANUAL",
overlay_termination_timestamp=None,
default_overlay_termination_type="MANUAL",
default_overlay_termination_duration=None,
preparation=False,
open_window=False,
open_window_detected=False,
open_window_attr={},
precision=0.1,
),
),
):
await hass.services.async_call(
CLIMATE_DOMAIN,
SERVICE_SET_HVAC_MODE,
{ATTR_ENTITY_ID: "climate.air_conditioning", ATTR_HVAC_MODE: hvac_mode},
blocking=True,
)
mock_set_state.assert_called_once()
snapshot.assert_match(mock_set_state.call_args)