feat(media): SmtcController.pause() erkennt und pausiert PLAYING-Sessions

This commit is contained in:
2026-04-15 20:14:36 +02:00
parent 2863da0a68
commit 89edf23de9
2 changed files with 105 additions and 1 deletions
+76
View File
@@ -73,3 +73,79 @@ async def test_pause_skips_reconnect_after_smtc_failure(monkeypatch):
await controller.pause()
assert call_count == 1
@pytest.mark.asyncio
async def test_pause_with_no_sessions_is_noop(monkeypatch):
from whisper_local.media._smtc import SmtcController
controller = SmtcController()
monkeypatch.setattr(
controller, "_ensure_manager", AsyncMock(return_value=_make_manager([]))
)
await controller.pause()
assert controller._paused == []
@pytest.mark.asyncio
async def test_pause_pauses_all_playing_sessions(monkeypatch):
from whisper_local.media._smtc import SmtcController
s1 = _make_session("Spotify", PLAYING)
s2 = _make_session("msedge", PLAYING)
controller = SmtcController()
monkeypatch.setattr(
controller,
"_ensure_manager",
AsyncMock(return_value=_make_manager([s1, s2])),
)
await controller.pause()
s1.try_pause_async.assert_awaited_once()
s2.try_pause_async.assert_awaited_once()
assert controller._paused == ["Spotify", "msedge"]
@pytest.mark.asyncio
async def test_pause_skips_already_paused_sessions(monkeypatch):
from whisper_local.media._smtc import SmtcController
playing = _make_session("Spotify", PLAYING)
already_paused = _make_session("msedge", PAUSED)
controller = SmtcController()
monkeypatch.setattr(
controller,
"_ensure_manager",
AsyncMock(return_value=_make_manager([playing, already_paused])),
)
await controller.pause()
playing.try_pause_async.assert_awaited_once()
already_paused.try_pause_async.assert_not_awaited()
assert controller._paused == ["Spotify"]
@pytest.mark.asyncio
async def test_pause_logs_and_continues_when_session_fails(monkeypatch, caplog):
from whisper_local.media._smtc import SmtcController
broken = _make_session("broken", PLAYING)
broken.try_pause_async = AsyncMock(side_effect=RuntimeError("Verbindung verloren"))
good = _make_session("Spotify", PLAYING)
controller = SmtcController()
monkeypatch.setattr(
controller,
"_ensure_manager",
AsyncMock(return_value=_make_manager([broken, good])),
)
with caplog.at_level("WARNING"):
await controller.pause()
good.try_pause_async.assert_awaited_once()
assert controller._paused == ["Spotify"]
assert any("broken" in r.message for r in caplog.records)