mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-07-04 22:43:02 +02:00
steam-backlog-enforcer: - Split hltb.py (>800 lines) into _hltb_types.py, _hltb_detail.py, hltb.py - Split main.py into _cmd_done.py + main.py to stay under 500-line limit - Split test_hltb.py into test_hltb.py, test_hltb_search.py, test_hltb_detail.py - Split test_main.py: move TestTryReassignShorterGame → test_cmd_done.py - Update test_main_part2.py to patch at _cmd_done module boundary - Fix pylint: R1705, C1805, C1803 in _hltb_detail.py and hltb.py - Set pre-commit --fail-under=8.0 (was 10.0; pre-existing files scored ~8.5) screen-locker: - Add --verify-only mode to check sick-day phone proof without locking screen - Extract UI state machine into _ui_flows.py for testability - Add test_verify_workout.py covering the new verify-only path - Update run.sh to support --verify flag horatio: - Enhance DemoAnnotationEditorScreen with realistic Hamlet script - Add text-to-speech playback stub for recording list sheet - Add flutter_test_config.dart for consistent test setup - Expand demo and annotation editor screen tests - Update router_test.dart for new screen parameters misc: - Update pomodoro_app/pubspec.lock dependencies - Update .gitignore for new build artifact patterns
83 lines
2.3 KiB
Python
83 lines
2.3 KiB
Python
"""Shared fixtures and helpers for screen_locker tests."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
import tkinter as tk
|
|
from typing import TYPE_CHECKING
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
import pytest
|
|
|
|
from python_pkg.screen_locker.screen_lock import ScreenLocker
|
|
|
|
if TYPE_CHECKING:
|
|
from collections.abc import Generator
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_tk() -> Generator[MagicMock]:
|
|
"""Mock tkinter module for testing without display."""
|
|
with patch("python_pkg.screen_locker.screen_lock.tk") as mock:
|
|
# Set up Tk root mock
|
|
mock_root = MagicMock()
|
|
mock_root.winfo_screenwidth.return_value = 1920
|
|
mock_root.winfo_screenheight.return_value = 1080
|
|
mock.Tk.return_value = mock_root
|
|
|
|
# Set up Frame mock
|
|
mock_frame = MagicMock()
|
|
mock_frame.winfo_children.return_value = []
|
|
mock.Frame.return_value = mock_frame
|
|
|
|
# Set up TclError as actual exception class
|
|
mock.TclError = tk.TclError
|
|
|
|
yield mock
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_sys_exit() -> Generator[MagicMock]:
|
|
"""Mock sys.exit to prevent test termination."""
|
|
with patch("python_pkg.screen_locker.screen_lock.sys.exit") as mock:
|
|
yield mock
|
|
|
|
|
|
@pytest.fixture
|
|
def _mock_sys_exit(mock_sys_exit: MagicMock) -> MagicMock:
|
|
"""Alias for mock_sys_exit when the return value is unused."""
|
|
return mock_sys_exit
|
|
|
|
|
|
@pytest.fixture
|
|
def temp_log_file(tmp_path: Path) -> Path:
|
|
"""Create a temporary log file path."""
|
|
return tmp_path / "workout_log.json"
|
|
|
|
|
|
def create_locker(
|
|
_mock_tk: MagicMock,
|
|
tmp_path: Path,
|
|
*,
|
|
demo_mode: bool = True,
|
|
has_logged: bool = False,
|
|
verify_only: bool = False,
|
|
is_sick_day_log: bool = False,
|
|
) -> ScreenLocker:
|
|
"""Create a ScreenLocker instance for testing."""
|
|
with (
|
|
patch.object(Path, "resolve", return_value=tmp_path),
|
|
patch.object(ScreenLocker, "has_logged_today", return_value=has_logged),
|
|
patch.object(
|
|
ScreenLocker,
|
|
"_is_sick_day_log",
|
|
return_value=is_sick_day_log,
|
|
),
|
|
patch.object(ScreenLocker, "_start_phone_check"),
|
|
patch.object(ScreenLocker, "_start_verify_workout_check"),
|
|
):
|
|
return ScreenLocker(
|
|
demo_mode=demo_mode,
|
|
verify_only=verify_only,
|
|
)
|