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

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,126 @@
"""
Тесты для helper_bot.middlewares.album_middleware.
"""
import asyncio
from unittest.mock import AsyncMock, MagicMock, patch
import pytest
from helper_bot.middlewares.album_middleware import AlbumGetter, AlbumMiddleware
@pytest.mark.unit
@pytest.mark.asyncio
class TestAlbumGetter:
"""Тесты для AlbumGetter."""
async def test_get_album_returns_collected_album_after_event_set(self):
"""get_album возвращает собранную медиагруппу после set()."""
album_data = {"group_1": {"collected_album": [MagicMock(), MagicMock()]}}
event = asyncio.Event()
event.set()
getter = AlbumGetter(album_data, "group_1", event)
result = await getter.get_album(timeout=1.0)
assert result is not None
assert len(result) == 2
async def test_get_album_returns_none_on_timeout(self):
"""get_album возвращает None при таймауте."""
album_data = {}
event = asyncio.Event()
getter = AlbumGetter(album_data, "group_1", event)
result = await getter.get_album(timeout=0.01)
assert result is None
async def test_get_album_returns_none_if_media_group_id_removed(self):
"""get_album возвращает None если media_group_id уже удалён из album_data."""
album_data = {}
event = asyncio.Event()
event.set()
getter = AlbumGetter(album_data, "missing_group", event)
result = await getter.get_album(timeout=0.1)
assert result is None
@pytest.mark.unit
@pytest.mark.asyncio
class TestAlbumMiddleware:
"""Тесты для AlbumMiddleware."""
@pytest.fixture
def middleware(self):
"""Middleware с короткой latency для тестов."""
return AlbumMiddleware(latency=0.05)
@pytest.fixture
def mock_handler(self):
"""Мок handler."""
return AsyncMock(return_value="ok")
async def test_no_media_group_id_calls_handler_immediately(self, middleware, mock_handler):
"""Сообщение без media_group_id передаётся в handler сразу."""
event = MagicMock()
event.media_group_id = None
event.message_id = 1
data = {}
result = await middleware(mock_handler, event, data)
mock_handler.assert_called_once_with(event, data)
assert result == "ok"
assert "album_getter" not in data
async def test_first_media_group_message_creates_album_getter_and_calls_handler(
self, middleware, mock_handler
):
"""Первое сообщение медиагруппы: создаётся album_getter, handler вызывается."""
event = MagicMock()
event.media_group_id = "group_123"
event.message_id = 10
data = {}
result = await middleware(mock_handler, event, data)
mock_handler.assert_called_once_with(event, data)
assert "album_getter" in data
assert isinstance(data["album_getter"], AlbumGetter)
assert data["album_getter"].media_group_id == "group_123"
assert result == "ok"
async def test_second_media_group_message_does_not_call_handler(self, middleware, mock_handler):
"""Второе сообщение той же медиагруппы: handler не вызывается."""
event1 = MagicMock()
event1.media_group_id = "group_456"
event1.message_id = 1
data1 = {}
await middleware(mock_handler, event1, data1)
event2 = MagicMock()
event2.media_group_id = "group_456"
event2.message_id = 2
data2 = {}
result = await middleware(mock_handler, event2, data2)
assert mock_handler.call_count == 1
assert result is None
def test_collect_album_messages_returns_count(self, middleware):
"""collect_album_messages возвращает количество сообщений в группе."""
event = MagicMock()
event.media_group_id = "g1"
assert middleware.collect_album_messages(event) == 1
assert middleware.collect_album_messages(event) == 2
def test_collect_album_messages_no_media_group_returns_zero(self, middleware):
"""Без media_group_id возвращается 0."""
event = MagicMock()
event.media_group_id = None
assert middleware.collect_album_messages(event) == 0