Refs #654 -- API: Writable category endpoints (#818)

* EBILL-5: Added POST, PATCH, PUT and DELETE for categories

* EBILL-5: Fixed item category not removed on category delete
This commit is contained in:
Ture Gjørup
2018-03-16 14:50:22 +01:00
committed by Raphael Michel
parent 1dc3a7202a
commit b564fe8a0d
4 changed files with 218 additions and 3 deletions

View File

@@ -7,8 +7,8 @@ from django_countries.fields import Country
from pytz import UTC
from pretix.base.models import (
CartPosition, InvoiceAddress, Item, ItemAddOn, ItemVariation, Order,
OrderPosition, Question, QuestionOption, Quota,
CartPosition, InvoiceAddress, Item, ItemAddOn, ItemCategory, ItemVariation,
Order, OrderPosition, Question, QuestionOption, Quota,
)
from pretix.base.models.orders import OrderFee
@@ -23,6 +23,14 @@ def category2(event2):
return event2.categories.create(name="Tickets2")
@pytest.fixture
def category3(event, item):
cat = event.categories.create(name="Tickets")
item.category = cat
item.save()
return cat
@pytest.fixture
def order(event, item, taxrule):
testtime = datetime(2017, 12, 1, 10, 0, 0, tzinfo=UTC)
@@ -118,6 +126,55 @@ def test_category_detail(token_client, organizer, event, team, category):
assert res == resp.data
@pytest.mark.django_db
def test_category_create(token_client, organizer, event, team):
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/categories/'.format(organizer.slug, event.slug),
{
"name": {"en": "Tickets"},
"description": {"en": ""},
"position": 0,
"is_addon": False
},
format='json'
)
assert resp.status_code == 201
@pytest.mark.django_db
def test_category_update(token_client, organizer, event, team, category):
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/categories/{}/'.format(organizer.slug, event.slug, category.pk),
{
"name": {"en": "Test"},
},
format='json'
)
assert resp.status_code == 200
assert ItemCategory.objects.get(pk=category.pk).name == {"en": "Test"}
@pytest.mark.django_db
def test_category_update_wrong_event(token_client, organizer, event2, category):
resp = token_client.patch(
'/api/v1/organizers/{}/events/{}/categories/{}/'.format(organizer.slug, event2.slug, category.pk),
{
"name": {"en": "Test"},
},
format='json'
)
assert resp.status_code == 404
@pytest.mark.django_db
def test_category_delete(token_client, organizer, event, category3, item):
resp = token_client.delete(
'/api/v1/organizers/{}/events/{}/categories/{}/'.format(organizer.slug, event.slug, category3.pk))
assert resp.status_code == 204
assert not event.categories.filter(pk=category3.id).exists()
assert Item.objects.get(pk=item.pk).category is None
@pytest.fixture
def item(event):
return event.items.create(name="Budget Ticket", default_price=23)