1
0
mirror of https://github.com/home-assistant/core.git synced 2026-05-18 22:40:15 +01:00
Files

68 lines
2.1 KiB
Python

"""Tests for the Overkiz climate platform."""
from collections.abc import Generator
from unittest.mock import patch
from freezegun.api import FrozenDateTimeFactory
from pyoverkiz.enums import EventName, OverkizState
import pytest
from homeassistant.components.climate import ATTR_HVAC_ACTION, HVACAction
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from .conftest import FixtureDevice, MockOverkizClient, SetupOverkizIntegration
from .helpers import async_deliver_events, build_event
VALVE = FixtureDevice(
"setup/cloud_nexity_rail_din_europe.json",
"io://1234-5678-1698/15702199#1",
"climate.garden_radiator",
)
@pytest.fixture(autouse=True)
def fixture_platforms() -> Generator[None]:
"""Limit platforms to climate only."""
with patch("homeassistant.components.overkiz.PLATFORMS", [Platform.CLIMATE]):
yield
async def test_valve_hvac_action_none_state(
hass: HomeAssistant,
freezer: FrozenDateTimeFactory,
mock_client: MockOverkizClient,
setup_overkiz_integration: SetupOverkizIntegration,
) -> None:
"""Test that hvac_action handles None valve state without crashing."""
await setup_overkiz_integration(fixture=VALVE.fixture)
state = hass.states.get(VALVE.entity_id)
assert state is not None
assert state.attributes[ATTR_HVAC_ACTION] == HVACAction.IDLE
# Deliver an event that clears the valve state
await async_deliver_events(
hass,
freezer,
mock_client,
[
build_event(
EventName.DEVICE_STATE_CHANGED,
device_url=VALVE.device_url,
device_states=[
{
"name": OverkizState.CORE_OPEN_CLOSED_VALVE,
"type": 3,
"value": None,
}
],
)
],
)
# hvac_action should be None (unknown) rather than raising KeyError
state = hass.states.get(VALVE.entity_id)
assert state is not None
assert state.attributes.get(ATTR_HVAC_ACTION) is None