mirror of https://github.com/home-assistant/core
94 lines
3.1 KiB
Python
94 lines
3.1 KiB
Python
"""Tests for Intergas InComfort integration."""
|
|
|
|
from datetime import timedelta
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from aiohttp import ClientResponseError
|
|
from freezegun.api import FrozenDateTimeFactory
|
|
from incomfortclient import IncomfortError
|
|
import pytest
|
|
|
|
from homeassistant.components.incomfort.coordinator import UPDATE_INTERVAL
|
|
from homeassistant.config_entries import ConfigEntry, ConfigEntryState
|
|
from homeassistant.const import STATE_UNAVAILABLE
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers import entity_registry as er
|
|
|
|
from tests.common import async_fire_time_changed
|
|
|
|
|
|
async def test_setup_platforms(
|
|
hass: HomeAssistant,
|
|
mock_incomfort: MagicMock,
|
|
entity_registry: er.EntityRegistry,
|
|
mock_config_entry: ConfigEntry,
|
|
) -> None:
|
|
"""Test the incomfort integration is set up correctly."""
|
|
await hass.config_entries.async_setup(mock_config_entry.entry_id)
|
|
assert mock_config_entry.state is ConfigEntryState.LOADED
|
|
|
|
|
|
async def test_coordinator_updates(
|
|
hass: HomeAssistant,
|
|
mock_incomfort: MagicMock,
|
|
freezer: FrozenDateTimeFactory,
|
|
mock_config_entry: ConfigEntry,
|
|
) -> None:
|
|
"""Test the incomfort coordinator is updating."""
|
|
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["current_temperature"] == 21.4
|
|
mock_incomfort().mock_room_status["room_temp"] = 20.91
|
|
|
|
state = hass.states.get("sensor.boiler_pressure")
|
|
assert state is not None
|
|
assert state.state == "1.86"
|
|
mock_incomfort().mock_heater_status["pressure"] = 1.84
|
|
|
|
freezer.tick(timedelta(seconds=UPDATE_INTERVAL + 5))
|
|
async_fire_time_changed(hass)
|
|
await hass.async_block_till_done(wait_background_tasks=True)
|
|
|
|
state = hass.states.get("climate.thermostat_1")
|
|
assert state is not None
|
|
assert state.attributes["current_temperature"] == 20.9
|
|
|
|
state = hass.states.get("sensor.boiler_pressure")
|
|
assert state is not None
|
|
assert state.state == "1.84"
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"exc",
|
|
[
|
|
IncomfortError(ClientResponseError(None, None, status=401)),
|
|
IncomfortError(ClientResponseError(None, None, status=500)),
|
|
IncomfortError(ValueError("some_error")),
|
|
TimeoutError,
|
|
],
|
|
)
|
|
async def test_coordinator_update_fails(
|
|
hass: HomeAssistant,
|
|
mock_incomfort: MagicMock,
|
|
freezer: FrozenDateTimeFactory,
|
|
exc: Exception,
|
|
mock_config_entry: ConfigEntry,
|
|
) -> None:
|
|
"""Test the incomfort coordinator update fails."""
|
|
await hass.config_entries.async_setup(mock_config_entry.entry_id)
|
|
state = hass.states.get("sensor.boiler_pressure")
|
|
assert state is not None
|
|
assert state.state == "1.86"
|
|
|
|
with patch.object(
|
|
mock_incomfort().heaters.return_value[0], "update", side_effect=exc
|
|
):
|
|
freezer.tick(timedelta(seconds=UPDATE_INTERVAL + 5))
|
|
async_fire_time_changed(hass)
|
|
await hass.async_block_till_done(wait_background_tasks=True)
|
|
|
|
state = hass.states.get("sensor.boiler_pressure")
|
|
assert state is not None
|
|
assert state.state == STATE_UNAVAILABLE
|