Переписал почти все тесты
feat: улучшено логирование и обработка скорингов в PostService и RagApiClient - Добавлены отладочные сообщения для передачи скорингов в функции обработки постов. - Обновлено логирование успешного получения скорингов из RAG API с дополнительной информацией. - Оптимизирована обработка скорингов в функции get_text_message для улучшения отладки. - Обновлены тесты для проверки новых функциональных возможностей и обработки ошибок.
This commit is contained in:
126
tests/test_album_middleware.py
Normal file
126
tests/test_album_middleware.py
Normal 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
|
||||
Reference in New Issue
Block a user