64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
"""
|
||
Тесты для helper_bot.middlewares.dependencies_middleware.
|
||
"""
|
||
|
||
from unittest.mock import AsyncMock, MagicMock, patch
|
||
|
||
import pytest
|
||
|
||
from helper_bot.middlewares.dependencies_middleware import DependenciesMiddleware
|
||
|
||
|
||
@pytest.mark.unit
|
||
@pytest.mark.asyncio
|
||
class TestDependenciesMiddleware:
|
||
"""Тесты для DependenciesMiddleware."""
|
||
|
||
@pytest.fixture
|
||
def middleware(self):
|
||
"""Экземпляр middleware."""
|
||
return DependenciesMiddleware()
|
||
|
||
@pytest.fixture
|
||
def mock_handler(self):
|
||
"""Мок handler."""
|
||
return AsyncMock(return_value="ok")
|
||
|
||
@patch("helper_bot.middlewares.dependencies_middleware.get_global_instance")
|
||
async def test_injects_bot_db_and_settings_into_data(
|
||
self, mock_get_global, middleware, mock_handler
|
||
):
|
||
"""В data подставляются bot_db и settings из get_global_instance."""
|
||
mock_bdf = MagicMock()
|
||
mock_db = MagicMock()
|
||
mock_settings = {"Telegram": {}}
|
||
mock_bdf.get_db.return_value = mock_db
|
||
mock_bdf.settings = mock_settings
|
||
mock_get_global.return_value = mock_bdf
|
||
|
||
event = MagicMock()
|
||
data = {}
|
||
|
||
result = await middleware(mock_handler, event, data)
|
||
|
||
mock_get_global.assert_called_once()
|
||
assert data["bot_db"] is mock_db
|
||
assert data["settings"] is mock_settings
|
||
mock_handler.assert_called_once_with(event, data)
|
||
assert result == "ok"
|
||
|
||
@patch("helper_bot.middlewares.dependencies_middleware.get_global_instance")
|
||
async def test_exception_does_not_break_chain(
|
||
self, mock_get_global, middleware, mock_handler
|
||
):
|
||
"""При исключении в get_global_instance handler всё равно вызывается."""
|
||
mock_get_global.side_effect = RuntimeError("No global instance")
|
||
|
||
event = MagicMock()
|
||
data = {}
|
||
|
||
result = await middleware(mock_handler, event, data)
|
||
|
||
mock_handler.assert_called_once_with(event, data)
|
||
assert result == "ok"
|