From ec0c8a6f712c4dd3a5337ab6b441c4fbfcbf719f Mon Sep 17 00:00:00 2001 From: Gustavo Henrique Santos Souza de Miranda Date: Mon, 21 Jul 2025 17:43:39 -0300 Subject: [PATCH] Add the tests for the config manager --- tests/utils/test_config_manager.py | 67 ++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 tests/utils/test_config_manager.py diff --git a/tests/utils/test_config_manager.py b/tests/utils/test_config_manager.py new file mode 100644 index 0000000..511f43e --- /dev/null +++ b/tests/utils/test_config_manager.py @@ -0,0 +1,67 @@ +import pytest +import tomli +from pathlib import Path +from unittest.mock import patch + +from pilgrim.utils.config_manager import ConfigManager, SingletonMeta +from pilgrim.utils.directory_manager import DirectoryManager + +@pytest.fixture +def clean_singleton(): + SingletonMeta._instances = {} + +@patch('pilgrim.utils.config_manager.DirectoryManager.get_config_directory') +def test_create_default_config_if_not_exists_with_decorator(mock_get_config_dir, tmp_path: Path, clean_singleton): + mock_get_config_dir.return_value = str(tmp_path) + manager = ConfigManager() + config_file = tmp_path / "config.toml" + assert not config_file.exists() + manager.read_config() + assert config_file.exists() + assert manager.database_type == "sqlite" + +@patch('pilgrim.utils.config_manager.DirectoryManager.get_config_directory') +def test_read_existing_config_with_decorator(mock_get_config_dir, tmp_path: Path, clean_singleton): + mock_get_config_dir.return_value = str(tmp_path) + custom_config_content = """ + [database] + url = "/custom/path/to/db.sqlite" + type = "custom_sqlite" + [settings.diary] + auto_open_diary_on_startup = "MyCustomDiary" + auto_open_on_creation = true + """ + config_file = tmp_path / "config.toml" + config_file.write_text(custom_config_content) + + manager = ConfigManager() + manager.read_config() + assert manager.database_url == "/custom/path/to/db.sqlite" + assert manager.database_type == "custom_sqlite" + +@patch('pilgrim.utils.config_manager.DirectoryManager.get_config_directory') +def test_save_config_writes_changes_to_file_with_decorator(mock_get_config_dir, tmp_path: Path, clean_singleton): + mock_get_config_dir.return_value = str(tmp_path) + manager = ConfigManager() + manager.read_config() + manager.set_database_url("/novo/caminho.db") + manager.set_auto_open_new_diary(True) + manager.save_config() + config_file = tmp_path / "config.toml" + with open(config_file, "rb") as f: + data = tomli.load(f) + assert data["database"]["url"] == "/novo/caminho.db" + assert data["settings"]["diary"]["auto_open_on_creation"] is True + +@patch('pilgrim.utils.config_manager.DirectoryManager.get_config_directory') +def test_read_config_raises_error_on_malformed_toml(mock_get_config_dir, tmp_path: Path, clean_singleton): + mock_get_config_dir.return_value = str(tmp_path) + invalid_toml_content = """ + [database] + url = /caminho/sem/aspas + """ + config_file = tmp_path / "config.toml" + config_file.write_text(invalid_toml_content) + manager = ConfigManager() + with pytest.raises(ValueError, match="Invalid TOML configuration"): + manager.read_config() \ No newline at end of file