mirror of https://github.com/home-assistant/core
83 lines
1.9 KiB
Python
83 lines
1.9 KiB
Python
"""Test the Nibe Heat Pump config flow."""
|
|
|
|
from typing import Any
|
|
from unittest.mock import AsyncMock, patch
|
|
|
|
from nibe.coil import CoilData
|
|
from nibe.coil_groups import UNIT_COILGROUPS
|
|
from nibe.heatpump import Model
|
|
import pytest
|
|
|
|
from homeassistant.components.button import DOMAIN as PLATFORM_DOMAIN, SERVICE_PRESS
|
|
from homeassistant.const import (
|
|
ATTR_ENTITY_ID,
|
|
STATE_UNAVAILABLE,
|
|
STATE_UNKNOWN,
|
|
Platform,
|
|
)
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from . import async_add_model
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
async def fixture_single_platform():
|
|
"""Only allow this platform to load."""
|
|
with patch("homeassistant.components.nibe_heatpump.PLATFORMS", [Platform.BUTTON]):
|
|
yield
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("model", "entity_id"),
|
|
[
|
|
(Model.F1155, "button.f1155_alarm_reset"),
|
|
(Model.S320, "button.s320_reset_alarm"),
|
|
],
|
|
)
|
|
async def test_reset_button(
|
|
hass: HomeAssistant,
|
|
mock_connection: AsyncMock,
|
|
model: Model,
|
|
entity_id: str,
|
|
coils: dict[int, Any],
|
|
freezer_ticker: Any,
|
|
) -> None:
|
|
"""Test reset button."""
|
|
|
|
unit = UNIT_COILGROUPS[model.series]["main"]
|
|
|
|
# Setup a non alarm state
|
|
coils[unit.alarm_reset] = 0
|
|
coils[unit.alarm] = 0
|
|
|
|
await async_add_model(hass, model)
|
|
|
|
state = hass.states.get(entity_id)
|
|
assert state
|
|
assert state.state == STATE_UNAVAILABLE
|
|
|
|
# Signal alarm
|
|
coils[unit.alarm] = 100
|
|
|
|
await freezer_ticker(60)
|
|
|
|
state = hass.states.get(entity_id)
|
|
assert state
|
|
assert state.state == STATE_UNKNOWN
|
|
|
|
# Press button
|
|
await hass.services.async_call(
|
|
PLATFORM_DOMAIN,
|
|
SERVICE_PRESS,
|
|
{ATTR_ENTITY_ID: entity_id},
|
|
blocking=True,
|
|
)
|
|
await hass.async_block_till_done()
|
|
|
|
# Verify reset was written
|
|
args = mock_connection.write_coil.call_args
|
|
assert args
|
|
coil: CoilData = args.args[0]
|
|
assert coil.coil.address == unit.alarm_reset
|
|
assert coil.value == 1
|