/
liquid-g
/
liquid-code
Обзор
Документация
Войти
/
liquid-g
/
liquid-code
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop-0.4
tests/unit/test_middleware_loader.py
159 строк
6 KB
User
0.4.9 - переработка документации, рефакторинг кода, покрытие тестами 70%
06 июл 2026, 13:37
06 июл 2026, 13:37
79b2ebc
Код
Авторство
О чём код?
"""Unit-тесты для application/middleware_loader module.""" import pytest from unittest.mock import Mock, patch, MagicMock import importlib from liquidcode.application.middleware_loader import ( load_middleware_item, load_middleware_from_config, ) class TestLoadMiddlewareItem: """Тесты load_middleware_item.""" def test_disabled_middleware_returns_false(self): """Отключённый middleware возвращает False.""" app = Mock() item = {"class": "some.middleware.Class", "enabled": False} result = load_middleware_item(app, item) assert result is False def test_middleware_with_container_param(self): """Middleware с параметром container получает container.""" app = Mock() app.container = Mock() app._debug = True app.add_middleware = Mock() # Создаём фиктивный middleware класс class TestMiddleware: def __init__(self, container, debug=False): self.container = container self.debug = debug with patch("importlib.import_module") as mock_import: mock_module = Mock() mock_module.TestMiddleware = TestMiddleware mock_import.return_value = mock_module item = { "class": "tests.unit.middleware.test_middleware.TestMiddleware", "enabled": True, } result = load_middleware_item(app, item) assert result is True app.add_middleware.assert_called_once() def test_middleware_with_extra_params(self): """Middleware с дополнительными параметрами из конфига.""" app = Mock() app.container = Mock() app._debug = True app.add_middleware = Mock() # Создаём фиктивный middleware класс с параметрами class TestMiddleware: def __init__(self, container, directory=None, prefix=None): self.container = container self.directory = directory self.prefix = prefix with patch("importlib.import_module") as mock_import: mock_module = Mock() mock_module.TestMiddleware = TestMiddleware mock_import.return_value = mock_module item = { "class": "tests.unit.middleware.test_middleware.TestMiddleware", "enabled": True, "directory": "/path/to/templates", "prefix": "/api", } result = load_middleware_item(app, item) assert result is True app.add_middleware.assert_called_once() def test_middleware_load_failure_logs_error(self): """Ошибка загрузки middleware логируется.""" app = Mock() app.container = Mock() app._debug = True app.add_middleware = Mock() item = { "class": "non.existing.module.NonExistingClass", "enabled": True, } with patch("logging.Logger.error") as mock_error: result = load_middleware_item(app, item) assert result is False mock_error.assert_called_once() def test_middleware_signature_without_container(self): """Middleware без параметра container не получает container.""" app = Mock() app.container = Mock() app._debug = True app.add_middleware = Mock() # Создаём middleware без параметра container class TestMiddleware: def __init__(self, debug=False): self.debug = debug with patch("importlib.import_module") as mock_import: mock_module = Mock() mock_module.TestMiddleware = TestMiddleware mock_import.return_value = mock_module item = { "class": "tests.unit.middleware.test_middleware.TestMiddleware", "enabled": True, } result = load_middleware_item(app, item) assert result is True app.add_middleware.assert_called_once() class TestLoadMiddlewareFromConfig: """Тесты load_middleware_from_config.""" def test_loads_middleware_in_priority_order(self): """Middleware загружаются в порядке приоритета.""" app = Mock() app.container = Mock() app._debug = True app.add_middleware = Mock() middleware_list = [ {"class": "m1.M1", "enabled": True, "priority": 2}, {"class": "m2.M2", "enabled": True, "priority": 1}, {"class": "m3.M3", "enabled": True, "priority": 3}, ] with patch("importlib.import_module") as mock_import: mock_module = Mock() mock_module.M1 = Mock() mock_module.M2 = Mock() mock_module.M3 = Mock() mock_module.M1.return_value = Mock() mock_module.M2.return_value = Mock() mock_module.M3.return_value = Mock() mock_import.return_value = mock_module load_middleware_from_config(app, middleware_list) # Проверяем порядок вызовов (должен быть по возрастанию приоритета) assert app.add_middleware.call_count == 3