diff --git a/src/pretix/control/forms/waitinglist.py b/src/pretix/control/forms/waitinglist.py index fd245da72b..4eedc5e032 100644 --- a/src/pretix/control/forms/waitinglist.py +++ b/src/pretix/control/forms/waitinglist.py @@ -125,6 +125,9 @@ class WaitingListEntryEditForm(I18nModelForm): def clean(self): cleaned_data = super().clean() itemvar = cleaned_data.get('itemvar') + if itemvar is None: + self.add_error('itemvar', _('Item and Variation are required')) + return cleaned_data cleaned_data['item'] = Item.objects.get(pk=itemvar.split('-')[0]) if '-' in itemvar: diff --git a/src/tests/control/test_waitinglist.py b/src/tests/control/test_waitinglist.py index 0d2978eb7c..a9028737a5 100644 --- a/src/tests/control/test_waitinglist.py +++ b/src/tests/control/test_waitinglist.py @@ -39,7 +39,8 @@ from django.utils.timezone import now from django_scopes import scopes_disabled from pretix.base.models import ( - Event, Item, Organizer, Quota, Team, User, Voucher, WaitingListEntry, + Event, Item, ItemVariation, Organizer, Quota, Team, User, Voucher, + WaitingListEntry, ) from pretix.control.views.dashboards import waitinglist_widgets @@ -59,6 +60,9 @@ def env(): admission=True) item2 = Item.objects.create(event=event, name="Ticket", default_price=23, admission=True) + item3 = Item.objects.create(event=event, name="Ticket", default_price=23, + admission=True) + variation = ItemVariation.objects.create(item=item3) for i in range(5): WaitingListEntry.objects.create( @@ -80,7 +84,7 @@ def env(): t = Team.objects.create(organizer=o, can_view_orders=True, can_change_orders=True) t.members.add(user) t.limit_events.add(event) - return event, user, o, item1 + return event, user, o, item1, variation @pytest.mark.django_db @@ -208,6 +212,36 @@ def test_edit(client, env): assert wle.email.startswith('1_') +@pytest.mark.django_db +def test_edit_itemvariation(client, env): + client.login(email='dummy@dummy.dummy', password='dummy') + with scopes_disabled(): + wle = WaitingListEntry.objects.first() + assert not wle.email.startswith("1_") + client.get('/control/event/dummy/dummy/waitinglist/%s/edit' % (wle.id)) + response = client.post( + '/control/event/dummy/dummy/waitinglist/%s/edit' % (wle.id), + data={ + "email": f"1_{wle.email}", "itemvar": f"{env[4].item.pk}-{env[4].pk}" + }, + follow=True + ) + assert response.wsgi_request.path == '/control/event/dummy/dummy/waitinglist/' + + response = client.get('/control/event/dummy/dummy/waitinglist/%s/edit' % (wle.id)) + assert response.context['form'].initial['itemvar'] == "3-1" + + +@pytest.mark.django_db +def test_invalid_edit(client, env): + client.login(email='dummy@dummy.dummy', password='dummy') + with scopes_disabled(): + wle = WaitingListEntry.objects.first() + assert not wle.email.startswith("1_") + response = client.post('/control/event/dummy/dummy/waitinglist/%s/edit' % (wle.id), data={}) + assert response.context['form'].errors is not None + + @pytest.mark.django_db def test_dashboard(client, env): with scopes_disabled():