init commit

This commit is contained in:
2025-09-11 07:34:50 +09:00
commit 5ddc540f9e
36 changed files with 5103 additions and 0 deletions

117
test_bot_fix.py Normal file
View File

@@ -0,0 +1,117 @@
#!/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)