music-assistant-server

1.9 KBPY
test_player_state_select_source.py
1.9 KB53 lines • python
1"""Tests for auto-derivation of PlayerFeature.SELECT_SOURCE."""
2
3from __future__ import annotations
4
5from unittest.mock import MagicMock
6
7import pytest
8from music_assistant_models.enums import PlayerFeature
9from music_assistant_models.player import PlayerSource
10
11from tests.common import MockPlayer, MockProvider
12
13
14@pytest.fixture
15def mock_mass() -> MagicMock:
16    """Create a mock MusicAssistant instance."""
17    mass = MagicMock()
18    mass.config.get_raw_player_config_value = MagicMock(
19        side_effect=lambda _player_id, _key, default=None: default
20    )
21    mass.players.get_audio_source_session = MagicMock(return_value=None)
22    return mass
23
24
25@pytest.fixture
26def provider(mock_mass: MagicMock) -> MockProvider:
27    """Create a mock provider."""
28    return MockProvider("test_provider", mass=mock_mass)
29
30
31class TestSelectSourceAutoDerivation:
32    """SELECT_SOURCE is auto-set when the FINAL source list has 2+ non-passive entries."""
33
34    def test_native_source_plus_queue_grants_bit(
35        self, mock_mass: MagicMock, provider: MockProvider
36    ) -> None:
37        """MA Queue + one native source (e.g. line-in) → SELECT_SOURCE."""
38        player = MockPlayer(provider, "player_1", "Player")
39        player._attr_source_list = [PlayerSource(id="line_in", name="Line-in", passive=False)]
40
41        features = player._Player__final_supported_features  # type: ignore[attr-defined]
42        assert PlayerFeature.SELECT_SOURCE in features
43
44    def test_no_extra_sources_does_not_grant_bit(
45        self, mock_mass: MagicMock, provider: MockProvider
46    ) -> None:
47        """MA Queue alone (no native sources) → SELECT_SOURCE not set."""
48        player = MockPlayer(provider, "player_2", "Player")
49        # No source_list mutation — only the implicit MA queue gets added
50
51        features = player._Player__final_supported_features  # type: ignore[attr-defined]
52        assert PlayerFeature.SELECT_SOURCE not in features
53