Files
eventspace/backend/tests/models/test_guest.py
Felipe Cardoso d442182ed0 Add tests for Guest model and corresponding fixtures
Introduce unit tests for the Guest model covering properties, methods, and behaviors such as creation, status updates, and permissions. Add `guest_fixture` in `conftest.py` to streamline reusable test setup for Guest instances.
2025-02-28 15:01:13 +01:00

102 lines
3.1 KiB
Python

# tests/models/test_guest.py
import uuid
from datetime import datetime, timezone
from app.models.guest import Guest, GuestStatus
def test_create_guest(db_session, mock_user):
# Arrange
guest = Guest(
id=uuid.uuid4(),
event_id=uuid.uuid4(),
invited_by=mock_user.id,
full_name="Jane Smith",
email="janesmith@example.com",
phone="9876543210",
invitation_code="INV654321",
status=GuestStatus.PENDING,
max_additional_guests=3,
dietary_restrictions="Vegetarian",
notes="VIP Guest",
custom_fields={"special_request": "Near the buffet"},
)
db_session.add(guest)
# Act
db_session.commit()
created_guest = db_session.query(Guest).filter_by(id=guest.id).first()
# Assert
assert created_guest is not None
assert created_guest.full_name == "Jane Smith"
assert created_guest.email == "janesmith@example.com"
assert created_guest.phone == "9876543210"
assert created_guest.invitation_code == "INV654321"
assert created_guest.status == GuestStatus.PENDING
assert created_guest.max_additional_guests == 3
assert created_guest.dietary_restrictions == "Vegetarian"
assert created_guest.notes == "VIP Guest"
assert created_guest.custom_fields == {"special_request": "Near the buffet"}
def test_total_guests_property(guest_fixture):
# Act
total_guests = guest_fixture.total_guests
# Assert
assert total_guests == 2 # 1 guest + 1 additional guest
def test_has_responded_property(guest_fixture):
# Act
responded = guest_fixture.has_responded
# Assert
assert responded is False # Default status is INVITED
# Update status to CONFIRMED
guest_fixture.status = GuestStatus.CONFIRMED
assert guest_fixture.has_responded is True
def test_update_status_method(guest_fixture):
# Act: Update status to CONFIRMED
guest_fixture.update_status(GuestStatus.CONFIRMED)
# Assert: Status is updated and response date is set
assert guest_fixture.status == GuestStatus.CONFIRMED
assert guest_fixture.response_date is not None
assert abs(
(guest_fixture.response_date - datetime.now(timezone.utc)).total_seconds()) < 10 # Response date is recent
def test_repr_method(guest_fixture):
# Act
repr_output = repr(guest_fixture)
# Assert
assert repr_output == f"<Guest {guest_fixture.full_name} ({guest_fixture.status.value})>"
def test_invitation_sent_at(guest_fixture):
# Assert
assert guest_fixture.invitation_sent_at is not None
assert abs((guest_fixture.invitation_sent_at - datetime.now(timezone.utc)).total_seconds()) < 10
def test_guest_is_blocked(guest_fixture):
# Act & Assert
assert guest_fixture.is_blocked is False
# Set guest to blocked
guest_fixture.is_blocked = True
assert guest_fixture.is_blocked is True
def test_can_bring_guests(guest_fixture):
# Act & Assert
assert guest_fixture.can_bring_guests is True
# Remove guest's "bring guests" permission
guest_fixture.can_bring_guests = False
assert guest_fixture.can_bring_guests is False