diff --git a/src/pretix/base/models/waitinglist.py b/src/pretix/base/models/waitinglist.py index 29fb636ae9..ca582a3511 100644 --- a/src/pretix/base/models/waitinglist.py +++ b/src/pretix/base/models/waitinglist.py @@ -87,7 +87,7 @@ class WaitingListEntry(LoggedModel): if self.variation else self.item.check_quotas(count_waitinglist=False, subevent=self.subevent, _cache=quota_cache) ) - if availability[1] < 1: + if availability[1] is None or availability[1] < 1: raise WaitingListException(_('This product is currently not available.')) if self.voucher: raise WaitingListException(_('A voucher has already been sent to this person.')) diff --git a/src/pretix/base/services/waitinglist.py b/src/pretix/base/services/waitinglist.py index 8a444f4638..90a60545d8 100644 --- a/src/pretix/base/services/waitinglist.py +++ b/src/pretix/base/services/waitinglist.py @@ -1,3 +1,5 @@ +import sys + from django.dispatch import receiver from pretix.base.models import Event, User, WaitingListEntry @@ -41,7 +43,7 @@ def assign_automatically(event_id: int, user_id: int=None, subevent_id: int=None if wle.variation else wle.item.check_quotas(count_waitinglist=False, _cache=quota_cache, subevent=wle.subevent) ) - if availability[1] > 0: + if availability[1] is None or availability[1] > 0: try: wle.send_voucher(quota_cache, user=user) sent += 1 @@ -52,7 +54,7 @@ def assign_automatically(event_id: int, user_id: int=None, subevent_id: int=None for q in quotas: quota_cache[q.pk] = ( quota_cache[q.pk][0] if quota_cache[q.pk][0] > 1 else 0, - quota_cache[q.pk][1] - 1 + quota_cache[q.pk][1] - 1 if quota_cache[q.pk][1] is not None else sys.maxsize ) else: gone.add((wle.item, wle.variation)) diff --git a/src/tests/base/test_waitinglist.py b/src/tests/base/test_waitinglist.py index af8eb84cf4..a244caf09e 100644 --- a/src/tests/base/test_waitinglist.py +++ b/src/tests/base/test_waitinglist.py @@ -99,6 +99,22 @@ class WaitingListTestCase(TestCase): 'foo7@bar.com', 'foo8@bar.com', 'foo9@bar.com' ] + def test_send_auto_quota_infinite(self): + self.quota.variations.add(self.var1) + self.quota.size = None + self.quota.save() + for i in range(10): + WaitingListEntry.objects.create( + event=self.event, item=self.item2, variation=self.var1, email='foo{}@bar.com'.format(i) + ) + WaitingListEntry.objects.create( + event=self.event, item=self.item1, email='bar{}@bar.com'.format(i) + ) + + assign_automatically.apply(args=(self.event.pk,)) + assert WaitingListEntry.objects.filter(voucher__isnull=True).count() == 10 + assert Voucher.objects.count() == 10 + def test_send_periodic(self): self.event.settings.set('waiting_list_enabled', True) self.event.settings.set('waiting_list_auto', True)