core/tests/components/incomfort/test_climate.py

94 lines
3.2 KiB
Python

"""Climate sensor tests for Intergas InComfort integration."""
from unittest.mock import AsyncMock, MagicMock, patch
import pytest
from syrupy import SnapshotAssertion
from homeassistant.components import climate
from homeassistant.components.incomfort.coordinator import InComfortData
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import ATTR_ENTITY_ID, ATTR_TEMPERATURE, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from .conftest import MOCK_HEATER_STATUS, MOCK_HEATER_STATUS_HEATING
from tests.common import snapshot_platform
@patch("homeassistant.components.incomfort.PLATFORMS", [Platform.CLIMATE])
@pytest.mark.parametrize(
"mock_room_status",
[
{"room_temp": 21.42, "setpoint": 18.0, "override": 19.0},
{"room_temp": 21.42, "setpoint": 18.0, "override": 0.0},
],
ids=["override", "zero_override"],
)
@pytest.mark.parametrize(
"mock_entry_options",
[None, {"legacy_setpoint_status": True}],
ids=["modern", "legacy"],
)
async def test_setup_platform(
hass: HomeAssistant,
mock_incomfort: MagicMock,
entity_registry: er.EntityRegistry,
snapshot: SnapshotAssertion,
mock_config_entry: ConfigEntry,
) -> None:
"""Test the incomfort entities are set up correctly.
Thermostats report 0.0 as override if no override is set
or when the setpoint has been changed manually,
Some older thermostats do not reset the override setpoint has been changed manually.
"""
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id)
@pytest.mark.parametrize(
("mock_heater_status", "hvac_action"),
[
(MOCK_HEATER_STATUS.copy(), climate.HVACAction.IDLE),
(MOCK_HEATER_STATUS_HEATING.copy(), climate.HVACAction.HEATING),
],
ids=["idle", "heating"],
)
async def test_hvac_state(
hass: HomeAssistant,
mock_incomfort: MagicMock,
mock_config_entry: ConfigEntry,
hvac_action: climate.HVACAction,
) -> None:
"""Test the HVAC state of the thermostat."""
await hass.config_entries.async_setup(mock_config_entry.entry_id)
state = hass.states.get("climate.thermostat_1")
assert state is not None
assert state.attributes["hvac_action"] is hvac_action
async def test_target_temp(
hass: HomeAssistant, mock_incomfort: MagicMock, mock_config_entry: ConfigEntry
) -> None:
"""Test changing the target temperature."""
await hass.config_entries.async_setup(mock_config_entry.entry_id)
state = hass.states.get("climate.thermostat_1")
assert state is not None
incomfort_data: InComfortData = mock_config_entry.runtime_data.incomfort_data
with patch.object(
incomfort_data.heaters[0].rooms[0], "set_override", AsyncMock()
) as mock_set_override:
await hass.services.async_call(
climate.DOMAIN,
climate.SERVICE_SET_TEMPERATURE,
service_data={
ATTR_ENTITY_ID: "climate.thermostat_1",
ATTR_TEMPERATURE: 19.0,
},
)
mock_set_override.assert_called_once_with(19.0)