1
0
mirror of https://github.com/home-assistant/core.git synced 2026-06-01 05:04:21 +01:00
Files
core/tests/components/wiim/conftest.py
T

170 lines
5.9 KiB
Python

"""Pytest fixtures and shared setup for the WiiM integration tests."""
from collections.abc import Generator
from unittest.mock import AsyncMock, MagicMock, patch
import pytest
from wiim.consts import AudioOutputHwMode, InputMode, LoopMode, PlayingStatus
from wiim.controller import WiimController
from wiim.models import (
WiimGroupRole,
WiimGroupSnapshot,
WiimLoopState,
WiimProbeResult,
WiimQueueSnapshot,
WiimRepeatMode,
WiimTransportCapabilities,
)
from homeassistant.components.wiim import DOMAIN
from homeassistant.const import CONF_HOST
from tests.common import MockConfigEntry
@pytest.fixture
def mock_setup_entry() -> Generator[AsyncMock]:
"""Mock setting up a config entry."""
with patch(
"homeassistant.components.wiim.async_setup_entry", return_value=True
) as mock_setup:
yield mock_setup
@pytest.fixture
def mock_config_entry() -> MockConfigEntry:
"""Mock Home Assistant ConfigEntry."""
return MockConfigEntry(
domain=DOMAIN,
data={CONF_HOST: "192.168.1.100"},
title="Test WiiM Device",
unique_id="uuid:test-udn-1234",
)
@pytest.fixture
def mock_wiim_device() -> Generator[AsyncMock]:
"""Patch async_create_wiim_device and return the mocked WiimDevice instance."""
with patch(
"homeassistant.components.wiim.async_create_wiim_device",
autospec=True,
) as mock_create:
mock = mock_create.return_value
mock.udn = "uuid:test-udn-1234"
mock.name = "Test WiiM Device"
mock.model_name = "WiiM Pro"
mock.manufacturer = "Linkplay Tech"
mock.firmware_version = "4.8.523456"
mock.ip_address = "192.168.1.100"
mock.http_api_url = "http://192.168.1.100:8080"
mock.presentation_url = "http://192.168.1.100:8080/web_interface"
mock.available = True
mock.model = "WiiM Pro"
mock.volume = 50
mock.is_muted = False
mock.supports_http_api = False
mock.playing_status = PlayingStatus.STOPPED
mock.loop_mode = LoopMode.SHUFFLE_DISABLE_REPEAT_NONE
mock.loop_state = WiimLoopState(
repeat=WiimRepeatMode.OFF,
shuffle=False,
)
mock.input_mode = InputMode.LINE_IN
mock.audio_output_hw_mode = AudioOutputHwMode.SPEAKER_OUT.display_name # type: ignore[attr-defined]
mock.mac_address = "AA:BB:CC:DD:EE:FF"
mock.current_track_info = {}
mock.current_media = None
mock.current_track_duration = 0
mock.play_mode = "Network"
mock.equalizer_mode = ""
mock.current_position = 0
mock.next_track_uri = ""
mock.event_data = {}
mock.general_event_callback = None
mock.av_transport_event_callback = None
mock.rendering_control_event_callback = None
mock.play_queue_event_callback = None
mock.output_mode = "speaker"
mock.supported_input_modes = (InputMode.LINE_IN.display_name,) # type: ignore[attr-defined]
mock.supported_output_modes = (
AudioOutputHwMode.SPEAKER_OUT.display_name, # type: ignore[attr-defined]
)
upnp_device = MagicMock()
upnp_device.udn = mock.udn
upnp_device.friendly_name = mock.name
upnp_device.model_name = mock.model_name
upnp_device.manufacturer = mock.manufacturer
upnp_device.serial_number = "TESTSERIAL123"
upnp_device.presentation_url = mock.presentation_url
upnp_device.get_device_info = MagicMock(
return_value={
"udn": mock.udn,
"friendly_name": mock.name,
"model_name": mock.model_name,
"manufacturer": mock.manufacturer,
"serial_number": upnp_device.serial_number,
}
)
mock.upnp_device = upnp_device
mock.get_audio_output_hw_mode = AsyncMock(return_value="speaker")
mock.async_get_play_queue = AsyncMock(return_value=[])
mock.async_get_audio_output_modes = AsyncMock(return_value=[])
mock.async_get_input_modes = AsyncMock(return_value=[])
mock.async_get_play_mediums = AsyncMock(return_value=[])
mock.async_get_transport_capabilities = AsyncMock(
return_value=WiimTransportCapabilities(
can_next=False,
can_previous=False,
can_repeat=False,
can_shuffle=False,
)
)
mock.async_get_presets = AsyncMock(return_value=())
mock.async_get_queue_snapshot = AsyncMock(
return_value=WiimQueueSnapshot(items=())
)
mock.build_loop_mode = MagicMock(
return_value=LoopMode.SHUFFLE_DISABLE_REPEAT_NONE
)
yield mock
@pytest.fixture
def mock_wiim_controller(mock_wiim_device: AsyncMock) -> Generator[MagicMock]:
"""Mock a WiimController instance."""
mock = MagicMock(spec=WiimController)
mock.add_device = AsyncMock()
mock.disconnect = AsyncMock()
mock.remove_device = AsyncMock()
mock.async_update_all_multiroom_status = AsyncMock()
mock.get_group_snapshot.return_value = WiimGroupSnapshot(
role=WiimGroupRole.STANDALONE,
leader_udn=mock_wiim_device.udn,
member_udns=(mock_wiim_device.udn,),
)
mock.get_device.side_effect = lambda _udn: mock_wiim_device
with patch(
"homeassistant.components.wiim.WiimController",
return_value=mock,
):
yield mock
@pytest.fixture
def mock_probe_player() -> Generator[AsyncMock]:
"""Mock a WiimProbePlayer instance."""
with patch(
"homeassistant.components.wiim.config_flow.async_probe_wiim_device"
) as mock_probe:
mock_probe.return_value = WiimProbeResult(
host="192.168.1.100",
udn="uuid:test-udn-1234",
name="WiiM Pro",
location="http://192.168.1.100:49152/description.xml",
model="WiiM Pro",
)
yield mock_probe