Fixe (partially) gift tests and api

This commit is contained in:
2025-03-16 15:07:31 +01:00
parent 4ef202cc5a
commit b5f1c7ddcb
3 changed files with 212 additions and 83 deletions

View File

@@ -27,7 +27,6 @@ def gift_category_data(mock_event, mock_user):
"description": "Animal-themed toys for Emma",
"icon": "toy-icon",
"color": "#FF5733",
"event_id": str(mock_event.id),
"created_by": str(mock_user.id)
}
@@ -130,13 +129,21 @@ class TestGiftsRouter:
assert any(gift["event_id"] == str(mock_event.id) for gift in response.json())
# Gift Category Tests
def test_create_gift_category_success(self, gift_category_data):
response = self.client.post(f"{self.endpoint}/categories/", json=gift_category_data)
def test_create_gift_category_success(self, gift_category_data, mock_event):
# Need to provide event_id as a query parameter
response = self.client.post(
f"{self.endpoint}/categories/",
json=gift_category_data,
params={"event_id": str(mock_event.id)}
)
assert response.status_code == 200
data = response.json()
assert data["name"] == gift_category_data["name"]
assert data["icon"] == gift_category_data["icon"]
assert data["color"] == gift_category_data["color"]
# Check that display_order and is_visible are set with default values
assert data["display_order"] == 0
assert data["is_visible"] == True
def test_read_gift_category_success(self):
response = self.client.get(f"{self.endpoint}/categories/{self.gift_category.id}")
@@ -174,21 +181,33 @@ class TestGiftsRouter:
assert response.json()["color"] == "#00FF00"
def test_delete_gift_category_success(self):
response = self.client.delete(f"{self.endpoint}/categories/{self.gift_category.id}")
response = self.client.delete(
f"{self.endpoint}/categories/{self.gift_category.id}",
params={"force": True}
)
assert response.status_code == 200
assert response.json()["id"] == str(self.gift_category.id)
def test_get_categories_by_event_success(self, mock_event, gift_category_data):
# Create a new category associated with the mock event
gift_category_data["event_id"] = str(mock_event.id)
self.client.post(f"{self.endpoint}/categories/", json=gift_category_data)
self.client.post(
f"{self.endpoint}/categories/",
json=gift_category_data,
params={"event_id": str(mock_event.id)}
)
# Get categories for the event
response = self.client.get(f"{self.endpoint}/categories/event/{mock_event.id}")
assert response.status_code == 200
assert isinstance(response.json(), list)
assert len(response.json()) >= 1
assert any(cat["event_id"] == str(mock_event.id) for cat in response.json())
# Check that at least one category has display_order and is_visible set
# These properties come from the EventGiftCategory association
assert any(
cat.get("display_order") is not None and cat.get("is_visible") is not None
for cat in response.json()
)
# Gift Purchase Tests
def test_create_gift_purchase_success(self, gift_purchase_data):
@@ -268,4 +287,4 @@ class TestGiftsRouter:
params=reservation_data
)
assert response.status_code == 400
assert response.json()["detail"] == "Gift is not available for reservation"
assert response.json()["detail"] == "Gift is not available for reservation"

View File

@@ -25,7 +25,7 @@ pytest_plugins = ["pytest_asyncio"]
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
@@ -340,17 +340,27 @@ def gift_category_fixture(db_session, mock_user, mock_event):
"""
Fixture to create and return a GiftCategory instance.
"""
# Create the category without event_id and display_order
gift_category = GiftCategory(
id=uuid.uuid4(),
name="Electronics",
description="Category for electronic gifts",
event_id=mock_event.id,
created_by=mock_user.id,
display_order=0,
is_visible=True
created_by=mock_user.id
)
db_session.add(gift_category)
db_session.commit()
# Create the association between the category and the event
from app.models.gift import EventGiftCategory
event_gift_category = EventGiftCategory(
event_id=mock_event.id,
category_id=gift_category.id,
display_order=0,
is_visible=True
)
db_session.add(event_gift_category)
db_session.commit()
return gift_category