72 lines
1.9 KiB
Python
72 lines
1.9 KiB
Python
"""Tests for the Onkyo integration."""
|
|
|
|
from collections.abc import Generator, Iterable
|
|
from contextlib import contextmanager
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from aioonkyo import ReceiverInfo
|
|
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from tests.common import MockConfigEntry
|
|
|
|
RECEIVER_INFO = ReceiverInfo(
|
|
host="192.168.0.101",
|
|
ip="192.168.0.101",
|
|
model_name="TX-NR7100",
|
|
identifier="0009B0123456",
|
|
)
|
|
|
|
RECEIVER_INFO_2 = ReceiverInfo(
|
|
host="192.168.0.102",
|
|
ip="192.168.0.102",
|
|
model_name="TX-RZ50",
|
|
identifier="0009B0ABCDEF",
|
|
)
|
|
|
|
|
|
@contextmanager
|
|
def mock_discovery(receiver_infos: Iterable[ReceiverInfo] | None) -> Generator[None]:
|
|
"""Mock discovery functions."""
|
|
|
|
async def get_info(host: str) -> ReceiverInfo | None:
|
|
"""Get receiver info by host."""
|
|
for info in receiver_infos:
|
|
if info.host == host:
|
|
return info
|
|
return None
|
|
|
|
def get_infos(host: str) -> MagicMock:
|
|
"""Get receiver infos from broadcast."""
|
|
discover_mock = MagicMock()
|
|
discover_mock.__aiter__.return_value = receiver_infos
|
|
return discover_mock
|
|
|
|
discover_kwargs = {}
|
|
interview_kwargs = {}
|
|
if receiver_infos is None:
|
|
discover_kwargs["side_effect"] = OSError
|
|
interview_kwargs["side_effect"] = OSError
|
|
else:
|
|
discover_kwargs["new"] = get_infos
|
|
interview_kwargs["new"] = get_info
|
|
|
|
with (
|
|
patch(
|
|
"homeassistant.components.onkyo.receiver.aioonkyo.discover",
|
|
**discover_kwargs,
|
|
),
|
|
patch(
|
|
"homeassistant.components.onkyo.receiver.aioonkyo.interview",
|
|
**interview_kwargs,
|
|
),
|
|
):
|
|
yield
|
|
|
|
|
|
async def setup_integration(hass: HomeAssistant, config_entry: MockConfigEntry) -> None:
|
|
"""Set up the component."""
|
|
config_entry.add_to_hass(hass)
|
|
await hass.config_entries.async_setup(config_entry.entry_id)
|
|
await hass.async_block_till_done()
|