Introduce a new pytest fixture for creating EventTheme instances and add comprehensive unit tests covering its properties, relationships, and behaviors. These changes improve test coverage and ensure the EventTheme model functions as expected.
141 lines
3.7 KiB
Python
141 lines
3.7 KiB
Python
# tests/conftest.py
|
|
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, \
|
|
EventTheme
|
|
|
|
|
|
@pytest.fixture(scope="function")
|
|
def db_session():
|
|
"""
|
|
Creates a fresh SQLite in-memory database for each test function.
|
|
|
|
Yields a SQLAlchemy session that can be used for testing.
|
|
"""
|
|
# Set up the database
|
|
test_engine, TestingSessionLocal = setup_test_db()
|
|
|
|
# Create a session
|
|
with TestingSessionLocal() as session:
|
|
yield session
|
|
|
|
# Clean up
|
|
teardown_test_db(test_engine)
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_user(db_session):
|
|
"""Fixture to create and return a mock User instance."""
|
|
mock_user = User(
|
|
id=uuid.uuid4(),
|
|
email="mockuser@example.com",
|
|
password_hash="mockhashedpassword",
|
|
first_name="Mock",
|
|
last_name="User",
|
|
phone_number="1234567890",
|
|
is_active=True,
|
|
is_superuser=False
|
|
)
|
|
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
|
|
|
|
|
|
@pytest.fixture
|
|
def event_theme_fixture(db_session):
|
|
"""
|
|
Fixture to create and return a default EventTheme instance.
|
|
"""
|
|
event_theme = EventTheme(
|
|
id=uuid.uuid4(),
|
|
name="Animal Theme",
|
|
description="An animal-themed design for events.",
|
|
preview_image_url="https://example.com/preview/animal_theme.jpg",
|
|
color_palette={
|
|
"primary": "#ff5722",
|
|
"secondary": "#4caf50",
|
|
"background": "#ffffff",
|
|
"text": "#000000"
|
|
},
|
|
fonts={
|
|
"header": "Roboto",
|
|
"body": "Open Sans"
|
|
}
|
|
)
|
|
db_session.add(event_theme)
|
|
db_session.commit()
|
|
return event_theme
|