Подготовка к релизу

This commit is contained in:
2025-10-30 18:28:26 +03:00
parent 69c0162c6b
commit 4981db90a0
191 changed files with 45557 additions and 3651 deletions
+111
View File
@@ -0,0 +1,111 @@
"""
Конфигурация pytest для тестов обработчиков.
"""
import os
import sys
import tempfile
import pytest
from datetime import datetime
from unittest.mock import Mock, AsyncMock
from telegram import Update, User, Message, Chat, CallbackQuery
from telegram.ext import ContextTypes
# Добавляем корневую директорию в путь
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from core.config import Config
from services.user_service import UserService
@pytest.fixture
def test_config():
"""Фикстура с тестовой конфигурацией"""
# Создаем временный файл конфигурации для тестов
with tempfile.NamedTemporaryFile(mode='w', suffix='.py', delete=False) as f:
f.write("""
BOT_TOKEN = "123456789:test_token_for_testing"
ADMIN_IDS = [123456789, 987654321]
OPENWEATHER_API_KEY = "test_weather_key"
NEWS_API_KEY = "test_news_key"
OPENAI_API_KEY = "test_openai_key"
""")
config_path = f.name
try:
config = Config(config_path)
yield config
finally:
os.unlink(config_path)
@pytest.fixture
def mock_user_service():
"""Мок сервиса пользователей"""
service = Mock(spec=UserService)
service.get_or_create_user = AsyncMock()
service.update_user_activity = AsyncMock()
service.get_top_users = AsyncMock()
service.get_rank_progress = Mock()
return service
@pytest.fixture
def mock_user():
"""Фикстура с мок-объектом пользователя"""
user = Mock(spec=User)
user.id = 123456789
user.username = "test_user"
user.first_name = "Test"
user.last_name = "User"
user.is_bot = False
return user
@pytest.fixture
def mock_chat():
"""Фикстура с мок-объектом чата"""
chat = Mock(spec=Chat)
chat.id = -1001234567890
chat.type = "group"
chat.title = "Test Chat"
return chat
@pytest.fixture
def mock_message(mock_user, mock_chat):
"""Фикстура с мок-объектом сообщения"""
message = Mock(spec=Message)
message.message_id = 12345
message.text = "/test command"
message.from_user = mock_user
message.chat = mock_chat
message.date = datetime.now()
message.reply_text = AsyncMock()
message.set_reaction = AsyncMock()
return message
@pytest.fixture
def mock_update(mock_message):
"""Фикстура с мок-объектом обновления"""
update = Mock(spec=Update)
update.effective_user = mock_message.from_user
update.effective_chat = mock_message.chat
update.message = mock_message
update.callback_query = None
return update
@pytest.fixture
def mock_context():
"""Фикстура с мок-объектом контекста"""
context = Mock(spec=ContextTypes.DEFAULT_TYPE)
context.args = []
context.user_data = {}
context.chat_data = {}
context.bot = Mock()
context.bot.send_message = AsyncMock()
context.application = Mock()
context.application._date_time = datetime.now()
return context