| Boost coverage to 60% with 256 passing tests
All checks were successful
SonarQube Code Quality Scan / SonarQube Scan (push) Successful in 1m52s

- mpris.py: 81% → 100% — import fallbacks, flush_props edge cases,
  stop_async error path, run_async exception path, notify loops
- player.py: 51% → 73% — AudioPlayer state/volume/loop/queue tests,
  _on_download_failed, _on_download_succeeded, _on_playback_state,
  _on_media_status, seek/skip/previous, _start_prefetch, _advance,
  _cancel_active_downloads, DownloadWorker._do_cancel
- test_gui_widgets.py: 50 → 88 tests across TestAudioPlayer and
  existing widget tests
- 5 modules at 100%: config, discord_rpc, main, mpris, music_db
This commit is contained in:
2026-06-09 19:33:58 +03:00
parent 27d12d31cb
commit 4671a6937b
3 changed files with 574 additions and 0 deletions

View File

@@ -193,6 +193,29 @@ class TestPlayerQtFallback:
assert player.QMediaPlayer is not None
assert hasattr(player.QMediaPlayer, "PlaybackState")
def test_stub_qmediaplayer_methods(self):
"""Stub QMediaPlayer methods can be called without error."""
_clean_pyside_modules()
side_effect = _make_importer(block_pyside=True)
with mock.patch("builtins.__import__", side_effect=side_effect):
import player
mp = player.QMediaPlayer()
# Methods that should be no-ops
mp.set_source("https://example.com/audio.mp3")
mp.play()
mp.pause()
mp.stop()
mp.set_position(30000)
mp.set_audio_output(None)
# Methods that return values
assert mp.position() == 0
assert mp.duration() == 0
assert mp.get_playback_state() == 0 # stopped_state
assert mp.get_audio_output() is None
# ═══════════════════════════════════════════════════════════════════════════════
# gui.py fallback