Add validation for display_order and EventMedia tests

Introduce a `validate_display_order` method to ensure a default value of 0 for `display_order`. Extend testing infrastructure with fixtures and unit tests for `EventMedia` to validate properties, metadata, and default behaviors.
This commit is contained in:
2025-02-28 14:55:59 +01:00
parent 841bb7f56d
commit 97155f4b6b
3 changed files with 182 additions and 1 deletions

View File

@@ -3,6 +3,7 @@ import pytest
import uuid
from app.models.user import User
from app.utils.test_utils import setup_test_db, teardown_test_db
from app.models import GiftItem, GiftStatus, GiftPriority, RSVP, RSVPStatus, EventMedia, MediaType, MediaPurpose
@pytest.fixture(scope="function")
@@ -39,3 +40,74 @@ def mock_user(db_session):
db_session.add(mock_user)
db_session.commit()
return mock_user
@pytest.fixture
def gift_item_fixture(db_session, mock_user):
"""
Fixture to create and return a default GiftItem instance.
The event_id, added_by, and other necessary attributes are predefined.
"""
gift_item = GiftItem(
id=uuid.uuid4(),
event_id=uuid.uuid4(),
added_by=mock_user.id,
name="Default Gift",
description="Default gift description.",
price=100.00,
currency="USD",
quantity_requested=5,
quantity_received=0,
status=GiftStatus.AVAILABLE,
priority=GiftPriority.MEDIUM,
is_visible=True
)
db_session.add(gift_item)
db_session.commit()
return gift_item
@pytest.fixture
def rsvp_fixture(db_session, mock_user):
"""
Fixture to create and return a default RSVP instance.
The event_id and guest_id fields are predefined for testing.
"""
rsvp = RSVP(
id=uuid.uuid4(),
event_id=uuid.uuid4(),
guest_id=uuid.uuid4(),
status=RSVPStatus.ATTENDING,
number_of_guests=2,
response_message="Looking forward to the event!",
dietary_requirements="Vegetarian",
)
db_session.add(rsvp)
db_session.commit()
return rsvp
@pytest.fixture
def event_media_fixture(db_session, mock_user):
"""
Fixture to create and return a default EventMedia instance.
"""
event_media = EventMedia(
id=uuid.uuid4(),
event_id=uuid.uuid4(),
uploaded_by=mock_user.id,
file_path="uploads/sample.jpg",
original_filename="sample.jpg",
media_type=MediaType.IMAGE,
content_type="image/jpeg",
file_size=2048,
purpose=MediaPurpose.GALLERY,
is_public=True,
display_order=1,
title="Sample Image",
description="A sample image for testing.",
media_metadata={"resolution": "1920x1080"},
)
db_session.add(event_media)
db_session.commit()
return event_media

View File

@@ -0,0 +1,104 @@
# tests/models/test_event_media.py
import uuid
from app.models.event_media import EventMedia, MediaType, MediaPurpose
def test_create_event_media(db_session, mock_user):
# Arrange
event_media = EventMedia(
id=uuid.uuid4(),
event_id=uuid.uuid4(),
uploaded_by=mock_user.id,
file_path="uploads/test_image.jpg",
original_filename="test_image.jpg",
media_type=MediaType.IMAGE,
content_type="image/jpeg",
file_size=1024,
purpose=MediaPurpose.BANNER,
is_public=False,
display_order=0,
title="Test Image",
description="This is a test image.",
media_metadata={"resolution": "1024x768"},
)
db_session.add(event_media)
# Act
db_session.commit()
created_media = db_session.query(EventMedia).filter_by(id=event_media.id).first()
# Assert
assert created_media is not None
assert created_media.file_path == "uploads/test_image.jpg"
assert created_media.original_filename == "test_image.jpg"
assert created_media.media_type == MediaType.IMAGE
assert created_media.file_size == 1024
assert created_media.purpose == MediaPurpose.BANNER
assert created_media.is_public is False
assert created_media.media_metadata == {"resolution": "1024x768"}
def test_is_image_property(event_media_fixture):
# Act
is_image = event_media_fixture.is_image
# Assert
assert is_image is True # Fixture sets media_type to MediaType.IMAGE
# Update media type to VIDEO and re-check
event_media_fixture.media_type = MediaType.VIDEO
assert event_media_fixture.is_image is False
def test_is_video_property(event_media_fixture):
# Act
is_video = event_media_fixture.is_video
# Assert
assert is_video is False # Fixture sets media_type to MediaType.IMAGE
# Update media type to VIDEO and re-check
event_media_fixture.media_type = MediaType.VIDEO
assert event_media_fixture.is_video is True
def test_is_document_property(event_media_fixture):
# Act
is_document = event_media_fixture.is_document
# Assert
assert is_document is False # Fixture sets media_type to MediaType.IMAGE
# Update media type to DOCUMENT and re-check
event_media_fixture.media_type = MediaType.DOCUMENT
assert event_media_fixture.is_document is True
def test_url_property(event_media_fixture):
# Act
url = event_media_fixture.url
# Assert
# Since the `url` method is not implemented, it should currently return None
assert url is None # Implement this logic if further changes are made
def test_default_display_order(event_media_fixture):
# Arrange
event_media_fixture.display_order = None
# Assert default value
# Ensure display_order defaults to 0
assert event_media_fixture.display_order == 0
def test_media_metadata(event_media_fixture):
# Act
metadata = event_media_fixture.media_metadata
# Assert
assert metadata == {"resolution": "1920x1080"}
# Update and check
event_media_fixture.media_metadata = {"resolution": "1280x720"}
assert event_media_fixture.media_metadata == {"resolution": "1280x720"}