mirror of
https://github.com/kuhyx/testsAndMisc-archive.git
synced 2026-07-04 14:43:04 +02:00
123 lines
4.1 KiB
Python
123 lines
4.1 KiB
Python
|
|
"""Tests for brightness_controller module - part 3 (toggle, daemon, auto)."""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from typing import TYPE_CHECKING
|
||
|
|
from unittest.mock import MagicMock, patch
|
||
|
|
|
||
|
|
from python_pkg.brightness_controller import brightness_controller
|
||
|
|
|
||
|
|
if TYPE_CHECKING:
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
MOD = "python_pkg.brightness_controller.brightness_controller"
|
||
|
|
|
||
|
|
|
||
|
|
def _make_controller(
|
||
|
|
devices: list[brightness_controller.Device] | None = None,
|
||
|
|
als_path: Path | None = None,
|
||
|
|
*,
|
||
|
|
daemon_state: bool = False,
|
||
|
|
) -> brightness_controller.BrightnessController:
|
||
|
|
"""Create a BrightnessController with all Tk operations mocked."""
|
||
|
|
if devices is None:
|
||
|
|
devices = [
|
||
|
|
brightness_controller.Device(
|
||
|
|
"intel_backlight", "backlight", 50, "50%", 120000
|
||
|
|
)
|
||
|
|
]
|
||
|
|
|
||
|
|
with (
|
||
|
|
patch(f"{MOD}._get_devices", return_value=devices),
|
||
|
|
patch(f"{MOD}._find_als_device", return_value=als_path),
|
||
|
|
patch.object(
|
||
|
|
brightness_controller.BrightnessController,
|
||
|
|
"_read_daemon_state",
|
||
|
|
return_value=daemon_state,
|
||
|
|
),
|
||
|
|
patch(f"{MOD}.tk.Tk") as mock_tk,
|
||
|
|
patch(f"{MOD}.tk.StringVar") as mock_str_var,
|
||
|
|
patch(f"{MOD}.tk.IntVar") as mock_int_var,
|
||
|
|
patch(f"{MOD}.ttk"),
|
||
|
|
patch(f"{MOD}._get_brightness", return_value=50),
|
||
|
|
):
|
||
|
|
mock_root = MagicMock()
|
||
|
|
mock_tk.return_value = mock_root
|
||
|
|
mock_root.after = MagicMock()
|
||
|
|
mock_str_var.return_value = MagicMock()
|
||
|
|
mock_int_var.return_value = MagicMock()
|
||
|
|
|
||
|
|
return brightness_controller.BrightnessController()
|
||
|
|
|
||
|
|
|
||
|
|
class TestToggleAuto:
|
||
|
|
"""Tests for _toggle_auto."""
|
||
|
|
|
||
|
|
def test_toggles(self) -> None:
|
||
|
|
ctrl = _make_controller()
|
||
|
|
ctrl.auto_mode = False
|
||
|
|
ctrl._set_auto = MagicMock()
|
||
|
|
ctrl._toggle_auto()
|
||
|
|
ctrl._set_auto.assert_called_once_with(enabled=True)
|
||
|
|
|
||
|
|
|
||
|
|
class TestReadDaemonState:
|
||
|
|
"""Tests for _read_daemon_state."""
|
||
|
|
|
||
|
|
def test_enabled(self, tmp_path: Path) -> None:
|
||
|
|
enabled_file = tmp_path / "enabled"
|
||
|
|
enabled_file.write_text("1")
|
||
|
|
with patch.object(brightness_controller, "ENABLED_FILE", enabled_file):
|
||
|
|
assert (
|
||
|
|
brightness_controller.BrightnessController._read_daemon_state() is True
|
||
|
|
)
|
||
|
|
|
||
|
|
def test_disabled(self, tmp_path: Path) -> None:
|
||
|
|
enabled_file = tmp_path / "enabled"
|
||
|
|
enabled_file.write_text("0")
|
||
|
|
with patch.object(brightness_controller, "ENABLED_FILE", enabled_file):
|
||
|
|
assert (
|
||
|
|
brightness_controller.BrightnessController._read_daemon_state() is False
|
||
|
|
)
|
||
|
|
|
||
|
|
def test_missing_file(self, tmp_path: Path) -> None:
|
||
|
|
enabled_file = tmp_path / "nonexistent"
|
||
|
|
with patch.object(brightness_controller, "ENABLED_FILE", enabled_file):
|
||
|
|
assert (
|
||
|
|
brightness_controller.BrightnessController._read_daemon_state() is False
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
class TestSetAuto:
|
||
|
|
"""Tests for _set_auto."""
|
||
|
|
|
||
|
|
def test_enable(self, tmp_path: Path) -> None:
|
||
|
|
config_dir = tmp_path / "config"
|
||
|
|
enabled_file = config_dir / "enabled"
|
||
|
|
ctrl = _make_controller()
|
||
|
|
ctrl.als_path = tmp_path # So _sync_auto_ui does something
|
||
|
|
ctrl.auto_btn_var = MagicMock()
|
||
|
|
ctrl.slider = MagicMock()
|
||
|
|
with (
|
||
|
|
patch.object(brightness_controller, "CONFIG_DIR", config_dir),
|
||
|
|
patch.object(brightness_controller, "ENABLED_FILE", enabled_file),
|
||
|
|
):
|
||
|
|
ctrl._set_auto(enabled=True)
|
||
|
|
assert ctrl.auto_mode is True
|
||
|
|
assert enabled_file.read_text() == "1"
|
||
|
|
|
||
|
|
def test_disable(self, tmp_path: Path) -> None:
|
||
|
|
config_dir = tmp_path / "config"
|
||
|
|
enabled_file = config_dir / "enabled"
|
||
|
|
ctrl = _make_controller()
|
||
|
|
ctrl.als_path = tmp_path
|
||
|
|
ctrl.auto_btn_var = MagicMock()
|
||
|
|
ctrl.slider = MagicMock()
|
||
|
|
with (
|
||
|
|
patch.object(brightness_controller, "CONFIG_DIR", config_dir),
|
||
|
|
patch.object(brightness_controller, "ENABLED_FILE", enabled_file),
|
||
|
|
):
|
||
|
|
ctrl._set_auto(enabled=False)
|
||
|
|
assert ctrl.auto_mode is False
|
||
|
|
assert enabled_file.read_text() == "0"
|