/
/
/
1"""
2Tests for the settings a queue starts out with when its player is first registered.
3
4Autoplay is on out of the box, but only for a queue that is genuinely new: a queue restored from
5cache keeps the switch the user left it on.
6"""
7
8from __future__ import annotations
9
10from types import SimpleNamespace
11from typing import Any
12from unittest.mock import AsyncMock, MagicMock
13
14from music_assistant_models.player_queue import PlayerQueue
15
16from music_assistant.controllers.player_queues.controller import PlayerQueuesController
17from music_assistant.controllers.player_queues.state import PlayerQueueData
18
19
20def _controller(cached_state: dict[str, Any] | None = None) -> Any:
21 """
22 Build a queue-controller stand-in for ``on_player_register``.
23
24 :param cached_state: A previously persisted queue state to restore, or None for a new queue.
25 """
26 queues = MagicMock()
27 queues._queue_data = {}
28 queues.mass.cache.get = AsyncMock(side_effect=[cached_state, []])
29 return queues
30
31
32def _player(player_id: str = "p1") -> Any:
33 """Build a player stand-in with the state fields the queue snapshot is built from."""
34 return SimpleNamespace(
35 player_id=player_id, state=SimpleNamespace(name="Player A", available=True)
36 )
37
38
39async def test_new_queue_starts_with_autoplay_on() -> None:
40 """A queue created for a newly registered player starts out with Autoplay on."""
41 queues = _controller()
42
43 await PlayerQueuesController.on_player_register(queues, _player())
44
45 assert queues._queue_data["p1"].queue.autoplay_enabled is True
46
47
48async def test_restored_queue_keeps_its_own_autoplay_setting() -> None:
49 """An existing queue is restored as-is: switching Autoplay off has to stick across a restart."""
50 stored = PlayerQueueData(
51 queue=PlayerQueue(
52 queue_id="p1",
53 active=False,
54 display_name="Player A",
55 available=True,
56 autoplay_enabled=False,
57 items=0,
58 )
59 )
60 queues = _controller(stored.to_cache())
61
62 await PlayerQueuesController.on_player_register(queues, _player())
63
64 assert queues._queue_data["p1"].queue.autoplay_enabled is False
65