From 1f5d8dca0c6a3f81f3b1356f66143a87a5e913a0 Mon Sep 17 00:00:00 2001 From: NikkeDoy Date: Thu, 4 Jun 2026 18:45:59 +0300 Subject: [PATCH] :bug: | Fix SonarQube dead code and improve coverage --- discord_rpc.py | 2 +- gui.py | 2 +- tests/test_discord_rpc.py | 54 ++++++++++++++++++++++++++++++++++++--- 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/discord_rpc.py b/discord_rpc.py index 8662e85..fedb7e8 100644 --- a/discord_rpc.py +++ b/discord_rpc.py @@ -116,7 +116,7 @@ class DiscordRPC: log.warning("Discord not running – RPC unavailable") self._connected = False return False - except (OSError, RuntimeError, DiscordNotFound) as exc: + except (OSError, RuntimeError) as exc: log.debug("Discord RPC connect failed: %s", exc) self._connected = False return False diff --git a/gui.py b/gui.py index e1922a9..241aebc 100644 --- a/gui.py +++ b/gui.py @@ -168,7 +168,7 @@ def _load_thumbnail(video_id: str, thumb_url: str, nam = _get_thumbnail_nam() reply = nam.get(QNetworkRequest(QUrl(thumb_url))) - def _on_downloaded(reply=reply, nam=nam, cache_path=cache_path, + def _on_downloaded(reply=reply, cache_path=cache_path, art_label=art_label, size=size, style_pass=style_pass, style_fail=style_fail, video_id=video_id): diff --git a/tests/test_discord_rpc.py b/tests/test_discord_rpc.py index e9388f1..b3bec10 100644 --- a/tests/test_discord_rpc.py +++ b/tests/test_discord_rpc.py @@ -161,11 +161,11 @@ class TestDiscordRPC: # If we get here without exception the test passes @mock.patch("discord_rpc.Presence") - def test_connect_failure_graceful(self, mock_presence_cls): - """When Discord is not running, connect failure is handled gracefully.""" - from discord_rpc import DiscordRPC + def test_connect_discord_not_found(self, mock_presence_cls): + """When Discord is not running, DiscordNotFound is caught (covers lines 116-118).""" + from discord_rpc import DiscordRPC, DiscordNotFound mock_instance = mock.MagicMock() - mock_instance.connect.side_effect = Exception("Discord not found") + mock_instance.connect.side_effect = DiscordNotFound() mock_presence_cls.return_value = mock_instance drpc = DiscordRPC(client_id="test") @@ -231,3 +231,49 @@ class TestDiscordRPC: # Should not crash drpc._send_presence() assert True + + def test_connect_oserror_handled(self): + """_connect handles OSError gracefully (covers lines 119-122).""" + with mock.patch("discord_rpc.Presence") as mock_presence_cls: + mock_instance = mock.MagicMock() + mock_instance.connect.side_effect = OSError("Connection refused") + mock_presence_cls.return_value = mock_instance + + from discord_rpc import DiscordRPC + drpc = DiscordRPC(client_id="test") + result = drpc._connect() + assert result is False + assert drpc._connected is False + + def test_connect_runtimeerror_handled(self): + """_connect handles RuntimeError gracefully (covers lines 119-122).""" + with mock.patch("discord_rpc.Presence") as mock_presence_cls: + mock_instance = mock.MagicMock() + mock_instance.connect.side_effect = RuntimeError("pipe error") + mock_presence_cls.return_value = mock_instance + + from discord_rpc import DiscordRPC + drpc = DiscordRPC(client_id="test") + result = drpc._connect() + assert result is False + assert drpc._connected is False + + def test_run_reconnects_on_failure(self): + """_run loop retries connection when _connect fails (covers lines 174-175).""" + with mock.patch("discord_rpc.Presence") as mock_presence_cls: + mock_instance = mock.MagicMock() + mock_instance.connect.side_effect = OSError("no discord") + mock_presence_cls.return_value = mock_instance + + from discord_rpc import DiscordRPC + drpc = DiscordRPC(client_id="test") + # Start _run in a background thread so we can signal stop + # from the main thread while _run blocks on wait(). + import threading + t = threading.Thread(target=drpc._run, daemon=True) + t.start() + time.sleep(0.1) # let _connect fail and enter wait(10) + drpc._stop_event.set() # unblock wait() so _run can exit + t.join(timeout=2) + assert drpc._connected is False + assert drpc._rpc is None