mirror of
https://github.com/FerraSoft/bottohelp.git
synced 2026-08-06 21:55:03 +00:00
Подготовка к релизу
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user