11"""Tests for the PlayerQueue model (deprecated-key back-compat serialization)."""
22
3+ from music_assistant_models .enums import MediaType
4+ from music_assistant_models .media_items import ItemMapping
35from music_assistant_models .player_queue import PlayerQueue
46
57
@@ -26,3 +28,41 @@ def test_autoplay_dont_stop_backcompat_preserved() -> None:
2628 """The existing autoplay <-> dont_stop_the_music back-compat still holds."""
2729 d = _queue ().to_dict ()
2830 assert d ["dont_stop_the_music_enabled" ] == d ["autoplay_enabled" ]
31+
32+
33+ def test_overlay_defaults () -> None :
34+ """The audio overlay fields have sane defaults."""
35+ queue = _queue ()
36+ assert queue .overlay_enabled is False
37+ assert queue .overlay_source is None
38+ assert queue .overlay_volume == 100
39+
40+
41+ def test_overlay_serialize_roundtrip () -> None :
42+ """A populated audio overlay survives a to_dict -> from_dict round-trip."""
43+ queue = _queue ()
44+ queue .overlay_enabled = True
45+ queue .overlay_source = ItemMapping (
46+ media_type = MediaType .SOUND_EFFECT ,
47+ item_id = "rain-loop" ,
48+ provider = "soundlib" ,
49+ name = "Rain Loop" ,
50+ )
51+ queue .overlay_volume = 40
52+ restored = PlayerQueue .from_dict (queue .to_dict ())
53+ assert restored .overlay_enabled is True
54+ assert restored .overlay_source is not None
55+ assert restored .overlay_source .media_type == MediaType .SOUND_EFFECT
56+ assert restored .overlay_source .item_id == "rain-loop"
57+ assert restored .overlay_volume == 40
58+
59+
60+ def test_payload_without_overlay_keys_deserializes () -> None :
61+ """Payloads from older servers without the overlay keys still deserialize."""
62+ legacy = _queue ().to_dict ()
63+ for key in ("overlay_enabled" , "overlay_source" , "overlay_volume" ):
64+ legacy .pop (key , None )
65+ restored = PlayerQueue .from_dict (legacy )
66+ assert restored .overlay_enabled is False
67+ assert restored .overlay_source is None
68+ assert restored .overlay_volume == 100
0 commit comments