Fix annotated check-in list query

This commit is contained in:
Raphael Michel
2017-12-13 23:20:44 +01:00
parent 215a28fac5
commit 15aff6030c
3 changed files with 93 additions and 12 deletions

View File

@@ -13,8 +13,9 @@ from django.test import TestCase
from django.utils.timezone import now
from pretix.base.models import (
CachedFile, CartPosition, Event, Item, ItemCategory, ItemVariation, Order,
OrderPosition, Organizer, Question, Quota, User, Voucher, WaitingListEntry,
CachedFile, CartPosition, CheckinList, Event, Item, ItemCategory,
ItemVariation, Order, OrderPosition, Organizer, Question, Quota, User,
Voucher, WaitingListEntry,
)
from pretix.base.models.event import SubEvent
from pretix.base.models.items import SubEventItem, SubEventItemVariation
@@ -1066,3 +1067,66 @@ class CachedFileTestCase(TestCase):
assert f.read().strip() == "file_content"
cf.delete()
assert not default_storage.exists(cf.file.name)
class CheckinListTestCase(TestCase):
@classmethod
def setUpTestData(cls):
cls.organizer = Organizer.objects.create(name='Dummy', slug='dummy')
cls.event = Event.objects.create(
organizer=cls.organizer, name='Dummy', slug='dummy',
date_from=now(), date_to=now() - timedelta(hours=1),
)
cls.item1 = cls.event.items.create(name="Ticket", default_price=12)
cls.item2 = cls.event.items.create(name="Shirt", default_price=6)
cls.cl_all = cls.event.checkin_lists.create(
name='All', all_products=True
)
cls.cl_both = cls.event.checkin_lists.create(
name='Both', all_products=False
)
cls.cl_both.limit_products.add(cls.item1)
cls.cl_both.limit_products.add(cls.item2)
cls.cl_tickets = cls.event.checkin_lists.create(
name='Tickets', all_products=False
)
cls.cl_tickets.limit_products.add(cls.item1)
o = Order.objects.create(
code='FOO', event=cls.event, email='dummy@dummy.test',
status=Order.STATUS_PAID,
datetime=now(), expires=now() + timedelta(days=10),
total=Decimal("30"), payment_provider='banktransfer', locale='en'
)
OrderPosition.objects.create(
order=o,
item=cls.item1,
variation=None,
price=Decimal("12"),
)
op2 = OrderPosition.objects.create(
order=o,
item=cls.item1,
variation=None,
price=Decimal("12"),
)
op3 = OrderPosition.objects.create(
order=o,
item=cls.item2,
variation=None,
price=Decimal("6"),
)
op2.checkins.create(list=cls.cl_tickets)
op3.checkins.create(list=cls.cl_both)
def test_annotated(self):
lists = list(CheckinList.annotate_with_numbers(self.event.checkin_lists.order_by('name'), self.event))
assert lists == [self.cl_all, self.cl_both, self.cl_tickets]
assert lists[0].checkin_count == 0
assert lists[0].position_count == 3
assert lists[0].percent == 0
assert lists[1].checkin_count == 1
assert lists[1].position_count == 3
assert lists[1].percent == 33
assert lists[2].checkin_count == 1
assert lists[2].position_count == 2
assert lists[2].percent == 50