core/tests/components/onkyo/__init__.py

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()