dangerzone/tests/test_settings.py
2025-03-24 15:42:59 +01:00

66 lines
2.1 KiB
Python

import json
from pathlib import Path
from unittest.mock import PropertyMock
import pytest
from pytest_mock import MockerFixture
from dangerzone import settings
def test_no_settings_file_creates_new_one(
mock_settings: Path,
) -> None:
"""Default settings file is created on first run"""
settings.load()
assert settings.FILENAME.is_file()
with settings.FILENAME.open() as settings_file:
new_settings_dict = json.load(settings_file)
assert sorted(new_settings_dict.items()) == sorted(
settings.generate_default_settings().items()
)
def test_corrupt_settings(mocker: MockerFixture, mock_settings: Path) -> None:
# Set some broken settings file
corrupt_settings_dict = "{:}"
with settings.FILENAME.open("w") as settings_file:
settings_file.write(corrupt_settings_dict)
assert settings.FILENAME.is_file()
settings.load()
# Check if settings file was reset to the default
new_settings_dict = json.load(open(settings.FILENAME))
assert new_settings_dict != corrupt_settings_dict
assert sorted(new_settings_dict.items()) == sorted(
settings.generate_default_settings().items()
)
def test_new_default_setting(tmp_path: Path, mocker: MockerFixture) -> None:
mocker.patch("dangerzone.settings.get_config_dir", return_value=tmp_path)
settings.save()
# Ensure new default setting is imported into settings
mocker.patch(
"dangerzone.settings.generate_default_settings",
return_value={"mock_setting": 1},
)
settings.load()
assert settings.get("mock_setting") == 1
def test_new_settings_added(tmp_path: Path, mocker: MockerFixture) -> None:
mocker.patch("dangerzone.settings.get_config_dir", return_value=tmp_path)
# Add new setting
settings.set("new_setting_autosaved", 20, autosave=True)
settings.set(
"new_setting", 10
) # XXX has to be afterwards; otherwise this will be saved
settings.load()
# Check if new setting persisted
assert 20 == settings.get("new_setting_autosaved")
with pytest.raises(KeyError):
settings.get("new_setting")