/
/
/
1"""Tests for the MPD player provider."""
2
3from types import SimpleNamespace
4from unittest.mock import AsyncMock, Mock
5
6from music_assistant.providers.mpd.provider import MPDPlayerProvider
7
8
9async def test_remove_player_prunes_manual_host_config() -> None:
10 """Removing an MPD player should also remove its host entry from provider config."""
11 provider = MPDPlayerProvider.__new__(MPDPlayerProvider)
12 config_entries = {
13 "manual_discovery_ip_addresses": SimpleNamespace(
14 value=[
15 "kitchen.local:6600",
16 "office.local:6601",
17 "office.local:6601",
18 "bedroom.local",
19 ]
20 )
21 }
22 provider.config = Mock()
23 provider.config.instance_id = "mpd_test"
24 provider.config.values = config_entries
25 provider.config.get_value.side_effect = lambda key, default=None: (
26 config_entries.get(key, SimpleNamespace(value=default)).value
27 )
28 provider.mass = Mock()
29 provider.mass.config = Mock()
30 provider.mass.players = Mock()
31 provider.mass.players.get_player.return_value = None
32 provider.mass.players.unregister = AsyncMock()
33
34 await provider.remove_player("mpd_office.local_6601")
35
36 # the config controller stores the pruned list (and updates the in-place config copy)
37 provider.mass.config.set_raw_provider_config_value.assert_called_once_with(
38 "mpd_test",
39 "manual_discovery_ip_addresses",
40 ["kitchen.local:6600", "bedroom.local"],
41 encrypted=False,
42 immediate=False,
43 )
44 provider.mass.players.unregister.assert_awaited_once_with("mpd_office.local_6601", True)
45