1
0
mirror of https://github.com/home-assistant/core.git synced 2026-04-02 08:26:41 +01:00
Files
core/tests/components/myneomitis/test_select.py
2026-02-23 17:14:30 +01:00

147 lines
4.2 KiB
Python

"""Tests for the MyNeomitis select component."""
from unittest.mock import AsyncMock
from syrupy.assertion import SnapshotAssertion
from homeassistant.const import ATTR_ENTITY_ID
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from tests.common import MockConfigEntry, snapshot_platform
RELAIS_DEVICE = {
"_id": "relais1",
"name": "Relais Device",
"model": "EWS",
"state": {"relayMode": 1, "targetMode": 2},
"connected": True,
"program": {"data": {}},
}
PILOTE_DEVICE = {
"_id": "pilote1",
"name": "Pilote Device",
"model": "EWS",
"state": {"targetMode": 1},
"connected": True,
"program": {"data": {}},
}
UFH_DEVICE = {
"_id": "ufh1",
"name": "UFH Device",
"model": "UFH",
"state": {"changeOverUser": 0},
"connected": True,
"program": {"data": {}},
}
async def test_entities(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_pyaxenco_client: AsyncMock,
snapshot: SnapshotAssertion,
entity_registry: er.EntityRegistry,
) -> None:
"""Test all select entities are created for supported devices."""
mock_pyaxenco_client.get_devices.return_value = [
RELAIS_DEVICE,
PILOTE_DEVICE,
UFH_DEVICE,
{
"_id": "unsupported",
"name": "Unsupported Device",
"model": "UNKNOWN",
"state": {},
"connected": True,
"program": {"data": {}},
},
]
mock_config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()
await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id)
async def test_select_option(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_pyaxenco_client: AsyncMock,
) -> None:
"""Test that selecting an option propagates to the library correctly."""
mock_pyaxenco_client.get_devices.return_value = [RELAIS_DEVICE]
mock_config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()
await hass.services.async_call(
"select",
"select_option",
{ATTR_ENTITY_ID: "select.relais_device", "option": "on"},
blocking=True,
)
mock_pyaxenco_client.set_device_mode.assert_awaited_once_with("relais1", 1)
state = hass.states.get("select.relais_device")
assert state is not None
assert state.state == "on"
async def test_websocket_state_update(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_pyaxenco_client: AsyncMock,
) -> None:
"""Test that entity updates when source data changes via WebSocket."""
mock_pyaxenco_client.get_devices.return_value = [RELAIS_DEVICE]
mock_config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()
state = hass.states.get("select.relais_device")
assert state is not None
assert state.state == "off"
mock_pyaxenco_client.register_listener.assert_called_once()
callback = mock_pyaxenco_client.register_listener.call_args[0][1]
callback({"targetMode": 1})
await hass.async_block_till_done()
state = hass.states.get("select.relais_device")
assert state is not None
assert state.state == "on"
async def test_device_becomes_unavailable(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_pyaxenco_client: AsyncMock,
) -> None:
"""Test that entity becomes unavailable when device connection is lost."""
mock_pyaxenco_client.get_devices.return_value = [RELAIS_DEVICE]
mock_config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()
state = hass.states.get("select.relais_device")
assert state is not None
assert state.state == "off"
callback = mock_pyaxenco_client.register_listener.call_args[0][1]
callback({"connected": False})
await hass.async_block_till_done()
state = hass.states.get("select.relais_device")
assert state is not None
assert state.state == "unavailable"