93 lines
4.3 KiB
Python
93 lines
4.3 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
Тест функциональности с чистыми данными
|
||
"""
|
||
import asyncio
|
||
import sys
|
||
import os
|
||
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
||
|
||
from database import async_session_maker, engine
|
||
from services import UserService, LotteryService
|
||
from account_utils import validate_account_number, format_account_number, mask_account_number
|
||
from 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()) |