from contextlib import nullcontext from unittest.mock import MagicMock from logitech_battery_widget.windows import autostart def registry_mock(): registry = MagicMock() registry.HKEY_CURRENT_USER = object() registry.KEY_READ = 1 registry.KEY_SET_VALUE = 2 registry.REG_SZ = 1 key = MagicMock() registry.OpenKey.return_value = nullcontext(key) registry.CreateKeyEx.return_value = nullcontext(key) return registry, key def test_enable_writes_current_user_run_value(): registry, key = registry_mock() autostart.set_enabled(True, registry) registry.SetValueEx.assert_called_once_with( key, autostart.VALUE_NAME, 0, registry.REG_SZ, autostart.launch_command() ) def test_disable_removes_value_without_real_registry(): registry, key = registry_mock() autostart.set_enabled(False, registry) registry.DeleteValue.assert_called_once_with(key, autostart.VALUE_NAME) def test_is_enabled_compares_exact_command(): registry, _ = registry_mock() registry.QueryValueEx.return_value = (autostart.launch_command(), registry.REG_SZ) assert autostart.is_enabled(registry) def test_missing_value_is_disabled(): registry, _ = registry_mock() registry.QueryValueEx.side_effect = FileNotFoundError assert not autostart.is_enabled(registry)