From 4ad9bcf6e7dd1fda9946c833b57fb3f8a91e4f02 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 12 Feb 2025 17:55:30 +0100 Subject: [PATCH] API: Fix locale accidentally being a required field --- src/pretix/api/serializers/order.py | 2 +- src/pretix/api/serializers/waitinglist.py | 5 ++++- src/tests/api/test_order_create.py | 17 +++++++++++++++++ src/tests/api/test_waitinglist.py | 18 ++++++++++++++++++ 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/pretix/api/serializers/order.py b/src/pretix/api/serializers/order.py index accc96a4da..162a21d6aa 100644 --- a/src/pretix/api/serializers/order.py +++ b/src/pretix/api/serializers/order.py @@ -1102,7 +1102,7 @@ class OrderCreateSerializer(I18nAwareModelSerializer): queryset=SalesChannel.objects.none(), required=False, ) - locale = serializers.ChoiceField(choices=[]) + locale = serializers.ChoiceField(choices=[], required=False, allow_null=True) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/src/pretix/api/serializers/waitinglist.py b/src/pretix/api/serializers/waitinglist.py index 6a8aea899f..6dbf6891b2 100644 --- a/src/pretix/api/serializers/waitinglist.py +++ b/src/pretix/api/serializers/waitinglist.py @@ -27,7 +27,7 @@ from pretix.base.models import WaitingListEntry class WaitingListSerializer(I18nAwareModelSerializer): - locale = serializers.ChoiceField(choices=[]) + locale = serializers.ChoiceField(choices=[], required=False, allow_null=True) class Meta: model = WaitingListEntry @@ -66,4 +66,7 @@ class WaitingListSerializer(I18nAwareModelSerializer): if data.get('name_parts') and '_scheme' not in data.get('name_parts'): data['name_parts']['_scheme'] = event.settings.name_scheme + if data.get('locale', None) is None: + data['locale'] = event.settings.locale + return data diff --git a/src/tests/api/test_order_create.py b/src/tests/api/test_order_create.py index 678a80283a..9e3185c725 100644 --- a/src/tests/api/test_order_create.py +++ b/src/tests/api/test_order_create.py @@ -622,6 +622,23 @@ def test_order_create_sales_channel_invalid(token_client, organizer, event, item assert resp.data == {'sales_channel': ['Object with identifier=foo does not exist.']} +@pytest.mark.django_db +def test_order_create_locale_optional(token_client, organizer, event, item, quota, question): + event.settings.locale = "de" + event.settings.locales = ["en", "de"] + res = copy.deepcopy(ORDER_CREATE_PAYLOAD) + del res['locale'] + res['positions'][0]['item'] = item.pk + res['positions'][0]['answers'][0]['question'] = question.pk + resp = token_client.post( + '/api/v1/organizers/{}/events/{}/orders/'.format( + organizer.slug, event.slug + ), format='json', data=res + ) + assert resp.status_code == 201 + assert resp.data["locale"] == event.settings.locale + + @pytest.mark.django_db def test_order_create_locale_invalid(token_client, organizer, event, item, quota, question): res = copy.deepcopy(ORDER_CREATE_PAYLOAD) diff --git a/src/tests/api/test_waitinglist.py b/src/tests/api/test_waitinglist.py index b4a7a48555..40ddf1e2bb 100644 --- a/src/tests/api/test_waitinglist.py +++ b/src/tests/api/test_waitinglist.py @@ -469,3 +469,21 @@ def test_wle_send_voucher_unavailable(token_client, organizer, event, item, wle, assert resp.status_code == 400 wle.refresh_from_db() assert not wle.voucher + + +@pytest.mark.django_db +def test_wle_locale_optional(token_client, organizer, event, item, quota): + event.settings.locale = "de" + event.settings.locales = ["en", "de"] + quota.size = 0 + quota.save() + wle = create_wle( + token_client, organizer, event, + data={ + 'email': 'testdummy@pretix.eu', + 'item': item.pk, + 'variation': None, + 'subevent': None + }, + ) + assert wle.locale == "de"