From 97de8cea081df8cdcae6e87d36e5dd228ccb325d Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 6 Nov 2018 18:16:54 +0100 Subject: [PATCH] Allow cart creation without attendee name --- src/pretix/api/serializers/cart.py | 2 +- src/tests/api/test_cart.py | 18 ++++++++++++++++++ src/tests/api/test_orders.py | 17 +++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/pretix/api/serializers/cart.py b/src/pretix/api/serializers/cart.py index e0bbd13e44..160779ba21 100644 --- a/src/pretix/api/serializers/cart.py +++ b/src/pretix/api/serializers/cart.py @@ -27,7 +27,7 @@ class CartPositionSerializer(I18nAwareModelSerializer): class CartPositionCreateSerializer(I18nAwareModelSerializer): answers = AnswerCreateSerializer(many=True, required=False) expires = serializers.DateTimeField(required=False) - attendee_name = serializers.CharField(required=False) + attendee_name = serializers.CharField(required=False, allow_null=True) class Meta: model = CartPosition diff --git a/src/tests/api/test_cart.py b/src/tests/api/test_cart.py index c6cda1e55a..e71eb6c13c 100644 --- a/src/tests/api/test_cart.py +++ b/src/tests/api/test_cart.py @@ -181,6 +181,24 @@ def test_cartpos_create(token_client, organizer, event, item, quota, question): assert cp.attendee_name_parts == {'full_name': 'Peter'} +@pytest.mark.django_db +def test_cartpos_create_name_optional(token_client, organizer, event, item, quota, question): + res = copy.deepcopy(CARTPOS_CREATE_PAYLOAD) + res['item'] = item.pk + res['attendee_name'] = None + del res['attendee_name_parts'] + resp = token_client.post( + '/api/v1/organizers/{}/events/{}/cartpositions/'.format( + organizer.slug, event.slug + ), format='json', data=res + ) + assert resp.status_code == 201 + cp = CartPosition.objects.get(pk=resp.data['id']) + assert cp.price == Decimal('23.00') + assert cp.item == item + assert cp.attendee_name_parts == {} + + @pytest.mark.django_db def test_cartpos_create_legacy_name(token_client, organizer, event, item, quota, question): res = copy.deepcopy(CARTPOS_CREATE_PAYLOAD) diff --git a/src/tests/api/test_orders.py b/src/tests/api/test_orders.py index a60c2fcbd6..e92df79e27 100644 --- a/src/tests/api/test_orders.py +++ b/src/tests/api/test_orders.py @@ -1337,6 +1337,23 @@ def test_order_create_invoice_address_optional(token_client, organizer, event, i o.invoice_address +@pytest.mark.django_db +def test_order_create_attendee_name_optional(token_client, organizer, event, item, quota, question): + res = copy.deepcopy(ORDER_CREATE_PAYLOAD) + res['positions'][0]['attendee_name'] = None + res['positions'][0]['item'] = item.pk + res['positions'][0]['answers'][0]['question'] = question.pk + del res['positions'][0]['attendee_name_parts'] + resp = token_client.post( + '/api/v1/organizers/{}/events/{}/orders/'.format( + organizer.slug, event.slug + ), format='json', data=res + ) + assert resp.status_code == 201 + o = Order.objects.get(code=resp.data['code']) + assert o.positions.first().attendee_name_parts == {} + + @pytest.mark.django_db def test_order_create_legacy_attendee_name(token_client, organizer, event, item, quota, question): res = copy.deepcopy(ORDER_CREATE_PAYLOAD)