Refactor event API and extend authentication utilities
All checks were successful
Build and Push Docker Images / changes (push) Successful in 6s
Build and Push Docker Images / build-backend (push) Successful in 55s
Build and Push Docker Images / build-frontend (push) Has been skipped

Refactored the event API routes to improve error handling, add logging, and provide enhanced response structures with pagination. Updated tests to use new fixtures and include additional authentication utilities to facilitate testing with FastAPI's dependency injection. Also resolved issues with timezone awareness in event schemas.
This commit is contained in:
2025-03-09 16:04:51 +01:00
parent fe2bcbd6e7
commit c2cdc3c110
7 changed files with 466 additions and 96 deletions

View File

@@ -1,10 +1,17 @@
# tests/conftest.py
import uuid
from datetime import datetime, timezone, timedelta
from typing import Dict
from typing import Optional
import pytest
from fastapi import FastAPI
from fastapi.routing import APIRouter
from fastapi.security import OAuth2PasswordBearer
from fastapi.testclient import TestClient
from sqlalchemy.orm import Session
from app.api.dependencies.auth import get_current_user
from app.core.database import get_db
from app.models import Event, GiftItem, GiftStatus, GiftPriority, GiftCategory, GiftPurchase, RSVP, RSVPStatus, \
EventMedia, MediaType, MediaPurpose, \
EventTheme, Guest, GuestStatus, ActivityType, ActivityLog, EmailTemplate, TemplateType, NotificationLog, \
@@ -39,6 +46,7 @@ async def async_test_db():
yield test_engine, AsyncTestingSessionLocal
await teardown_async_test_db(test_engine)
@pytest.fixture
def user_create_data():
return {
@@ -72,7 +80,7 @@ def mock_user(db_session):
@pytest.fixture
def event_fixture(db_session, mock_user):
def mock_event(db_session, mock_user):
"""Create a test event fixture."""
event_data = {
"title": "Birthday Party",
@@ -91,7 +99,6 @@ def event_fixture(db_session, mock_user):
return event
@pytest.fixture
def gift_item_fixture(db_session, mock_user):
"""
@@ -308,7 +315,7 @@ def gift_purchase_fixture(db_session, gift_item_fixture, guest_fixture):
@pytest.fixture
def gift_category_fixture(db_session, mock_user, event_fixture):
def gift_category_fixture(db_session, mock_user, mock_event):
"""
Fixture to create and return a GiftCategory instance.
"""
@@ -316,7 +323,7 @@ def gift_category_fixture(db_session, mock_user, event_fixture):
id=uuid.uuid4(),
name="Electronics",
description="Category for electronic gifts",
event_id=event_fixture.id,
event_id=mock_event.id,
created_by=mock_user.id,
display_order=0,
is_visible=True
@@ -344,3 +351,32 @@ def theme_data() -> Dict:
}
}
@pytest.fixture
def oauth2_scheme():
"""Return the OAuth2PasswordBearer instance used by the app."""
return OAuth2PasswordBearer(tokenUrl="/api/v1/auth/login")
@pytest.fixture
def create_test_client():
def _create_test_client(router: APIRouter, prefix: str, db_session, user):
from fastapi import FastAPI
app = FastAPI()
# Mimic your dependency overrides here
def get_db_override():
yield db_session
def get_current_user_override():
return user
# Include your router
app.include_router(router, prefix=prefix)
# Override dependencies
app.dependency_overrides[get_db] = get_db_override
app.dependency_overrides[get_current_user] = get_current_user_override
return TestClient(app)
return _create_test_client