feat(media): MprisController.pause() via dbus-next
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
"""Tests für MprisController (Linux/MPRIS)."""
|
||||
|
||||
import sys
|
||||
from unittest.mock import AsyncMock, MagicMock
|
||||
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.skipif(sys.platform != "linux", reason="MPRIS is Linux-only")
|
||||
|
||||
|
||||
def _make_player(status: str) -> MagicMock:
|
||||
"""Erzeugt einen gemockten Player-Proxy mit gegebenem PlaybackStatus."""
|
||||
player = MagicMock()
|
||||
player.get_playback_status = AsyncMock(return_value=status)
|
||||
player.call_pause = AsyncMock()
|
||||
player.call_play = AsyncMock()
|
||||
return player
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_pause_with_no_players_is_noop(monkeypatch):
|
||||
from whisper_local.media._mpris import MprisController
|
||||
|
||||
controller = MprisController()
|
||||
monkeypatch.setattr(
|
||||
controller, "_list_player_names", AsyncMock(return_value=[])
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
controller, "_get_player_interface", AsyncMock()
|
||||
)
|
||||
|
||||
await controller.pause()
|
||||
|
||||
assert controller._paused == []
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_pause_pauses_only_playing_players(monkeypatch):
|
||||
from whisper_local.media._mpris import MprisController
|
||||
|
||||
playing = _make_player("Playing")
|
||||
paused = _make_player("Paused")
|
||||
|
||||
async def fake_get_player(name: str):
|
||||
return {"org.mpris.MediaPlayer2.spotify": playing,
|
||||
"org.mpris.MediaPlayer2.vlc": paused}[name]
|
||||
|
||||
controller = MprisController()
|
||||
monkeypatch.setattr(
|
||||
controller,
|
||||
"_list_player_names",
|
||||
AsyncMock(return_value=[
|
||||
"org.mpris.MediaPlayer2.spotify",
|
||||
"org.mpris.MediaPlayer2.vlc",
|
||||
]),
|
||||
)
|
||||
monkeypatch.setattr(controller, "_get_player_interface", fake_get_player)
|
||||
|
||||
await controller.pause()
|
||||
|
||||
playing.call_pause.assert_awaited_once()
|
||||
paused.call_pause.assert_not_awaited()
|
||||
assert controller._paused == ["org.mpris.MediaPlayer2.spotify"]
|
||||
Reference in New Issue
Block a user