mirror of
https://github.com/home-assistant/core.git
synced 2025-12-25 05:26:47 +00:00
136 lines
4.4 KiB
Python
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)
|