Added settings dialog with loglevel
This commit is contained in:
72
tests/unit/test_settings_controller.py
Normal file
72
tests/unit/test_settings_controller.py
Normal file
@@ -0,0 +1,72 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
from PySide6.QtCore import QSettings
|
||||
from PySide6.QtWidgets import QApplication, QDialog
|
||||
|
||||
from bedit_gui.controllers.settings_controller import SettingsController
|
||||
from bedit_gui.services.application_logging import get_logger
|
||||
from bedit_gui.services.application_settings import ApplicationSettings
|
||||
from bedit_gui.views.main_window import MainWindow
|
||||
|
||||
|
||||
class FakeSettingsDialog:
|
||||
def __init__(self, log_level: int) -> None:
|
||||
self.initial_log_level = log_level
|
||||
self.log_level = logging.ERROR
|
||||
|
||||
def exec(self) -> QDialog.DialogCode:
|
||||
return QDialog.DialogCode.Accepted
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def qt_app() -> QApplication:
|
||||
return QApplication.instance() or QApplication([])
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
def test_log_level_is_persisted(tmp_path: Path) -> None:
|
||||
path = tmp_path / "settings.ini"
|
||||
backend = QSettings(str(path), QSettings.Format.IniFormat)
|
||||
settings = ApplicationSettings(backend)
|
||||
|
||||
settings.log_level = logging.DEBUG
|
||||
backend.sync()
|
||||
|
||||
reloaded = ApplicationSettings(
|
||||
QSettings(str(path), QSettings.Format.IniFormat)
|
||||
)
|
||||
assert reloaded.log_level == logging.DEBUG
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
def test_settings_action_applies_log_level(
|
||||
qt_app: QApplication,
|
||||
tmp_path: Path,
|
||||
) -> None:
|
||||
backend = QSettings(
|
||||
str(tmp_path / "settings.ini"),
|
||||
QSettings.Format.IniFormat,
|
||||
)
|
||||
settings = ApplicationSettings(backend)
|
||||
window = MainWindow()
|
||||
dialogs: list[FakeSettingsDialog] = []
|
||||
|
||||
def make_dialog(
|
||||
log_level: int,
|
||||
_window: MainWindow,
|
||||
) -> FakeSettingsDialog:
|
||||
dialog = FakeSettingsDialog(log_level)
|
||||
dialogs.append(dialog)
|
||||
return dialog
|
||||
|
||||
SettingsController(window, settings, make_dialog)
|
||||
window.ui.actionSettings.trigger()
|
||||
|
||||
assert dialogs[0].initial_log_level == logging.INFO
|
||||
assert settings.log_level == logging.ERROR
|
||||
assert get_logger("tests").isEnabledFor(logging.ERROR)
|
||||
assert not get_logger("tests").isEnabledFor(logging.WARNING)
|
||||
Reference in New Issue
Block a user