feat: добавлен функционал для извлечения и отправки описания PR в Telegram
- Реализована возможность получения тела последнего объединенного PR по коммиту в GitHub Actions. - Добавлен шаг для отправки описания PR в важные логи через Telegram. - Обновлены тесты для проверки нового функционала и улучшения логики обработки сообщений.
This commit is contained in:
@@ -111,7 +111,7 @@ class TestKeyboards:
|
||||
|
||||
assert isinstance(keyboard, ReplyKeyboardMarkup)
|
||||
assert keyboard.keyboard is not None
|
||||
assert len(keyboard.keyboard) == 2 # Две строки
|
||||
assert len(keyboard.keyboard) == 3 # Три строки
|
||||
|
||||
# Проверяем первую строку (3 кнопки)
|
||||
first_row = keyboard.keyboard[0]
|
||||
@@ -124,7 +124,12 @@ class TestKeyboards:
|
||||
second_row = keyboard.keyboard[1]
|
||||
assert len(second_row) == 2
|
||||
assert second_row[0].text == "Разбан (список)"
|
||||
assert second_row[1].text == "Вернуться в бота"
|
||||
assert second_row[1].text == "📊 ML Статистика"
|
||||
|
||||
# Проверяем третью строку (1 кнопка)
|
||||
third_row = keyboard.keyboard[2]
|
||||
assert len(third_row) == 1
|
||||
assert third_row[0].text == "Вернуться в бота"
|
||||
|
||||
def test_get_reply_keyboard_for_post(self):
|
||||
"""Тест клавиатуры для постов"""
|
||||
|
||||
@@ -3,16 +3,14 @@
|
||||
"""
|
||||
|
||||
import json
|
||||
import pytest
|
||||
from unittest.mock import AsyncMock, MagicMock, patch
|
||||
|
||||
import pytest
|
||||
# Импорты для тестирования базовых классов
|
||||
from helper_bot.services.scoring.base import ScoringResult, CombinedScore
|
||||
from helper_bot.services.scoring.exceptions import (
|
||||
ScoringError,
|
||||
InsufficientExamplesError,
|
||||
TextTooShortError,
|
||||
)
|
||||
from helper_bot.services.scoring.base import CombinedScore, ScoringResult
|
||||
from helper_bot.services.scoring.exceptions import (InsufficientExamplesError,
|
||||
ScoringError,
|
||||
TextTooShortError)
|
||||
|
||||
|
||||
class TestScoringResult:
|
||||
@@ -159,7 +157,7 @@ class TestVectorStore:
|
||||
def test_max_examples_limit(self, vector_store):
|
||||
"""Тест ограничения максимального количества примеров."""
|
||||
import numpy as np
|
||||
|
||||
|
||||
# Добавляем больше чем max_examples
|
||||
for i in range(150):
|
||||
vector = np.random.randn(768).astype(np.float32)
|
||||
@@ -179,7 +177,7 @@ class TestVectorStore:
|
||||
def test_calculate_similarity_with_examples(self, vector_store):
|
||||
"""Тест расчета скора с примерами."""
|
||||
import numpy as np
|
||||
|
||||
|
||||
# Добавляем положительные примеры
|
||||
for i in range(10):
|
||||
vector = np.random.randn(768).astype(np.float32)
|
||||
@@ -215,7 +213,8 @@ class TestDeepSeekService:
|
||||
@pytest.fixture
|
||||
def deepseek_service(self):
|
||||
"""Создает DeepSeekService для тестов."""
|
||||
from helper_bot.services.scoring.deepseek_service import DeepSeekService
|
||||
from helper_bot.services.scoring.deepseek_service import \
|
||||
DeepSeekService
|
||||
return DeepSeekService(
|
||||
api_key="test_key",
|
||||
enabled=True,
|
||||
@@ -224,7 +223,8 @@ class TestDeepSeekService:
|
||||
|
||||
def test_service_disabled_without_key(self):
|
||||
"""Тест отключения сервиса без API ключа."""
|
||||
from helper_bot.services.scoring.deepseek_service import DeepSeekService
|
||||
from helper_bot.services.scoring.deepseek_service import \
|
||||
DeepSeekService
|
||||
service = DeepSeekService(api_key=None, enabled=True)
|
||||
|
||||
assert service.is_enabled is False
|
||||
@@ -255,7 +255,8 @@ class TestDeepSeekService:
|
||||
@pytest.mark.asyncio
|
||||
async def test_calculate_score_disabled(self):
|
||||
"""Тест расчета скора при отключенном сервисе."""
|
||||
from helper_bot.services.scoring.deepseek_service import DeepSeekService
|
||||
from helper_bot.services.scoring.deepseek_service import \
|
||||
DeepSeekService
|
||||
service = DeepSeekService(api_key=None, enabled=False)
|
||||
|
||||
with pytest.raises(ScoringError):
|
||||
@@ -281,6 +282,8 @@ class TestScoringManager:
|
||||
source="rag",
|
||||
model="rubert",
|
||||
))
|
||||
mock.add_positive_example = AsyncMock()
|
||||
mock.add_negative_example = AsyncMock()
|
||||
return mock
|
||||
|
||||
@pytest.fixture
|
||||
@@ -293,6 +296,8 @@ class TestScoringManager:
|
||||
source="deepseek",
|
||||
model="deepseek-chat",
|
||||
))
|
||||
mock.add_positive_example = AsyncMock()
|
||||
mock.add_negative_example = AsyncMock()
|
||||
return mock
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -301,7 +306,7 @@ class TestScoringManager:
|
||||
from helper_bot.services.scoring.scoring_manager import ScoringManager
|
||||
|
||||
manager = ScoringManager(
|
||||
rag_service=mock_rag_service,
|
||||
rag_client=mock_rag_service,
|
||||
deepseek_service=mock_deepseek_service,
|
||||
)
|
||||
|
||||
@@ -317,7 +322,7 @@ class TestScoringManager:
|
||||
from helper_bot.services.scoring.scoring_manager import ScoringManager
|
||||
|
||||
manager = ScoringManager(
|
||||
rag_service=mock_rag_service,
|
||||
rag_client=mock_rag_service,
|
||||
deepseek_service=None,
|
||||
)
|
||||
|
||||
@@ -331,7 +336,7 @@ class TestScoringManager:
|
||||
"""Тест скоринга пустого текста."""
|
||||
from helper_bot.services.scoring.scoring_manager import ScoringManager
|
||||
|
||||
manager = ScoringManager(rag_service=mock_rag_service)
|
||||
manager = ScoringManager(rag_client=mock_rag_service)
|
||||
|
||||
result = await manager.score_post("")
|
||||
|
||||
@@ -342,12 +347,12 @@ class TestScoringManager:
|
||||
async def test_score_post_service_error(self, mock_rag_service, mock_deepseek_service):
|
||||
"""Тест обработки ошибки сервиса."""
|
||||
from helper_bot.services.scoring.scoring_manager import ScoringManager
|
||||
|
||||
|
||||
# RAG выбрасывает ошибку
|
||||
mock_rag_service.calculate_score = AsyncMock(side_effect=Exception("Test error"))
|
||||
|
||||
manager = ScoringManager(
|
||||
rag_service=mock_rag_service,
|
||||
rag_client=mock_rag_service,
|
||||
deepseek_service=mock_deepseek_service,
|
||||
)
|
||||
|
||||
@@ -365,7 +370,7 @@ class TestScoringManager:
|
||||
from helper_bot.services.scoring.scoring_manager import ScoringManager
|
||||
|
||||
manager = ScoringManager(
|
||||
rag_service=mock_rag_service,
|
||||
rag_client=mock_rag_service,
|
||||
deepseek_service=mock_deepseek_service,
|
||||
)
|
||||
|
||||
@@ -380,7 +385,7 @@ class TestScoringManager:
|
||||
from helper_bot.services.scoring.scoring_manager import ScoringManager
|
||||
|
||||
manager = ScoringManager(
|
||||
rag_service=mock_rag_service,
|
||||
rag_client=mock_rag_service,
|
||||
deepseek_service=mock_deepseek_service,
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user