#!/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)