34 lines
1.5 KiB
Python
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))
|