Add Homee select platform (#139534)

* homee select initial

* Finish select tests

* Add motor rotation

* fix snapshot after translation compilation

* string improvement

* last fixes

* fix review comments

* remove restore last known state

* readd wind monitoring state

* fix strings

* remove problematic selects

* remove motor rotation from strings

* fix review comments

* Update tests/components/homee/test_select.py

Co-authored-by: Abílio Costa <abmantis@users.noreply.github.com>

* add PARALLEL_UPDATES

* parallel updates for select, not light.

---------

Co-authored-by: Robert Resch <robert@resch.dev>
Co-authored-by: Abílio Costa <abmantis@users.noreply.github.com>
This commit is contained in:
Markus Adrario
2025-03-06 19:56:17 +01:00
committed by GitHub
parent 99e1a7a676
commit eaad8ec49d
6 changed files with 282 additions and 0 deletions

View File

@@ -0,0 +1,106 @@
"""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)