Files
eventspace/backend/tests/crud/test_event_theme.py
Felipe Cardoso cbcd04d8e1 Rename schema and test files for consistency
Renamed `event_theme` and `test_user_schema` file paths and imports to follow consistent plural naming conventions. This improves code clarity and aligns file and import naming across the project.
2025-03-05 12:48:18 +01:00

124 lines
4.2 KiB
Python

from uuid import UUID
import pytest
from sqlalchemy.orm import Session
from app.crud.event_theme import event_theme
from app.schemas.event_themes import EventThemeCreate, EventThemeUpdate
def test_create_event_theme(db_session: Session) -> None:
theme_in = EventThemeCreate(
name="Animal Theme",
description="A cute animal-themed celebration",
preview_image_url="https://example.com/preview/animal_theme.jpg",
color_palette={
"primary": "#4CAF50",
"secondary": "#FFC107",
"background": "#FFFFFF",
"text": "#333333"
},
fonts={
"header": "Roboto",
"body": "Open Sans"
}
)
theme = event_theme.create(db=db_session, obj_in=theme_in)
assert theme.name == theme_in.name
assert theme.color_palette == theme_in.color_palette
assert theme.fonts == theme_in.fonts
def test_get_event_theme(db_session: Session, event_theme_fixture) -> None:
stored_theme = event_theme.get(db=db_session, id=event_theme_fixture.id)
assert stored_theme
assert stored_theme.id == event_theme_fixture.id
assert stored_theme.name == event_theme_fixture.name
assert stored_theme.color_palette == event_theme_fixture.color_palette
assert stored_theme.fonts == event_theme_fixture.fonts
def test_get_event_theme_by_name(db_session: Session, event_theme_fixture) -> None:
stored_theme = event_theme.get_by_name(db=db_session, name=event_theme_fixture.name)
assert stored_theme
assert stored_theme.id == event_theme_fixture.id
assert stored_theme.name == event_theme_fixture.name
def test_update_event_theme(db_session: Session, event_theme_fixture) -> None:
theme_update = EventThemeUpdate(
name="Updated Animal Theme",
color_palette={
"primary": "#FF5722",
"secondary": "#FFC107",
"background": "#FAFAFA",
"text": "#212121"
}
)
updated_theme = event_theme.update(
db=db_session,
db_obj=event_theme_fixture,
obj_in=theme_update
)
assert updated_theme.id == event_theme_fixture.id
assert updated_theme.name == "Updated Animal Theme"
assert updated_theme.color_palette == theme_update.color_palette
# Original fonts should remain unchanged as they weren't included in the update
assert updated_theme.fonts == event_theme_fixture.fonts
def test_delete_event_theme(db_session: Session, event_theme_fixture) -> None:
theme_id = event_theme_fixture.id
deleted_theme = event_theme.remove(db=db_session, id=theme_id)
assert deleted_theme.id == theme_id
# Verify theme no longer exists
theme = event_theme.get(db=db_session, id=theme_id)
assert theme is None
def test_get_active_themes(db_session: Session, event_theme_fixture, event_fixture) -> None:
# First, ensure the theme is associated with an event
event_fixture.theme_id = event_theme_fixture.id
db_session.commit()
# Get active themes
active_themes = event_theme.get_active_themes(db=db_session)
assert len(active_themes) > 0
assert any(theme.id == event_theme_fixture.id for theme in active_themes)
def test_get_multi_themes(db_session: Session, event_theme_fixture) -> None:
# Create another theme to test pagination
another_theme = EventThemeCreate(
name="Birthday Theme",
color_palette={
"primary": "#2196F3",
"secondary": "#FF4081",
"background": "#FFFFFF",
"text": "#000000"
},
fonts={
"header": "Montserrat",
"body": "Lato"
}
)
event_theme.create(db=db_session, obj_in=another_theme)
# Test pagination
themes = event_theme.get_multi(db=db_session, skip=0, limit=10)
assert len(themes) >= 2 # Should have at least the fixture and the new theme
def test_get_non_existent_theme(db_session: Session) -> None:
non_existent_id = UUID('00000000-0000-0000-0000-000000000000')
theme = event_theme.get(db=db_session, id=non_existent_id)
assert theme is None
def test_get_non_existent_theme_by_name(db_session: Session) -> None:
non_existent_name = "Non-existent Theme"
theme = event_theme.get_by_name(db=db_session, name=non_existent_name)
assert theme is None