# 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"" 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