From 37d4a7d47e1bf61d03a876ffed7b04a0a3b0349c Mon Sep 17 00:00:00 2001 From: NikkeDoy Date: Thu, 4 Jun 2026 21:29:33 +0300 Subject: [PATCH] :bug: | Make SearchWorker tests robust to Qt fallback environments Replace SearchWorker signal .connect() with mock.MagicMock to handle the case where the player module Signal binding is a plain function (import fallback when PySide6 is unavailable in headless CI). The MagicMock captures .emit() calls and works across all environments: real Qt, conftest stubs, and player.py fallback paths. --- tests/test_player_helpers.py | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/tests/test_player_helpers.py b/tests/test_player_helpers.py index c6343fa..2f1c98f 100644 --- a/tests/test_player_helpers.py +++ b/tests/test_player_helpers.py @@ -5,6 +5,7 @@ import struct import math import tempfile from pathlib import Path +from unittest import mock import pytest @@ -345,20 +346,28 @@ class TestTmpDir: # ── SearchWorker (TEST_MODE) ───────────────────────────────────────────────── class TestSearchWorkerTestMode: - """Tests for SearchWorker.run() with TEST_MODE enabled.""" + """Tests for SearchWorker.run() with TEST_MODE enabled. + + Uses ``mock.MagicMock`` to capture signal emissions instead of + ``.connect()`` because the player module's ``Signal`` binding may + be a plain function (the import fallback when PySide6 is unavailable) + that does not have a ``.connect()`` method. + """ def test_returns_dummy_results_in_test_mode(self, monkeypatch): """With TEST_MODE=True, SearchWorker returns 5 dummy songs.""" monkeypatch.setattr("player.TEST_MODE", True) from player import SearchWorker - results = [] worker = SearchWorker("test query") - worker.results_ready.connect(results.append) + # Use a MagicMock to capture signal emissions — works with both + # real Signal, stub _Signal, and fallback lambda. + mock_signal = mock.MagicMock() + worker.results_ready = mock_signal worker.run() - assert len(results) == 1 - data = results[0] + mock_signal.emit.assert_called_once() + data = mock_signal.emit.call_args[0][0] assert "songs" in data assert "videos" in data assert len(data["songs"]) == 5 @@ -370,12 +379,14 @@ class TestSearchWorkerTestMode: monkeypatch.setattr("player.TEST_MODE", True) from player import SearchWorker - results = [] worker = SearchWorker("test query") - worker.results_ready.connect(lambda r: results.append(r)) + mock_signal = mock.MagicMock() + worker.results_ready = mock_signal worker.run() - song = results[0]["songs"][0] + mock_signal.emit.assert_called_once() + data = mock_signal.emit.call_args[0][0] + song = data["songs"][0] assert "videoId" in song assert "title" in song assert "artists" in song