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.
This commit is contained in:
@@ -4,7 +4,7 @@ import uuid
|
|||||||
from app.models.user import User
|
from app.models.user import User
|
||||||
from app.utils.test_utils import setup_test_db, teardown_test_db
|
from app.utils.test_utils import setup_test_db, teardown_test_db
|
||||||
from app.models import GiftItem, GiftStatus, GiftPriority, RSVP, RSVPStatus, EventMedia, MediaType, MediaPurpose, \
|
from app.models import GiftItem, GiftStatus, GiftPriority, RSVP, RSVPStatus, EventMedia, MediaType, MediaPurpose, \
|
||||||
EventTheme
|
EventTheme, Guest, GuestStatus
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="function")
|
@pytest.fixture(scope="function")
|
||||||
@@ -138,3 +138,35 @@ def event_theme_fixture(db_session):
|
|||||||
db_session.add(event_theme)
|
db_session.add(event_theme)
|
||||||
db_session.commit()
|
db_session.commit()
|
||||||
return event_theme
|
return event_theme
|
||||||
|
|
||||||
|
import uuid
|
||||||
|
from datetime import datetime, timezone
|
||||||
|
from app.models.guest import Guest, GuestStatus
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def guest_fixture(db_session, mock_user):
|
||||||
|
"""
|
||||||
|
Fixture to create and return a default Guest instance.
|
||||||
|
"""
|
||||||
|
guest = Guest(
|
||||||
|
id=uuid.uuid4(),
|
||||||
|
event_id=uuid.uuid4(),
|
||||||
|
invited_by=mock_user.id,
|
||||||
|
full_name="John Doe",
|
||||||
|
email="johndoe@example.com",
|
||||||
|
phone="1234567890",
|
||||||
|
invitation_code="INV123456",
|
||||||
|
status=GuestStatus.INVITED,
|
||||||
|
max_additional_guests=2,
|
||||||
|
actual_additional_guests=1,
|
||||||
|
invitation_sent_at=datetime.now(timezone.utc),
|
||||||
|
dietary_restrictions="None",
|
||||||
|
notes="VIP Guest",
|
||||||
|
custom_fields={"allergies": "None", "special_request": "Near the stage"},
|
||||||
|
is_blocked=False,
|
||||||
|
can_bring_guests=True,
|
||||||
|
)
|
||||||
|
db_session.add(guest)
|
||||||
|
db_session.commit()
|
||||||
|
return guest
|
||||||
102
backend/tests/models/test_guest.py
Normal file
102
backend/tests/models/test_guest.py
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
# 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
|
||||||
Reference in New Issue
Block a user