forked from CGM_Public/pretix_original
Fix API bug: Do not delete SubEventItems on PATCH request
This commit is contained in:
@@ -459,12 +459,13 @@ class SubEventSerializer(I18nAwareModelSerializer):
|
|||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
item_price_overrides_data = validated_data.pop('subeventitem_set') if 'subeventitem_set' in validated_data else {}
|
item_price_overrides_data = validated_data.pop('subeventitem_set')
|
||||||
variation_price_overrides_data = validated_data.pop('subeventitemvariation_set') if 'subeventitemvariation_set' in validated_data else {}
|
variation_price_overrides_data = validated_data.pop('subeventitemvariation_set')
|
||||||
meta_data = validated_data.pop('meta_data', None)
|
meta_data = validated_data.pop('meta_data', None)
|
||||||
seat_category_mapping = validated_data.pop('seat_category_mapping', None)
|
seat_category_mapping = validated_data.pop('seat_category_mapping', None)
|
||||||
subevent = super().update(instance, validated_data)
|
subevent = super().update(instance, validated_data)
|
||||||
|
|
||||||
|
if item_price_overrides_data is not None:
|
||||||
existing_item_overrides = {item.item: item.id for item in SubEventItem.objects.filter(subevent=subevent)}
|
existing_item_overrides = {item.item: item.id for item in SubEventItem.objects.filter(subevent=subevent)}
|
||||||
|
|
||||||
for item_price_override_data in item_price_overrides_data:
|
for item_price_override_data in item_price_overrides_data:
|
||||||
@@ -473,6 +474,7 @@ class SubEventSerializer(I18nAwareModelSerializer):
|
|||||||
|
|
||||||
SubEventItem.objects.filter(id__in=existing_item_overrides.values()).delete()
|
SubEventItem.objects.filter(id__in=existing_item_overrides.values()).delete()
|
||||||
|
|
||||||
|
if variation_price_overrides_data is not None:
|
||||||
existing_variation_overrides = {item.variation: item.id for item in SubEventItemVariation.objects.filter(subevent=subevent)}
|
existing_variation_overrides = {item.variation: item.id for item in SubEventItemVariation.objects.filter(subevent=subevent)}
|
||||||
|
|
||||||
for variation_price_override_data in variation_price_overrides_data:
|
for variation_price_override_data in variation_price_overrides_data:
|
||||||
|
|||||||
@@ -562,6 +562,37 @@ def test_subevent_update(token_client, organizer, event, subevent, item, item2,
|
|||||||
assert resp.content.decode() == '{"non_field_errors":["One or more variations do not belong to this event."]}'
|
assert resp.content.decode() == '{"non_field_errors":["One or more variations do not belong to this event."]}'
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
def test_subevent_update_keep_subeventitems(token_client, organizer, event, subevent, item, item2):
|
||||||
|
resp = token_client.patch(
|
||||||
|
'/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk),
|
||||||
|
{
|
||||||
|
"item_price_overrides": [
|
||||||
|
{
|
||||||
|
"item": item.pk,
|
||||||
|
"price": "88.88",
|
||||||
|
"disabled": True
|
||||||
|
}
|
||||||
|
],
|
||||||
|
},
|
||||||
|
format='json'
|
||||||
|
)
|
||||||
|
assert resp.status_code == 200
|
||||||
|
with scopes_disabled():
|
||||||
|
assert event.subevents.get(id=subevent.id).item_overrides[item.pk].disabled
|
||||||
|
|
||||||
|
resp = token_client.patch(
|
||||||
|
'/api/v1/organizers/{}/events/{}/subevents/{}/'.format(organizer.slug, event.slug, subevent.pk),
|
||||||
|
{
|
||||||
|
"date_from": "2017-12-27T10:00:00Z",
|
||||||
|
},
|
||||||
|
format='json'
|
||||||
|
)
|
||||||
|
assert resp.status_code == 200
|
||||||
|
with scopes_disabled():
|
||||||
|
assert event.subevents.get(id=subevent.id).item_overrides[item.pk].disabled
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_subevent_detail(token_client, organizer, event, subevent):
|
def test_subevent_detail(token_client, organizer, event, subevent):
|
||||||
res = dict(TEST_SUBEVENT_RES)
|
res = dict(TEST_SUBEVENT_RES)
|
||||||
|
|||||||
Reference in New Issue
Block a user