Files
eventspace/backend/tests/api/routes/events/test_guests.py
Felipe Cardoso 270bfda1f8
All checks were successful
Build and Push Docker Images / changes (push) Successful in 4s
Build and Push Docker Images / build-backend (push) Successful in 50s
Build and Push Docker Images / build-frontend (push) Has been skipped
Add guests API with CRUD operations and tests
Introduce a new API for managing event guests, including endpoints for creating, reading, updating, deleting, and changing guest status. Added corresponding Pydantic schemas, database CRUD logic, and extensive test coverage to validate functionality. Integrated the guests API under the events router.
2025-03-15 02:09:17 +01:00

105 lines
3.8 KiB
Python

import uuid
import pytest
from app.api.routes.events.guests import router as guests_router
from app.models import GuestStatus
@pytest.fixture
def guest_data():
return {
"event_id": str(uuid.uuid4()), # Correctly generates actual UUID objects
"invited_by": str(uuid.uuid4()),
"full_name": "John Doe",
"email": "john.doe@example.com",
"invitation_code": "INVITE12345",
"can_bring_guests": False
}
class TestGuestsRouter:
@pytest.fixture(autouse=True)
def setup_method(self, create_test_client, db_session, mock_user, guest_fixture):
self.client = create_test_client(
router=guests_router,
prefix="/guests",
db_session=db_session,
user=mock_user
)
self.db_session = db_session
self.mock_user = mock_user
self.endpoint = "/guests"
self.guest = guest_fixture
def test_create_guest_success(self, guest_data):
response = self.client.post(self.endpoint, json=guest_data)
assert response.status_code == 200
data = response.json()
assert data["full_name"] == guest_data["full_name"]
assert data["email"] == guest_data["email"]
def test_create_guest_missing_required_fields_fails(self):
incomplete_payload = {
"email": "john.doe@example.com"
}
response = self.client.post(self.endpoint, json=incomplete_payload)
assert response.status_code == 422
def test_read_guest_success(self, guest_fixture):
response = self.client.get(f"{self.endpoint}/{guest_fixture.id}")
assert response.status_code == 200
data = response.json()
assert data["id"] == str(guest_fixture.id)
assert data["full_name"] == guest_fixture.full_name
def test_read_guest_not_found(self):
random_uuid = str(uuid.uuid4())
response = self.client.get(f"{self.endpoint}/{random_uuid}")
assert response.status_code == 404
assert response.json()["detail"] == "Guest not found"
def test_update_guest_success(self):
update_data = {"full_name": "Jane Doe"}
response = self.client.put(f"{self.endpoint}/{self.guest.id}", json=update_data)
assert response.status_code == 200
assert response.json()["full_name"] == "Jane Doe"
def test_update_guest_not_found_fails(self):
fake_uuid = str(uuid.uuid4())
update_data = {"full_name": "Nobody"}
response = self.client.put(f"{self.endpoint}/{fake_uuid}", json=update_data)
assert response.status_code == 404
def test_delete_guest_success(self):
response = self.client.delete(f"{self.endpoint}/{self.guest.id}")
assert response.status_code == 200
assert response.json()["id"] == str(self.guest.id)
def test_delete_guest_not_found_fails(self):
fake_uuid = str(uuid.uuid4())
response = self.client.delete(f"{self.endpoint}/{fake_uuid}")
assert response.status_code == 404
assert response.json()["detail"] == "Guest not found"
def test_list_guests_success(self):
response = self.client.get(self.endpoint)
assert response.status_code == 200
assert isinstance(response.json(), list)
assert any(g["id"] == str(self.guest.id) for g in response.json())
def test_guest_update_status_success(self):
response = self.client.patch(
f"{self.endpoint}/{self.guest.id}/status",
params={"status": "confirmed"}
)
assert response.status_code == 200
assert response.json()["status"] == GuestStatus.CONFIRMED.value
def test_guest_status_update_invalid_status_fails(self):
response = self.client.patch(
f"{self.endpoint}/{self.guest.id}/status",
params={"status": "invalid_status"}
)
assert response.status_code == 422