Some checks reported errors
continuous-integration/drone/push Build encountered an error
118 lines
3.5 KiB
Python
118 lines
3.5 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
Тест для проверки работы бота после исправления ошибки Pydantic
|
||
"""
|
||
|
||
import asyncio
|
||
import sys
|
||
import os
|
||
|
||
# Добавляем путь к проекту
|
||
project_root = os.path.dirname(os.path.abspath(__file__))
|
||
sys.path.insert(0, project_root)
|
||
|
||
from aiogram.types import User, Chat, Message, CallbackQuery, InlineKeyboardMarkup, InlineKeyboardButton
|
||
from src.bot import QuizBot
|
||
from config.config import config
|
||
|
||
|
||
async def create_mock_callback(user_id: int = 12345, data: str = "back_to_menu") -> CallbackQuery:
|
||
"""Создаем мок callback query"""
|
||
user = User(
|
||
id=user_id,
|
||
is_bot=False,
|
||
first_name="Test",
|
||
username="testuser"
|
||
)
|
||
|
||
chat = Chat(id=user_id, type="private")
|
||
|
||
message = Message(
|
||
message_id=1,
|
||
date=1234567890,
|
||
chat=chat,
|
||
from_user=user,
|
||
content_type="text",
|
||
text="Test message"
|
||
)
|
||
|
||
callback = CallbackQuery(
|
||
id="test_callback",
|
||
from_user=user,
|
||
chat_instance="test",
|
||
data=data,
|
||
message=message
|
||
)
|
||
|
||
return callback
|
||
|
||
|
||
async def test_bot_handlers():
|
||
"""Тестируем обработчики бота"""
|
||
print("🧪 Тестирование обработчиков бота...")
|
||
|
||
# Создаем экземпляр бота
|
||
bot = QuizBot()
|
||
await bot.init_db()
|
||
|
||
try:
|
||
# Тестируем stats_callback_handler
|
||
print("📊 Тестируем stats_callback_handler...")
|
||
callback = await create_mock_callback(data="stats")
|
||
|
||
# Этот вызов должен работать без ошибок
|
||
await bot.stats_callback_handler(callback)
|
||
print("✅ stats_callback_handler работает корректно")
|
||
|
||
# Тестируем back_to_menu
|
||
print("🏠 Тестируем back_to_menu...")
|
||
from aiogram.fsm.context import FSMContext
|
||
from aiogram.fsm.storage.memory import MemoryStorage
|
||
|
||
storage = MemoryStorage()
|
||
context = FSMContext(
|
||
storage=storage,
|
||
key={'bot_id': bot.bot.id, 'chat_id': 12345, 'user_id': 12345}
|
||
)
|
||
|
||
callback = await create_mock_callback(data="back_to_menu")
|
||
|
||
# Этот вызов должен работать без ошибок Pydantic
|
||
await bot.back_to_menu(callback, context)
|
||
print("✅ back_to_menu работает корректно")
|
||
|
||
except Exception as e:
|
||
print(f"❌ Ошибка в тестах: {e}")
|
||
return False
|
||
|
||
finally:
|
||
await bot.db.close()
|
||
|
||
print("🎉 Все тесты пройдены успешно!")
|
||
return True
|
||
|
||
|
||
async def main():
|
||
"""Главная функция"""
|
||
print("=" * 50)
|
||
print("🔧 Тест исправления ошибки Pydantic frozen instance")
|
||
print("=" * 50)
|
||
|
||
try:
|
||
success = await test_bot_handlers()
|
||
if success:
|
||
print("\n✅ Исправление успешно! Бот готов к использованию.")
|
||
return 0
|
||
else:
|
||
print("\n❌ Тесты не прошли. Требуется дополнительная отладка.")
|
||
return 1
|
||
|
||
except Exception as e:
|
||
print(f"\n💥 Критическая ошибка: {e}")
|
||
return 1
|
||
|
||
|
||
if __name__ == "__main__":
|
||
exit_code = asyncio.run(main())
|
||
sys.exit(exit_code)
|