Introduced comprehensive test coverage for GiftItem, GiftCategory, and GiftPurchase models to validate core functionality such as creation, updates, deletions, and derived properties. Also updated the `total_gifts` method in `GiftCategory` to calculate the total requested quantity rather than the count of gifts.
198 lines
5.3 KiB
Python
198 lines
5.3 KiB
Python
# tests/models/test_gift.py
|
|
import uuid
|
|
from app.models.gift import GiftItem, GiftStatus, GiftPriority, GiftCategory, GiftPurchase
|
|
|
|
|
|
# ================================
|
|
# GiftItem Test Cases
|
|
# ================================
|
|
|
|
def test_create_gift_item(db_session, mock_user):
|
|
# Arrange
|
|
gift = GiftItem(
|
|
id=uuid.uuid4(),
|
|
event_id=uuid.uuid4(),
|
|
added_by=mock_user.id,
|
|
name="Baby Stroller",
|
|
description="High-quality baby stroller.",
|
|
price=150.00,
|
|
currency="USD",
|
|
quantity_requested=2,
|
|
quantity_received=0,
|
|
status=GiftStatus.AVAILABLE,
|
|
priority=GiftPriority.MUST_HAVE,
|
|
is_visible=True,
|
|
)
|
|
db_session.add(gift)
|
|
|
|
# Act
|
|
db_session.commit()
|
|
created_gift = db_session.query(GiftItem).filter_by(name="Baby Stroller").first()
|
|
|
|
# Assert
|
|
assert created_gift is not None
|
|
assert created_gift.name == "Baby Stroller"
|
|
assert created_gift.status == GiftStatus.AVAILABLE
|
|
assert created_gift.priority == GiftPriority.MUST_HAVE
|
|
assert created_gift.price == 150.00
|
|
assert created_gift.currency == "USD"
|
|
|
|
|
|
def test_update_gift_item(gift_item_fixture, db_session):
|
|
# Act
|
|
gift_item_fixture.quantity_requested = 3
|
|
gift_item_fixture.status = GiftStatus.RESERVED
|
|
gift_item_fixture.description = "Updated description for the gift."
|
|
db_session.commit()
|
|
|
|
# Assert
|
|
assert gift_item_fixture.quantity_requested == 3
|
|
assert gift_item_fixture.status == GiftStatus.RESERVED
|
|
assert gift_item_fixture.description == "Updated description for the gift."
|
|
|
|
|
|
def test_delete_gift_item(gift_item_fixture, db_session):
|
|
# Act
|
|
db_session.delete(gift_item_fixture)
|
|
db_session.commit()
|
|
|
|
# Assert
|
|
deleted_gift = db_session.query(GiftItem).filter_by(id=gift_item_fixture.id).first()
|
|
assert deleted_gift is None
|
|
|
|
|
|
def test_gift_item_remaining_quantity(gift_item_fixture):
|
|
# Arrange
|
|
gift_item_fixture.quantity_requested = 5
|
|
gift_item_fixture.quantity_received = 2
|
|
|
|
# Act
|
|
remaining_quantity = gift_item_fixture.remaining_quantity
|
|
|
|
# Assert
|
|
assert remaining_quantity == 3 # 5 requested - 2 received
|
|
|
|
|
|
def test_gift_item_is_fully_received(gift_item_fixture):
|
|
# Arrange
|
|
gift_item_fixture.quantity_requested = 4
|
|
gift_item_fixture.quantity_received = 4
|
|
|
|
# Act
|
|
is_fully_received = gift_item_fixture.is_fully_received
|
|
|
|
# Assert
|
|
assert is_fully_received is True
|
|
|
|
|
|
# ================================
|
|
# GiftCategory Test Cases
|
|
# ================================
|
|
|
|
def test_create_gift_category(db_session, mock_user):
|
|
# Arrange
|
|
category = GiftCategory(
|
|
id=uuid.uuid4(),
|
|
event_id=uuid.uuid4(),
|
|
created_by=mock_user.id,
|
|
name="Toys",
|
|
description="All kinds of educational toys."
|
|
)
|
|
db_session.add(category)
|
|
|
|
# Act
|
|
db_session.commit()
|
|
created_category = db_session.query(GiftCategory).filter_by(name="Toys").first()
|
|
|
|
# Assert
|
|
assert created_category is not None
|
|
assert created_category.description == "All kinds of educational toys."
|
|
|
|
|
|
def test_gift_category_total_gifts(db_session, mock_user):
|
|
# Arrange
|
|
category = GiftCategory(
|
|
id=uuid.uuid4(),
|
|
event_id=uuid.uuid4(),
|
|
created_by=mock_user.id,
|
|
name="Baby Essentials",
|
|
)
|
|
db_session.add(category)
|
|
db_session.commit()
|
|
|
|
gift1 = GiftItem(
|
|
id=uuid.uuid4(),
|
|
event_id=category.event_id,
|
|
category_id=category.id,
|
|
name="Bottle Set",
|
|
quantity_requested=2,
|
|
added_by=mock_user.id,
|
|
status=GiftStatus.AVAILABLE,
|
|
)
|
|
gift2 = GiftItem(
|
|
id=uuid.uuid4(),
|
|
event_id=category.event_id,
|
|
category_id=category.id,
|
|
name="Diaper Bag",
|
|
quantity_requested=1,
|
|
added_by=mock_user.id,
|
|
status=GiftStatus.AVAILABLE,
|
|
)
|
|
db_session.add_all([gift1, gift2])
|
|
db_session.commit()
|
|
|
|
# Act
|
|
total_gifts = category.total_gifts
|
|
|
|
# Assert
|
|
assert total_gifts == 3 # 2 from gift1 + 1 from gift2
|
|
|
|
|
|
# ================================
|
|
# GiftPurchase Test Cases
|
|
# ================================
|
|
|
|
def test_create_gift_purchase(db_session, mock_user, gift_item_fixture):
|
|
# Arrange
|
|
purchase = GiftPurchase(
|
|
id=uuid.uuid4(),
|
|
gift_id=gift_item_fixture.id,
|
|
guest_id=mock_user.id,
|
|
quantity=2,
|
|
purchase_price=50.00,
|
|
purchase_currency="USD",
|
|
notes="Gift purchased for the event."
|
|
)
|
|
db_session.add(purchase)
|
|
|
|
# Act
|
|
db_session.commit()
|
|
created_purchase = db_session.query(GiftPurchase).filter_by(gift_id=gift_item_fixture.id).first()
|
|
|
|
# Assert
|
|
assert created_purchase is not None
|
|
assert created_purchase.quantity == 2
|
|
assert created_purchase.purchase_currency == "USD"
|
|
assert created_purchase.notes == "Gift purchased for the event."
|
|
|
|
|
|
def test_link_purchase_to_gift(db_session, gift_item_fixture):
|
|
# Arrange
|
|
purchase = GiftPurchase(
|
|
id=uuid.uuid4(),
|
|
gift_id=gift_item_fixture.id,
|
|
guest_id=uuid.uuid4(),
|
|
quantity=1,
|
|
purchase_price=25.00,
|
|
purchase_currency="USD"
|
|
)
|
|
db_session.add(purchase)
|
|
db_session.commit()
|
|
|
|
# Act
|
|
gift_purchases = gift_item_fixture.purchase_history
|
|
|
|
# Assert
|
|
assert len(gift_purchases) == 1
|
|
assert gift_purchases[0].quantity == 1
|
|
assert gift_purchases[0].purchase_price == 25.00 |