Files
new_lottery_bot/tests/test_clean_features.py
2025-11-16 12:36:02 +09:00

94 lines
4.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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())