94 lines
3.2 KiB
Python
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)
|