Files
core/tests/components/compit/test_select.py
2026-01-28 17:35:15 +00:00

95 lines
2.8 KiB
Python

"""Tests for the Compit select platform."""
from typing import Any
from unittest.mock import MagicMock
from compit_inext_api.consts import CompitParameter
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ServiceValidationError
from homeassistant.helpers import entity_registry as er
from . import setup_integration, snapshot_compit_entities
from tests.common import MockConfigEntry
async def test_select_entities_snapshot(
hass: HomeAssistant,
entity_registry: er.EntityRegistry,
mock_config_entry: MockConfigEntry,
mock_connector: MagicMock,
snapshot: SnapshotAssertion,
) -> None:
"""Snapshot test for select entities creation, unique IDs, and device info."""
await setup_integration(hass, mock_config_entry)
snapshot_compit_entities(hass, entity_registry, snapshot, Platform.SELECT)
@pytest.mark.parametrize(
"mock_return_value",
[
None,
1,
"invalid",
],
)
async def test_select_unknown_device_parameters(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_connector: MagicMock,
mock_return_value: Any,
) -> None:
"""Test that select entity shows unknown when get_current_option returns various invalid values."""
mock_connector.get_current_option.side_effect = (
lambda device_id, parameter_code: mock_return_value
)
await setup_integration(hass, mock_config_entry)
state = hass.states.get("select.nano_color_2_language")
assert state is not None
assert state.state == "unknown"
async def test_select_option(
hass: HomeAssistant, mock_config_entry: MockConfigEntry, mock_connector: MagicMock
) -> None:
"""Test selecting an option."""
await setup_integration(hass, mock_config_entry)
await hass.services.async_call(
"select",
"select_option",
{"entity_id": "select.nano_color_2_language", "option": "polish"},
blocking=True,
)
mock_connector.select_device_option.assert_called_once()
assert mock_connector.get_current_option(2, CompitParameter.LANGUAGE) == "polish"
async def test_select_invalid_option(
hass: HomeAssistant, mock_config_entry: MockConfigEntry, mock_connector: MagicMock
) -> None:
"""Test selecting an invalid option."""
await setup_integration(hass, mock_config_entry)
with pytest.raises(
ServiceValidationError,
match=r"Option invalid is not valid for entity select\.nano_color_2_language",
):
await hass.services.async_call(
"select",
"select_option",
{"entity_id": "select.nano_color_2_language", "option": "invalid"},
blocking=True,
)
mock_connector.select_device_option.assert_not_called()