/
/
/
1"""Tests for the MPD player provider."""
2
3from types import SimpleNamespace
4from unittest.mock import AsyncMock, Mock
5
6from music_assistant.constants import (
7 CONF_ENTRY_PREFER_WAV_FOR_LIVE_SOURCES_DEFAULT_ENABLED,
8 CONF_PREFER_WAV_FOR_LIVE_SOURCES,
9)
10from music_assistant.providers.mpd.player import MPDPlayer
11from music_assistant.providers.mpd.provider import MPDPlayerProvider
12
13
14async def test_mpd_prefers_wav_for_live_sources_by_default() -> None:
15 """MPD players default to the known-compatible low-latency WAV path."""
16 player = MPDPlayer.__new__(MPDPlayer)
17
18 entries = await player.get_config_entries()
19 entry = next(entry for entry in entries if entry.key == CONF_PREFER_WAV_FOR_LIVE_SOURCES)
20
21 assert (
22 entry.default_value == CONF_ENTRY_PREFER_WAV_FOR_LIVE_SOURCES_DEFAULT_ENABLED.default_value
23 )
24
25
26async def test_remove_player_prunes_manual_host_config() -> None:
27 """Removing an MPD player should also remove its host entry from provider config."""
28 provider = MPDPlayerProvider.__new__(MPDPlayerProvider)
29 config_entries = {
30 "manual_discovery_ip_addresses": SimpleNamespace(
31 value=[
32 "kitchen.local:6600",
33 "office.local:6601",
34 "office.local:6601",
35 "bedroom.local",
36 ]
37 )
38 }
39 provider.config = Mock()
40 provider.config.instance_id = "mpd_test"
41 provider.config.values = config_entries
42 provider.config.get_value.side_effect = lambda key, default=None: (
43 config_entries.get(key, SimpleNamespace(value=default)).value
44 )
45 provider.mass = Mock()
46 provider.mass.config = Mock()
47 provider.mass.players = Mock()
48 provider.mass.players.get_player.return_value = None
49 provider.mass.players.unregister = AsyncMock()
50
51 await provider.remove_player("mpd_office.local_6601")
52
53 # the config controller stores the pruned list (and updates the in-place config copy)
54 provider.mass.config.set_raw_provider_config_value.assert_called_once_with(
55 "mpd_test",
56 "manual_discovery_ip_addresses",
57 ["kitchen.local:6600", "bedroom.local"],
58 encrypted=False,
59 immediate=False,
60 )
61 provider.mass.players.unregister.assert_awaited_once_with("mpd_office.local_6601", True)
62