Commit Graph

14 Commits

Author SHA1 Message Date
c985160d17 WIP: Enforce 500-line limit - split batch 1
Split 16+ files. 27 files still need splitting. See session notes.
2026-03-16 22:46:48 +01:00
1e108d1e3f 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
2026-03-13 20:49:25 +01:00
a560341a03 Optimize tests and simplify coverage config
- Optimize slow tests (3.5s -> 0.4s):
  - Mock threading.Thread instead of spawning real threads
  - Use PropertyMock instead of generator-based exception
- Simplify coverage config:
  - Set source to '.' to check all Python files
  - Remove exclude_lines (no special exclusions needed)
2025-12-02 22:12:50 +01:00
94fef50913 Achieve 100% test coverage for lichess_bot/main.py
- Refactor loops to use explicit next()/StopIteration for coverage
- Add tests for _collect_analysis_lines with empty and full iterators
- Add tests for _process_game_events_loop with multiple game events
- Add tests for _run_event_loop with limited and unlimited iterations
- Add test for process_analysis_output with error exit but no stderr
- Add test for process_game_finish with invalid data type
- All 85 tests pass with 100% line and branch coverage
2025-12-02 22:03:16 +01:00
38fe3ef53e Add comprehensive tests for lichess_bot main.py and lichess_api.py
- Fix test_process_game_event_game_end to properly mock engine
- Fix test_handle_game tests to mock _run_analysis_subprocess to prevent hanging
- Fix test_process_game_start_event to mock analysis subprocess
- Add test_process_game_event_game_end_after_move to cover game end status path
- Add test_process_game_event_color_unknown_on_gamefull to cover gameFull with spectator
- Add tests for lichess_api.py covering spectator case and join_game_stream edge cases
- Fix mypy type errors with Event and GameThreads type aliases

Coverage:
- lichess_api.py: 100% (was 98%)
- main.py: 99% (branch partials for loop exits only)
2025-12-02 21:53:15 +01:00
90c065eb1d Achieve 100% coverage for lichess_api.py
- Add test for spectator case (neither white nor black)
- Add test for non-gameFull events before gameFull
- Add test for stream ending without gameFull event
2025-12-01 20:46:09 +01:00
3ef256973f feat(tests): add comprehensive tests for lichess_bot engine and API
- Add test_engine.py with 100% coverage for engine.py
  - Tests for Engine class initialization
  - Tests for choose_move with various scenarios
  - Tests for best move parsing and validation
  - Tests for checkmate and stalemate detection

- Add test_lichess_api.py with 98% coverage for lichess_api.py
  - Tests for API initialization and request handling
  - Tests for stream_events with proper infinite loop handling
  - Tests for challenge accept/decline
  - Tests for game streaming and move submission
  - Tests for rate limit handling and retry logic

- Remove unreachable return statement in lichess_api.make_move

Coverage: engine.py 17% -> 100%, lichess_api.py 0% -> 98%
2025-12-01 20:41:51 +01:00
92e15e8909 Improve lichess_bot utils.py test coverage to 100%
- Add tests for _version_file_path environment override
- Add tests for missing and invalid version files
- Add tests for write failure error handling
2025-12-01 20:02:05 +01:00
8ecc13cb56 fix(lint): fix G004 and PTH123 violations across codebase
- Convert f-string logging to % style (G004)
- Convert open() to Path.open() (PTH123)
- Remove G004 and PTH123 from global ignores in pyproject.toml
2025-11-30 23:57:49 +01:00
1979089fcf fix(lint): fix S603 in engine.py and D100 in conftest.py
- Add noqa: S603 for trusted internal C engine subprocess call
- Add module docstring to conftest.py
- Remove per-file ignores for engine.py and conftest.py from pyproject.toml
2025-11-30 23:43:34 +01:00
d22619b483 fix(lint): convert os.path to pathlib - remove PTH per-file ignores
- Converted os.path patterns to pathlib.Path in 15+ files
- os.path.join → Path /
- os.path.dirname → Path.parent
- os.path.exists → Path.exists()
- os.path.isfile → Path.is_file()
- os.path.abspath → Path.resolve()
- os.mkdir → Path.mkdir()
- os.listdir → Path.iterdir()
- os.getcwd → Path.cwd()
- os.replace → Path.replace()
- Updated function type hints to accept str | Path

Added PTH123 (open() vs Path.open()) to global ignores as stylistic preference
2025-11-30 23:03:03 +01:00
b1a5f245a2 fix(lint): LOG015 - replace root logger with module loggers
- Add _logger = logging.getLogger(__name__) to all modules
- Replace logging.X() calls with _logger.X() calls
- Remove logging.basicConfig() from module level (keep in run_bot())
- Add G004 to global ignores (f-strings in logging are more readable)
- Remove LOG015 and G004 per-file ignores from pyproject.toml
- Fix pytest_ignore_collect hook signature in conftest.py
2025-11-30 21:59:24 +01:00
dd2da6e2cc fix(lint): BLE001 - replace blind except with specific exceptions
Replace bare 'except Exception' with specific exception types:
- ValueError for move parsing (chess.Move.from_uci, board.push_uci)
- json.JSONDecodeError for JSON parsing
- OSError for file operations
- ImportError for optional imports
- AttributeError for attribute access
- TypeError for type-related operations
- requests.RequestException for HTTP operations
- subprocess.SubprocessError for subprocess failures
- selenium.NoSuchElementException for element finding

Also fixes:
- pytest hook signature issue in conftest.py (_config -> _)
- Missing file handling in test_puzzles.py
- Line length in stockfish_analysis.py

Removes all BLE001 per-file ignores from pyproject.toml.
2025-11-30 21:37:47 +01:00
2dd4e68edb refactor: rename folders to fix N999, INP001, S311 linting rules
- Rename PYTHON/ to python_pkg/ (fix N999 uppercase folder)
- Rename camelCase folders to snake_case:
  - randomJPG -> random_jpg
  - tagDivider -> tag_divider
  - downloadCats -> download_cats
  - keyboardCoop -> keyboard_coop
  - extractLinks -> extract_links
  - scapeWebsite -> scrape_website
- Rename camelCase files:
  - generateJpeg.py -> generate_jpeg.py
  - tagDivider.py -> tag_divider.py
- Rename poker-modifier-app to poker_modifier_app (fix INP001)
- Add __init__.py to poker_modifier_app
- Replace random module with secrets.SystemRandom (fix S311)
- Fix S110 try-except-pass with contextlib.suppress
- Update all imports and config references
2025-11-30 21:20:17 +01:00