From c7b951346bd32f17c3bb6241a69a595955ac8530 Mon Sep 17 00:00:00 2001 From: Mira Weller Date: Fri, 6 Dec 2024 13:03:45 +0100 Subject: [PATCH] add name_parts_is_empty helper --- src/pretix/base/forms/questions.py | 8 ++++++-- src/tests/base/test_questions.py | 11 +++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 src/tests/base/test_questions.py diff --git a/src/pretix/base/forms/questions.py b/src/pretix/base/forms/questions.py index 29bdfab54..2cd593679 100644 --- a/src/pretix/base/forms/questions.py +++ b/src/pretix/base/forms/questions.py @@ -277,6 +277,10 @@ class NamePartsFormField(forms.MultiValueField): return value +def name_parts_is_empty(name_parts_dict): + return not any(k != "_scheme" and v for k, v in name_parts_dict.items()) + + class WrappedPhonePrefixSelect(Select): initial = None @@ -1152,7 +1156,7 @@ class BaseInvoiceAddressForm(forms.ModelForm): if self.address_validation and self.event.settings.invoice_address_required and not self.all_optional: if data.get('is_business') and not data.get('company'): raise ValidationError({"company": _('You need to provide a company name.')}) - if not data.get('is_business') and len(data.get('name_parts', {})) <= 1: + if not data.get('is_business') and name_parts_is_empty(data.get('name_parts', {})): raise ValidationError(_('You need to provide your name.')) if not data.get('street') and not data.get('zipcode') and not data.get('city'): raise ValidationError({"street": _('This field is required.')}) @@ -1167,7 +1171,7 @@ class BaseInvoiceAddressForm(forms.ModelForm): if all( not v for k, v in data.items() if k not in ('is_business', 'country', 'name_parts') - ) and len(data.get('name_parts', {})) <= 1: + ) and name_parts_is_empty(data.get('name_parts', {})): # Do not save the country if it is the only field set -- we don't know the user even checked it! self.cleaned_data['country'] = '' diff --git a/src/tests/base/test_questions.py b/src/tests/base/test_questions.py new file mode 100644 index 000000000..595d5d4ad --- /dev/null +++ b/src/tests/base/test_questions.py @@ -0,0 +1,11 @@ +from pretix.base.forms.questions import name_parts_is_empty + + +def test_name_parts_is_empty(): + assert name_parts_is_empty({}) is True + assert name_parts_is_empty({"_scheme": "foo"}) is True + assert name_parts_is_empty({"_scheme": "foo", "full_name": ""}) is True + assert name_parts_is_empty({"full_name": None}) is True + assert name_parts_is_empty({"full_name": "Flora Nord"}) is False + assert name_parts_is_empty({"_scheme": "foo", "given_name": "Alice"}) is False + assert name_parts_is_empty({"_legacy": "Alice"}) is False