This commit is contained in:
2025-11-16 12:36:02 +09:00
parent 3a25e6a4cb
commit eb3f3807fd
61 changed files with 1438 additions and 1139 deletions

View File

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