Files
new_lottery_bot/tests/test_imports_exports.py
Trevor1985 cb35bb12e3
Some checks failed
continuous-integration/drone/push Build is failing
Stabilize staff concurrency and premium emoji; enable verified Drone deployment
2026-09-13 19:48:41 +09:00

34 lines
1.5 KiB
Python

from io import BytesIO
from openpyxl import load_workbook
from sqlalchemy import select
from src.core.database import async_session_maker
from src.core.models import User
from src.core.import_services import import_users
from src.core.services import UserService
from src.utils.spreadsheets import export_users, read_users_xlsx
async def test_excel_formulas_remain_literal_text():
async with async_session_maker() as session:
user = await UserService.get_or_create_user(session, 501, first_name='=HYPERLINK("https://invalid.example")')
data = export_users([user])
workbook = load_workbook(BytesIO(data), data_only=False)
assert workbook.active.cell(2, 3).data_type == "s"
assert read_users_xlsx(data)[0]["first_name"] == user.first_name
workbook.close()
async def test_import_duplicate_card_does_not_break_following_rows_or_elevate_roles():
added, updated, errors = await import_users([
dict(telegram_id=502, club_card_number="5678", is_registered=True, is_admin=True, is_cashier=True),
dict(telegram_id=503, club_card_number="5678"),
dict(telegram_id=504, club_card_number="6789"),
])
assert (added, updated, errors) == (2, 0, 1)
async with async_session_maker() as session:
user = await session.scalar(select(User).where(User.telegram_id == 502))
assert not user.is_admin and not user.is_cashier and user.verification_code
assert await session.scalar(select(User.id).where(User.telegram_id == 504))