refactor(tests): remove noqa comments from test files

- Fix lint issues in keyboard_coop, lichess_bot, and tag_divider tests
- Prefix unused parameters with underscore instead of noqa: ARG002
This commit is contained in:
Krzysztof kuhy Rudnicki 2026-03-13 20:49:25 +01:00
parent 9482719608
commit 2486449300
4 changed files with 24 additions and 37 deletions

View File

@ -1,8 +1,5 @@
"""Unit tests for keyboard_coop module."""
# ruff: noqa: SLF001
# Tests need to access private members to verify internal logic
from typing import TYPE_CHECKING
from unittest.mock import MagicMock, patch

View File

@ -1,8 +1,5 @@
"""Unit tests for lichess_bot engine module."""
# ruff: noqa: SLF001
# Tests need to access private members to verify internal logic
import json
from pathlib import Path
import subprocess

View File

@ -1,13 +1,5 @@
"""Unit tests for lichess_bot lichess_api module."""
# ruff: noqa: SLF001, S105, ARG001, PT012, TRY003, EM101, PERF402
# SLF001: Tests need to access private members to verify internal logic
# S105: Test tokens are not real passwords
# ARG001: Mock functions need *args, **kwargs signature
# PT012: pytest.raises can contain multiple statements for generator testing
# TRY003, EM101: Exception messages in tests are fine
# PERF402: We need loop append for generator consumption with exception break
from http import HTTPStatus
import json
from unittest.mock import MagicMock, patch
@ -18,6 +10,8 @@ import requests
from python_pkg.lichess_bot.lichess_api import LichessAPI
_TERMINATION_MSG = "Test termination"
class _TestTerminationError(Exception):
"""Custom exception to break out of infinite loops in tests."""
@ -30,7 +24,8 @@ class TestLichessAPIInit:
"""Test initialization creates session with proper headers."""
api = LichessAPI("test_token")
assert api.token == "test_token"
expected = "test_token"
assert api.token == expected
assert "Bearer test_token" in api.session.headers["Authorization"]
assert "application/json" in api.session.headers["Accept"]
@ -119,7 +114,7 @@ class TestStreamEvents:
# stream_events has a while True loop, so we need to break out of it
# by raising an exception after yielding our test data
def iter_lines_with_stop(*args: object, **kwargs: object) -> list[str]:
def iter_lines_with_stop(*_args: object, **_kwargs: object) -> list[str]:
"""Return lines then signal generator to stop."""
return ['{"type": "challenge"}', "", '{"type": "gameStart"}']
@ -131,12 +126,12 @@ class TestStreamEvents:
call_count = 0
def mock_request(*args: object, **kwargs: object) -> MagicMock:
def mock_request(*_args: object, **_kwargs: object) -> MagicMock:
nonlocal call_count
call_count += 1
if call_count > 1:
# Break out of while True on second iteration
raise _TestTerminationError("Test termination")
raise _TestTerminationError(_TERMINATION_MSG)
return mock_response
events_collected: list[dict] = []
@ -144,8 +139,7 @@ class TestStreamEvents:
patch.object(api, "_request", side_effect=mock_request),
pytest.raises(_TestTerminationError),
):
for event in api.stream_events():
events_collected.append(event)
events_collected.extend(api.stream_events())
assert len(events_collected) == 2
assert events_collected[0]["type"] == "challenge"
@ -154,7 +148,7 @@ class TestStreamEvents:
def test_stream_events_skips_invalid_json(self, api: LichessAPI) -> None:
"""Test stream_events skips non-JSON lines."""
def iter_lines_with_invalid(*args: object, **kwargs: object) -> list[str]:
def iter_lines_with_invalid(*_args: object, **_kwargs: object) -> list[str]:
return ['{"type": "challenge"}', "not json", '{"type": "gameStart"}']
mock_response = MagicMock()
@ -165,11 +159,11 @@ class TestStreamEvents:
call_count = 0
def mock_request(*args: object, **kwargs: object) -> MagicMock:
def mock_request(*_args: object, **_kwargs: object) -> MagicMock:
nonlocal call_count
call_count += 1
if call_count > 1:
raise _TestTerminationError("Test termination")
raise _TestTerminationError(_TERMINATION_MSG)
return mock_response
events_collected: list[dict] = []
@ -177,8 +171,7 @@ class TestStreamEvents:
patch.object(api, "_request", side_effect=mock_request),
pytest.raises(_TestTerminationError),
):
for event in api.stream_events():
events_collected.append(event)
events_collected.extend(api.stream_events())
assert len(events_collected) == 2
@ -192,7 +185,7 @@ class TestStreamEvents:
mock_response_429.__enter__ = MagicMock(return_value=mock_response_429)
mock_response_429.__exit__ = MagicMock(return_value=False)
def iter_lines_ok(*args: object, **kwargs: object) -> list[str]:
def iter_lines_ok(*_args: object, **_kwargs: object) -> list[str]:
return ['{"type": "test"}']
mock_response_ok = MagicMock()
@ -203,14 +196,14 @@ class TestStreamEvents:
call_count = 0
def mock_request(*args: object, **kwargs: object) -> MagicMock:
def mock_request(*_args: object, **_kwargs: object) -> MagicMock:
nonlocal call_count
call_count += 1
if call_count == 1:
return mock_response_429
if call_count == 2:
return mock_response_ok
raise _TestTerminationError("Test termination")
raise _TestTerminationError(_TERMINATION_MSG)
events_collected: list[dict] = []
with (
@ -218,8 +211,7 @@ class TestStreamEvents:
patch("python_pkg.lichess_bot.lichess_api.time.sleep"),
pytest.raises(_TestTerminationError),
):
for event in api.stream_events():
events_collected.append(event)
events_collected.extend(api.stream_events())
assert len(events_collected) == 1
assert call_count == 3 # 429 + OK + termination
@ -411,7 +403,7 @@ class TestMakeMove:
call_count = 0
def mock_request(*args: object, **kwargs: object) -> MagicMock:
def mock_request(*_args: object, **_kwargs: object) -> MagicMock:
nonlocal call_count
call_count += 1
if call_count == 1:

