🐛 | Improve test coverage for SonarQube quality gate
Some checks failed
SonarQube Code Quality Scan / SonarQube Scan (push) Failing after 1m20s

- Restructure conftest to try real Qt first, fall back to stubs
  only if that fails — ensures try/except guards in player.py and
  gui.py are exercised in CI, improving new_coverage
- Add tests for _migrate_legacy error paths (JSONDecodeError,
  OSError, db migration) — config.py now 100% covered
- Add tests for _disconnect, _send_presence exception handlers —
  discord_rpc.py now 97% covered
- Add tests for _cleanup_path and _tmp_dir helpers — player.py
  coverage bumped to 33%
This commit is contained in:
2026-06-03 19:35:20 +03:00
parent 8597d03a1e
commit d8ebd6186c
4 changed files with 219 additions and 30 deletions

View File

@@ -174,3 +174,60 @@ class TestDiscordRPC:
# Should not crash, just log a warning
assert drpc._connected is False
drpc.stop()
def test_disconnect_close_exception_handled(self):
"""_disconnect handles close() failure gracefully (covers lines 128-129)."""
with mock.patch("discord_rpc.Presence") as mock_presence_cls:
mock_instance = mock.MagicMock()
mock_instance.close.side_effect = RuntimeError("close failed")
mock_presence_cls.return_value = mock_instance
from discord_rpc import DiscordRPC
drpc = DiscordRPC(client_id="test")
drpc._rpc = mock_instance
drpc._connected = True
drpc._disconnect()
assert drpc._connected is False
assert drpc._rpc is None
def test_send_presence_clear_exception_handled(self):
"""_send_presence handles clear() failure gracefully (covers lines 142-143)."""
with mock.patch("discord_rpc.Presence") as mock_presence_cls:
mock_instance = mock.MagicMock()
mock_instance.clear.side_effect = RuntimeError("clear failed")
mock_presence_cls.return_value = mock_instance
from discord_rpc import DiscordRPC
drpc = DiscordRPC(client_id="test")
drpc._rpc = mock_instance
drpc._connected = True
drpc._song = None # no song -> goes to clear branch
drpc._send_presence()
assert drpc._connected is False
def test_send_presence_update_exception_handled(self):
"""_send_presence handles update() failure gracefully (covers lines 160-167)."""
with mock.patch("discord_rpc.Presence") as mock_presence_cls:
mock_instance = mock.MagicMock()
mock_instance.update.side_effect = RuntimeError("update failed")
mock_presence_cls.return_value = mock_instance
from discord_rpc import DiscordRPC
drpc = DiscordRPC(client_id="test")
drpc._rpc = mock_instance
drpc._connected = True
drpc._song = {"title": "Test", "artists": [{"name": "A"}], "duration": 100}
drpc._start_ts = 1000
drpc._send_presence()
assert drpc._connected is False
def test_send_presence_rpc_is_none(self):
"""_send_presence does nothing when _rpc is None (covers line ~155)."""
from discord_rpc import DiscordRPC
drpc = DiscordRPC(client_id="test")
drpc._rpc = None
drpc._song = {"title": "Test"}
drpc._start_ts = 1000
# Should not crash
drpc._send_presence()
assert True