Переписал почти все тесты

feat: улучшено логирование и обработка скорингов в PostService и RagApiClient

- Добавлены отладочные сообщения для передачи скорингов в функции обработки постов.
- Обновлено логирование успешного получения скорингов из RAG API с дополнительной информацией.
- Оптимизирована обработка скорингов в функции get_text_message для улучшения отладки.
- Обновлены тесты для проверки новых функциональных возможностей и обработки ошибок.
This commit is contained in:
2026-01-30 00:55:47 +03:00
parent e87f4af82f
commit a5faa4bdc6
27 changed files with 4320 additions and 8 deletions

View 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"