View File

@ -5,6 +5,7 @@ making it difficult to test the main functionality without refactoring.
These tests verify the module-level constants.
"""
import importlib
from pathlib import Path
import sys
from unittest.mock import MagicMock, patch
@ -88,7 +89,7 @@ class TestModuleExecution:
patch("pathlib.Path.iterdir", return_value=[]),
patch("os.chdir"),
):
import python_pkg.tag_divider.tag_divider # noqa: F401
importlib.import_module("python_pkg.tag_divider.tag_divider")
# mkdir should have been called twice (once for each folder)
assert mock_mkdir.call_count == 2
@ -108,7 +109,7 @@ class TestModuleExecution:
patch("pathlib.Path.iterdir", return_value=[]),
patch("os.chdir"),
):
import python_pkg.tag_divider.tag_divider # noqa: F401
importlib.import_module("python_pkg.tag_divider.tag_divider")
# mkdir should not have been called
mock_mkdir.assert_not_called()
@ -137,7 +138,7 @@ class TestModuleExecution:
patch.dict("sys.modules", {"cv2": mock_cv2}),
patch("shutil.move", mock_move),
):
import python_pkg.tag_divider.tag_divider # noqa: F401
importlib.import_module("python_pkg.tag_divider.tag_divider")
# Image should be moved to first folder
mock_move.assert_called_once()
@ -166,7 +167,7 @@ class TestModuleExecution:
patch.dict("sys.modules", {"cv2": mock_cv2}),
patch("shutil.move", mock_move),
):
import python_pkg.tag_divider.tag_divider # noqa: F401
importlib.import_module("python_pkg.tag_divider.tag_divider")
# Image should be moved to second folder
mock_move.assert_called_once()
@ -192,7 +193,7 @@ class TestModuleExecution:
patch.dict("sys.modules", {"cv2": mock_cv2}),
patch("shutil.move", mock_move),
):
import python_pkg.tag_divider.tag_divider # noqa: F401
importlib.import_module("python_pkg.tag_divider.tag_divider")
# No image processing should have occurred
mock_cv2.imread.assert_not_called()
@ -222,7 +223,7 @@ class TestModuleExecution:
patch.dict("sys.modules", {"cv2": mock_cv2}),
patch("shutil.move", mock_move),
):
import python_pkg.tag_divider.tag_divider # noqa: F401
importlib.import_module("python_pkg.tag_divider.tag_divider")
# File should not be moved
mock_move.assert_not_called()