/
liquid-g
/
liquid-code
Обзор
Документация
Войти
/
liquid-g
/
liquid-code
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop-0.4
tests/unit/test_config.py
183 строки
7 KB
User
0.4.15 - Улучшение обработки исключений и структура документации по middleware
06 июл 2026, 17:30
06 июл 2026, 17:30
30f3e0a
Код
Авторство
О чём код?
"""Unit-тесты для config.py.""" import pytest import tempfile import os from unittest.mock import patch class TestLoadConfig: """Тесты для load_config().""" def test_load_yaml_config(self): """Загрузка YAML конфига.""" with tempfile.TemporaryDirectory() as tmpdir: config_path = os.path.join(tmpdir, "config.yaml") with open(config_path, "w") as f: f.write("host: localhost\nport: 8000\n") from liquidcode.config import load_config config = load_config(config_path) assert config["host"] == "localhost" assert config["port"] == 8000 def test_load_json_config(self): """Загрузка JSON конфига.""" with tempfile.TemporaryDirectory() as tmpdir: config_path = os.path.join(tmpdir, "config.json") with open(config_path, "w") as f: f.write('{"host": "localhost", "port": 8000}') from liquidcode.config import load_config config = load_config(config_path) assert config["host"] == "localhost" assert config["port"] == 8000 def test_config_file_not_found(self): """Файл конфига не найден.""" from liquidcode.config import load_config, ConfigError with pytest.raises(ConfigError) as exc_info: load_config("nonexistent.yaml") assert "not found" in str(exc_info.value) def test_invalid_yaml_syntax(self): """Неверный синтаксис YAML.""" with tempfile.TemporaryDirectory() as tmpdir: config_path = os.path.join(tmpdir, "config.yaml") with open(config_path, "w") as f: f.write("host: localhost\n invalid:\n key") from liquidcode.config import load_config, ConfigError with pytest.raises(ConfigError) as exc_info: load_config(config_path) assert "Invalid YAML" in str(exc_info.value) def test_invalid_json_syntax(self): """Неверный синтаксис JSON.""" with tempfile.TemporaryDirectory() as tmpdir: config_path = os.path.join(tmpdir, "config.json") with open(config_path, "w") as f: f.write('{"host": "localhost", "port": }') from liquidcode.config import load_config, ConfigError with pytest.raises(ConfigError) as exc_info: load_config(config_path) assert "Invalid JSON" in str(exc_info.value) def test_unsupported_format(self): """Неподдерживаемый формат файла.""" with tempfile.TemporaryDirectory() as tmpdir: config_path = os.path.join(tmpdir, "config.txt") with open(config_path, "w") as f: f.write("host: localhost") from liquidcode.config import load_config, ConfigError with pytest.raises(ConfigError) as exc_info: load_config(config_path) assert "Unsupported config format" in str(exc_info.value) def test_empty_yaml_file(self): """Пустой YAML файл.""" with tempfile.TemporaryDirectory() as tmpdir: config_path = os.path.join(tmpdir, "config.yaml") with open(config_path, "w") as f: f.write("") from liquidcode.config import load_config config = load_config(config_path) assert config == {} def test_yaml_with_only_comments(self): """YAML файл только с комментариями.""" with tempfile.TemporaryDirectory() as tmpdir: config_path = os.path.join(tmpdir, "config.yaml") with open(config_path, "w") as f: f.write("# This is a comment\n# Another comment\n") from liquidcode.config import load_config config = load_config(config_path) assert config == {} def test_yaml_file_not_found(self): """YAML файл не найден.""" from liquidcode.config import load_config, ConfigError with tempfile.TemporaryDirectory() as tmpdir: config_path = os.path.join(tmpdir, "nonexistent.yaml") with pytest.raises(ConfigError) as exc_info: load_config(config_path) assert "not found" in str(exc_info.value) def test_json_file_not_found(self): """JSON файл не найден.""" from liquidcode.config import load_config, ConfigError with tempfile.TemporaryDirectory() as tmpdir: config_path = os.path.join(tmpdir, "nonexistent.json") with pytest.raises(ConfigError) as exc_info: load_config(config_path) assert "not found" in str(exc_info.value) assert exc_info.value.error_type == ConfigError.FILE_NOT_FOUND def test_permission_error(self): """Ошибка доступа к файлу (с mock для эмуляции PermissionError).""" from liquidcode.config import load_config, ConfigError with tempfile.TemporaryDirectory() as tmpdir: config_path = os.path.join(tmpdir, "config.yaml") with open(config_path, "w") as f: f.write("host: localhost") # Эмулируем PermissionError с помощью mock with patch("builtins.open", side_effect=PermissionError("Permission denied")): with pytest.raises(ConfigError) as exc_info: load_config(config_path) assert exc_info.value.error_type == ConfigError.PERMISSION_DENIED assert "Permission denied" in str(exc_info.value) class TestConfigError: """Тесты для ConfigError.""" def test_config_error_inherits_exception(self): """ConfigError наследуется от Exception.""" from liquidcode.config import ConfigError error = ConfigError("Test error") assert isinstance(error, Exception) def test_config_error_with_error_type(self): """ConfigError поддерживает error_type.""" from liquidcode.config import ConfigError error = ConfigError("Test error", error_type=ConfigError.FILE_NOT_FOUND) assert error.error_type == ConfigError.FILE_NOT_FOUND assert str(error) == "Test error" def test_config_error_default_error_type(self): """ConfigError по умолчанию имеет None error_type.""" from liquidcode.config import ConfigError error = ConfigError("Test error") assert error.error_type is None