""" Простой тест основной функциональности без многопоточности """ import asyncio import sys import os # Добавляем путь к проекту sys.path.append(os.path.dirname(os.path.abspath(__file__))) from database import init_db, async_session_maker from services import UserService, LotteryService from account_utils import generate_account_number, validate_account_number, mask_account_number from winner_display import format_winner_display, validate_display_type async def test_basic_functionality(): """Простой тест основной функциональности""" print("🧪 Тестирование основной функциональности") print("=" * 50) # Инициализируем базу данных await init_db() async with async_session_maker() as session: # 1. Тест создания пользователя с номером счёта print("\n1. 👤 Создание пользователя с номером счёта:") test_account = "12-34-56-78-90-12-34-56" user = await UserService.get_or_create_user( session, telegram_id=999999999, username='test_client', first_name='Тестовый', last_name='Клиент' ) success = await UserService.set_account_number( session, user.telegram_id, test_account ) if success: print(f"✅ Пользователь создан и счёт {test_account} установлен") else: print(f"❌ Ошибка установки номера счёта") # 2. Тест валидации номеров print("\n2. 📋 Тестирование валидации номеров:") test_cases = [ ("12-34-56-78-90-12-34-56", True), ("invalid-number", False), ("12345678901234567890", False) ] for number, expected in test_cases: result = validate_account_number(number) status = "✅" if result == expected else "❌" print(f"{status} '{number}' -> {result}") # 3. Тест маскирования print("\n3. 🎭 Тестирование маскирования:") masked = mask_account_number(test_account, show_last_digits=4) print(f"Полный номер: {test_account}") print(f"Маскированный: {masked}") # 4. Тест поиска по счёту print("\n4. 🔍 Тестирование поиска по номеру счёта:") found_user = await UserService.get_user_by_account(session, test_account) if found_user: print(f"✅ Пользователь найден по номеру счёта: {found_user.first_name}") else: print(f"❌ Пользователь не найден") # 5. Тест отображения победителей print("\n5. 🎨 Тестирование отображения победителей:") # Создаём тестовый розыгрыш lottery = await LotteryService.create_lottery( session, title="Тест отображения", description="Тестовый розыгрыш", prizes=["Приз 1"], creator_id=1 ) display_types = ['username', 'chat_id', 'account_number'] for display_type in display_types: await LotteryService.set_winner_display_type( session, lottery.id, display_type ) updated_lottery = await LotteryService.get_lottery(session, lottery.id) if updated_lottery: public = format_winner_display(user, updated_lottery, show_sensitive_data=False) admin = format_winner_display(user, updated_lottery, show_sensitive_data=True) print(f"\n📺 Тип: {display_type}") print(f" 👥 Публично: {public}") print(f" 🔧 Админ: {admin}") print("\n🎉 Основные тесты завершены успешно!") if __name__ == "__main__": asyncio.run(test_basic_functionality())