core/tests/components/homee/test_valve.py

111 lines
3.5 KiB
Python

"""Test Homee valves."""
from unittest.mock import MagicMock, patch
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.components.valve import (
DOMAIN as VALVE_DOMAIN,
SERVICE_SET_VALVE_POSITION,
STATE_CLOSED,
STATE_CLOSING,
STATE_OPEN,
STATE_OPENING,
ValveEntityFeature,
)
from homeassistant.const import ATTR_ENTITY_ID, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from . import build_mock_node, setup_integration
from tests.common import MockConfigEntry, snapshot_platform
async def test_valve_set_position(
hass: HomeAssistant,
mock_homee: MagicMock,
mock_config_entry: MockConfigEntry,
) -> None:
"""Test set valve position service."""
mock_homee.nodes = [build_mock_node("valve.json")]
mock_homee.get_node_by_id.return_value = mock_homee.nodes[0]
await setup_integration(hass, mock_config_entry)
await hass.services.async_call(
VALVE_DOMAIN,
SERVICE_SET_VALVE_POSITION,
{ATTR_ENTITY_ID: "valve.test_valve_valve_position", "position": 100},
)
mock_homee.set_value.assert_called_once_with(1, 1, 100)
@pytest.mark.parametrize(
("current_value", "target_value", "state"),
[
(0.0, 0.0, STATE_CLOSED),
(0.0, 100.0, STATE_OPENING),
(100.0, 0.0, STATE_CLOSING),
(100.0, 100.0, STATE_OPEN),
],
)
async def test_opening_closing(
hass: HomeAssistant,
mock_homee: MagicMock,
mock_config_entry: MockConfigEntry,
current_value: float,
target_value: float,
state: str,
) -> None:
"""Test if opening/closing is detected correctly."""
mock_homee.nodes = [build_mock_node("valve.json")]
mock_homee.get_node_by_id.return_value = mock_homee.nodes[0]
await setup_integration(hass, mock_config_entry)
valve = mock_homee.nodes[0].attributes[0]
valve.current_value = current_value
valve.target_value = target_value
valve.add_on_changed_listener.call_args_list[0][0][0](valve)
await hass.async_block_till_done()
assert hass.states.get("valve.test_valve_valve_position").state == state
async def test_supported_features(
hass: HomeAssistant,
mock_homee: MagicMock,
mock_config_entry: MockConfigEntry,
) -> None:
"""Test supported features."""
mock_homee.nodes = [build_mock_node("valve.json")]
mock_homee.get_node_by_id.return_value = mock_homee.nodes[0]
await setup_integration(hass, mock_config_entry)
valve = mock_homee.nodes[0].attributes[0]
attributes = hass.states.get("valve.test_valve_valve_position").attributes
assert attributes["supported_features"] == ValveEntityFeature.SET_POSITION
valve.editable = 0
valve.add_on_changed_listener.call_args_list[0][0][0](valve)
await hass.async_block_till_done()
attributes = hass.states.get("valve.test_valve_valve_position").attributes
assert attributes["supported_features"] == ValveEntityFeature(0)
async def test_valve_snapshot(
hass: HomeAssistant,
mock_homee: MagicMock,
mock_config_entry: MockConfigEntry,
entity_registry: er.EntityRegistry,
snapshot: SnapshotAssertion,
) -> None:
"""Test the valve snapshots."""
mock_homee.nodes = [build_mock_node("valve.json")]
mock_homee.get_node_by_id.return_value = mock_homee.nodes[0]
with patch("homeassistant.components.homee.PLATFORMS", [Platform.VALVE]):
await setup_integration(hass, mock_config_entry)
await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id)