core/tests/components/homee/test_select.py

107 lines
3.0 KiB
Python

"""Test homee selects."""
from unittest.mock import MagicMock, patch
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.components.select import (
DOMAIN as SELECT_DOMAIN,
SERVICE_SELECT_FIRST,
SERVICE_SELECT_LAST,
SERVICE_SELECT_NEXT,
SERVICE_SELECT_OPTION,
SERVICE_SELECT_PREVIOUS,
)
from homeassistant.const import ATTR_ENTITY_ID, Platform
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ServiceValidationError
from homeassistant.helpers import entity_registry as er
from . import build_mock_node, setup_integration
from tests.common import MockConfigEntry, snapshot_platform
async def setup_select(
hass: HomeAssistant, mock_homee: MagicMock, mock_config_entry: MockConfigEntry
) -> None:
"""Setups the integration for select tests."""
mock_homee.nodes = [build_mock_node("selects.json")]
mock_homee.get_node_by_id.return_value = mock_homee.nodes[0]
await setup_integration(hass, mock_config_entry)
@pytest.mark.parametrize(
("service", "extra_options", "expected"),
[
(SERVICE_SELECT_FIRST, {}, 0),
(SERVICE_SELECT_LAST, {}, 2),
(SERVICE_SELECT_NEXT, {}, 2),
(SERVICE_SELECT_PREVIOUS, {}, 0),
(
SERVICE_SELECT_OPTION,
{
"option": "level2",
},
2,
),
],
)
async def test_select_services(
hass: HomeAssistant,
mock_homee: MagicMock,
mock_config_entry: MockConfigEntry,
service: str,
extra_options: dict[str, str],
expected: int,
) -> None:
"""Test the select services."""
await setup_select(hass, mock_homee, mock_config_entry)
OPTIONS = {ATTR_ENTITY_ID: "select.test_select_repeater_mode"}
OPTIONS.update(extra_options)
await hass.services.async_call(
SELECT_DOMAIN,
service,
OPTIONS,
blocking=True,
)
mock_homee.set_value.assert_called_once_with(1, 1, expected)
async def test_select_option_service_error(
hass: HomeAssistant,
mock_homee: MagicMock,
mock_config_entry: MockConfigEntry,
) -> None:
"""Test the select_option service called with invalid option."""
await setup_select(hass, mock_homee, mock_config_entry)
with pytest.raises(ServiceValidationError):
await hass.services.async_call(
SELECT_DOMAIN,
SERVICE_SELECT_OPTION,
{
ATTR_ENTITY_ID: "select.test_select_repeater_mode",
"option": "invalid",
},
blocking=True,
)
async def test_select_snapshot(
hass: HomeAssistant,
mock_homee: MagicMock,
mock_config_entry: MockConfigEntry,
entity_registry: er.EntityRegistry,
snapshot: SnapshotAssertion,
) -> None:
"""Test the select entity snapshot."""
with patch("homeassistant.components.homee.PLATFORMS", [Platform.SELECT]):
await setup_select(hass, mock_homee, mock_config_entry)
await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id)