Переписал почти все тесты
feat: улучшено логирование и обработка скорингов в PostService и RagApiClient - Добавлены отладочные сообщения для передачи скорингов в функции обработки постов. - Обновлено логирование успешного получения скорингов из RAG API с дополнительной информацией. - Оптимизирована обработка скорингов в функции get_text_message для улучшения отладки. - Обновлены тесты для проверки новых функциональных возможностей и обработки ошибок.
This commit is contained in:
112
tests/test_blacklist_middleware.py
Normal file
112
tests/test_blacklist_middleware.py
Normal file
@@ -0,0 +1,112 @@
|
||||
"""
|
||||
Тесты для helper_bot.middlewares.blacklist_middleware.
|
||||
"""
|
||||
|
||||
from unittest.mock import AsyncMock, MagicMock, patch
|
||||
|
||||
import pytest
|
||||
from aiogram.types import CallbackQuery, Message
|
||||
|
||||
from helper_bot.middlewares.blacklist_middleware import BlacklistMiddleware
|
||||
|
||||
|
||||
@pytest.mark.unit
|
||||
@pytest.mark.asyncio
|
||||
class TestBlacklistMiddleware:
|
||||
"""Тесты для BlacklistMiddleware."""
|
||||
|
||||
@pytest.fixture
|
||||
def middleware(self):
|
||||
"""Экземпляр middleware."""
|
||||
return BlacklistMiddleware()
|
||||
|
||||
@pytest.fixture
|
||||
def mock_handler(self):
|
||||
"""Мок handler."""
|
||||
return AsyncMock(return_value="handler_ok")
|
||||
|
||||
@patch("helper_bot.middlewares.blacklist_middleware.BotDB", new_callable=MagicMock)
|
||||
async def test_user_not_in_blacklist_calls_handler(
|
||||
self, mock_bot_db, middleware, mock_handler
|
||||
):
|
||||
"""Пользователь не в блэклисте — handler вызывается."""
|
||||
mock_bot_db.check_user_in_blacklist = AsyncMock(return_value=False)
|
||||
|
||||
event = MagicMock(spec=Message)
|
||||
event.from_user = MagicMock()
|
||||
event.from_user.id = 123
|
||||
event.from_user.username = "user1"
|
||||
data = {}
|
||||
|
||||
result = await middleware(mock_handler, event, data)
|
||||
|
||||
mock_bot_db.check_user_in_blacklist.assert_called_once_with(123)
|
||||
mock_handler.assert_called_once_with(event, data)
|
||||
assert result == "handler_ok"
|
||||
|
||||
@patch("helper_bot.middlewares.blacklist_middleware.BotDB", new_callable=MagicMock)
|
||||
async def test_user_in_blacklist_message_sends_answer_and_returns_false(
|
||||
self, mock_bot_db, middleware, mock_handler
|
||||
):
|
||||
"""Пользователь в блэклисте (Message) — отправляется ответ, handler не вызывается."""
|
||||
mock_bot_db.check_user_in_blacklist = AsyncMock(return_value=True)
|
||||
mock_bot_db.get_blacklist_users_by_id = AsyncMock(
|
||||
return_value=(123, "Спам", 1735689600) # user_id, reason, date_unban_ts
|
||||
)
|
||||
|
||||
event = MagicMock(spec=Message)
|
||||
event.from_user = MagicMock()
|
||||
event.from_user.id = 123
|
||||
event.from_user.username = "banned"
|
||||
event.answer = AsyncMock()
|
||||
data = {}
|
||||
|
||||
result = await middleware(mock_handler, event, data)
|
||||
|
||||
mock_handler.assert_not_called()
|
||||
event.answer.assert_called_once()
|
||||
call_text = event.answer.call_args[0][0]
|
||||
assert "Ты заблокирован" in call_text
|
||||
assert "Спам" in call_text
|
||||
assert result is False
|
||||
|
||||
@patch("helper_bot.middlewares.blacklist_middleware.BotDB", new_callable=MagicMock)
|
||||
async def test_user_in_blacklist_callback_sends_alert(
|
||||
self, mock_bot_db, middleware, mock_handler
|
||||
):
|
||||
"""Пользователь в блэклисте (CallbackQuery) — answer с show_alert=True."""
|
||||
mock_bot_db.check_user_in_blacklist = AsyncMock(return_value=True)
|
||||
mock_bot_db.get_blacklist_users_by_id = AsyncMock(
|
||||
return_value=(456, "Нарушение", None)
|
||||
)
|
||||
|
||||
event = MagicMock(spec=CallbackQuery)
|
||||
event.from_user = MagicMock()
|
||||
event.from_user.id = 456
|
||||
event.from_user.username = "banned_cb"
|
||||
event.answer = AsyncMock()
|
||||
data = {}
|
||||
|
||||
result = await middleware(mock_handler, event, data)
|
||||
|
||||
mock_handler.assert_not_called()
|
||||
event.answer.assert_called_once()
|
||||
call_args = event.answer.call_args
|
||||
assert call_args[0][0].startswith("<b>Ты заблокирован")
|
||||
assert call_args[1].get("show_alert") is True
|
||||
assert result is False
|
||||
|
||||
@patch("helper_bot.middlewares.blacklist_middleware.BotDB", new_callable=MagicMock)
|
||||
async def test_event_without_user_passes_through(
|
||||
self, mock_bot_db, middleware, mock_handler
|
||||
):
|
||||
"""Событие без user — handler вызывается (user = None)."""
|
||||
event = MagicMock()
|
||||
# Объект без from_user или from_user = None — в коде user = event.from_user
|
||||
event.from_user = None
|
||||
data = {}
|
||||
|
||||
result = await middleware(mock_handler, event, data)
|
||||
|
||||
mock_handler.assert_called_once_with(event, data)
|
||||
assert result == "handler_ok"
|
||||
Reference in New Issue
Block a user