Improvements around the waiting list (#2219)

* Waiting list: Support for seated events, pre-fill customer email address

* Allow people to remove themselves

* Update src/pretix/base/settings.py

Co-authored-by: Richard Schreiber <schreiber@rami.io>

* Update src/pretix/control/views/waitinglist.py

Co-authored-by: Richard Schreiber <schreiber@rami.io>

* Update src/pretix/control/views/waitinglist.py

Co-authored-by: Richard Schreiber <schreiber@rami.io>

* Update src/pretix/control/views/waitinglist.py

Co-authored-by: Richard Schreiber <schreiber@rami.io>

* Update src/pretix/presale/views/waiting.py

Co-authored-by: Richard Schreiber <schreiber@rami.io>

* Resolve a review note

* Review notes

* Fix linter issues

* Fix import

Co-authored-by: Richard Schreiber <schreiber@rami.io>
This commit is contained in:
Raphael Michel
2021-09-27 20:48:02 +02:00
committed by GitHub
parent a9a4cf6fca
commit 9f2ffc3276
15 changed files with 359 additions and 62 deletions

View File

@@ -960,7 +960,8 @@ class WaitingListTest(EventTestMixin, SoupTest):
self.assertIn('waiting list', response.rendered_content)
response = self.client.post(
'/%s/%s/waitinglist/?item=%d' % (self.orga.slug, self.event.slug, self.item.pk), {
'email': 'foo@bar.com'
'email': 'foo@bar.com',
'itemvar': str(self.item.pk)
}
)
self.assertEqual(response.status_code, 302)
@@ -989,7 +990,8 @@ class WaitingListTest(EventTestMixin, SoupTest):
self.assertIn('waiting list', response.rendered_content)
response = self.client.post(
'/%s/%s/waitinglist/?item=%d&subevent=%d' % (self.orga.slug, self.event.slug, self.item.pk, se1.pk), {
'email': 'foo@bar.com'
'email': 'foo@bar.com',
'itemvar': str(self.item.pk)
}
)
self.assertEqual(response.status_code, 302)
@@ -1000,10 +1002,14 @@ class WaitingListTest(EventTestMixin, SoupTest):
assert wle.subevent == se1
def test_invalid_item(self):
response = self.client.get(
'/%s/%s/waitinglist/?item=%d' % (self.orga.slug, self.event.slug, self.item.pk + 1)
response = self.client.post(
'/%s/%s/waitinglist/' % (self.orga.slug, self.event.slug),
{
'email': 'foo@bar.com',
'itemvar': str(self.item.pk + 1),
}
)
self.assertEqual(response.status_code, 302)
self.assertEqual(response.status_code, 200)
def test_invalid_subevent(self):
self.event.has_subevents = True
@@ -1028,10 +1034,11 @@ class WaitingListTest(EventTestMixin, SoupTest):
self.q.save()
response = self.client.post(
'/%s/%s/waitinglist/?item=%d' % (self.orga.slug, self.event.slug, self.item.pk), {
'email': 'foo@bar.com'
'email': 'foo@bar.com',
'itemvar': str(self.item.pk)
}
)
self.assertEqual(response.status_code, 302)
self.assertEqual(response.status_code, 200)
with scopes_disabled():
self.assertFalse(WaitingListEntry.objects.filter(email='foo@bar.com').exists())
@@ -1048,12 +1055,48 @@ class WaitingListTest(EventTestMixin, SoupTest):
q2.items.add(self.item)
response = self.client.post(
'/%s/%s/waitinglist/?item=%d&subevent=%d' % (self.orga.slug, self.event.slug, self.item.pk, se1.pk), {
'email': 'foo@bar.com'
'email': 'foo@bar.com',
'itemvar': str(self.item.pk),
}
)
self.assertEqual(response.status_code, 200)
with scopes_disabled():
self.assertFalse(WaitingListEntry.objects.filter(email='foo@bar.com').exists())
def test_remove_valid(self):
with scopes_disabled():
v = self.event.vouchers.create(item=self.item, block_quota=True)
WaitingListEntry.objects.create(
event=self.event, item=self.item, email='bar@bar.com', voucher=v
)
response = self.client.get(
'/%s/%s/waitinglist/remove?voucher=%s' % (self.orga.slug, self.event.slug, v.code), {
}
)
self.assertEqual(response.status_code, 200)
response = self.client.post(
'/%s/%s/waitinglist/remove?voucher=%s' % (self.orga.slug, self.event.slug, v.code), {
}
)
self.assertEqual(response.status_code, 302)
v.refresh_from_db()
assert not v.is_active()
def test_remove_waiting_list_vouchers_only(self):
with scopes_disabled():
self.assertFalse(WaitingListEntry.objects.filter(email='foo@bar.com').exists())
v = self.event.vouchers.create(item=self.item, block_quota=True)
response = self.client.get(
'/%s/%s/waitinglist/remove?voucher=%s' % (self.orga.slug, self.event.slug, v.code), {
}
)
self.assertEqual(response.status_code, 302)
response = self.client.post(
'/%s/%s/waitinglist/remove?voucher=%s' % (self.orga.slug, self.event.slug, v.code), {
}
)
self.assertEqual(response.status_code, 302)
v.refresh_from_db()
assert v.is_active()
class DeadlineTest(EventTestMixin, TestCase):