Files
dibbler/tests/test_user.py
2025-06-02 21:26:08 +02:00

88 lines
2.3 KiB
Python

from datetime import datetime
import pytest
from sqlalchemy import select
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import Session
from dibbler.models import Product, Transaction, TransactionType, User
def insert_test_data(session: Session) -> None:
# Add users
user1 = User("Test User 1")
user2 = User("Test User 2")
session.add(user1)
session.add(user2)
session.commit()
# Add products
product1 = Product("1234567890123", "Test Product 1")
product2 = Product("9876543210987", "Test Product 2")
session.add(product1)
session.add(product2)
session.commit()
# Add transactions
transactions = [
Transaction(
time=datetime(2023, 10, 1, 10, 0, 0),
type=TransactionType.ADJUST_BALANCE,
amount=100,
user_id=user1.id,
),
Transaction(
time=datetime(2023, 10, 1, 10, 0, 0),
type=TransactionType.ADJUST_BALANCE,
amount=50,
user_id=user2.id,
),
Transaction(
time=datetime(2023, 10, 1, 10, 0, 1),
type=TransactionType.ADJUST_BALANCE,
amount=-50,
user_id=user1.id,
),
Transaction(
time=datetime(2023, 10, 1, 12, 0, 0),
type=TransactionType.ADD_PRODUCT,
amount=27 * 2,
per_product=27,
product_count=2,
user_id=user1.id,
product_id=product1.id,
),
Transaction(
time=datetime(2023, 10, 1, 12, 0, 1),
type=TransactionType.BUY_PRODUCT,
amount=27,
product_count=1,
user_id=user2.id,
product_id=product1.id,
),
]
session.add_all(transactions)
session.commit()
def test_ensure_no_duplicate_users(session: Session):
insert_test_data(session)
user1 = User("Test User 1")
session.add(user1)
with pytest.raises(IntegrityError):
session.commit()
def test_user_credit(session: Session):
insert_test_data(session)
user1 = session.scalars(select(User).where(User.name == "Test User 1")).one()
user2 = session.scalars(select(User).where(User.name == "Test User 2")).one()
assert user1.credit(session) == 100 - 50 + 27 * 2
assert user2.credit(session) == 50 - 27