#!/usr/bin/env python3 """ Тест функциональности с чистыми данными """ import asyncio import sys import os sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from src.core.database import async_session_maker, engine from src.core.services import UserService, LotteryService from src.utils.account_utils import validate_account_number, format_account_number, mask_account_number from src.display.winner_display import format_winner_display import random async def test_features(): print("🧪 Тестирование с чистыми данными") print("="*50) async with async_session_maker() as session: # Генерируем уникальные тестовые данные unique_id = random.randint(1000000, 9999999) test_account = f"{random.randint(10, 99)}-{random.randint(10, 99)}-{random.randint(10, 99)}-{random.randint(10, 99)}-{random.randint(10, 99)}-{random.randint(10, 99)}-{random.randint(10, 99)}-{random.randint(10, 99)}" print(f"🆔 Используем уникальный ID: {unique_id}") print(f"🔢 Используем номер счёта: {test_account}") # 1. Создание пользователя print(f"\n1. 👤 Создание пользователя:") user = await UserService.get_or_create_user( session, telegram_id=unique_id, username=f'test_user_{unique_id}', first_name='Тестовый', last_name='Пользователь' ) print(f"✅ Пользователь создан: {user.first_name} {user.last_name}") # 2. Установка номера счёта print(f"\n2. 🔢 Установка номера счёта:") success = await UserService.set_account_number( session, user.telegram_id, test_account ) if success: print(f"✅ Номер счёта {test_account} установлен") # Обновляем данные пользователя await session.refresh(user) print(f"✅ Подтверждено: {user.account_number}") else: print(f"❌ Не удалось установить номер счёта") return # 3. Поиск пользователя по номеру print(f"\n3. 🔍 Поиск по номеру счёта:") found_user = await UserService.get_user_by_account(session, test_account) if found_user: print(f"✅ Пользователь найден: {found_user.first_name} {found_user.last_name}") else: print("❌ Пользователь не найден") # 4. Тестирование маскирования print(f"\n4. 🎭 Тестирование маскирования:") masked = mask_account_number(test_account) print(f"Полный номер: {test_account}") print(f"Маскированный: {masked}") # 5. Создание розыгрыша с типами отображения print(f"\n5. 🎨 Тестирование отображения победителей:") lottery = await LotteryService.create_lottery( session, title="Тест отображения", description="Тестовый розыгрыш", prizes=["Приз 1"], creator_id=1 ) # Тестируем все типы отображения for display_type in ["username", "chat_id", "account_number"]: await LotteryService.set_winner_display_type(session, lottery.id, display_type) lottery.winner_display_type = display_type # Обновляем локально public_display = format_winner_display(user, lottery, show_sensitive_data=False) admin_display = format_winner_display(user, lottery, show_sensitive_data=True) print(f"\n📺 Тип: {display_type}") print(f" 👥 Публично: {public_display}") print(f" 🔧 Админ: {admin_display}") print(f"\n🎉 Все тесты завершены успешно!") if __name__ == "__main__": asyncio.run(test_features())