diff --git a/src/pretix/api/serializers/organizer.py b/src/pretix/api/serializers/organizer.py index f181b0f06f..b40c6ed9e7 100644 --- a/src/pretix/api/serializers/organizer.py +++ b/src/pretix/api/serializers/organizer.py @@ -114,20 +114,21 @@ class GiftCardSerializer(I18nAwareModelSerializer): def validate(self, data): data = super().validate(data) - s = data['secret'] - qs = GiftCard.objects.filter( - secret=s - ).filter( - Q(issuer=self.context["organizer"]) | Q( - issuer__gift_card_collector_acceptance__collector=self.context["organizer"]) - ) - if self.instance: - qs = qs.exclude(pk=self.instance.pk) - if qs.exists(): - raise ValidationError( - {'secret': _( - 'A gift card with the same secret already exists in your or an affiliated organizer account.')} + if 'secret' in data: + s = data['secret'] + qs = GiftCard.objects.filter( + secret=s + ).filter( + Q(issuer=self.context["organizer"]) | Q( + issuer__gift_card_collector_acceptance__collector=self.context["organizer"]) ) + if self.instance: + qs = qs.exclude(pk=self.instance.pk) + if qs.exists(): + raise ValidationError( + {'secret': _( + 'A gift card with the same secret already exists in your or an affiliated organizer account.')} + ) return data class Meta: diff --git a/src/tests/api/test_giftcards.py b/src/tests/api/test_giftcards.py index b0f1c8f11e..b81d47df5e 100644 --- a/src/tests/api/test_giftcards.py +++ b/src/tests/api/test_giftcards.py @@ -147,6 +147,17 @@ def test_giftcard_patch(token_client, organizer, event, giftcard): assert giftcard.currency == "EUR" assert not giftcard.testmode + resp = token_client.patch( + '/api/v1/organizers/{}/giftcards/{}/'.format(organizer.slug, giftcard.pk), + { + 'value': '9.00', + }, + format='json' + ) + assert resp.status_code == 200 + giftcard.refresh_from_db() + assert giftcard.value == Decimal('9.00') + @pytest.mark.django_db def test_giftcard_patch_min_value(token_client, organizer, event, giftcard):