mirror of
https://github.com/pretix/pretix.git
synced 2026-05-04 15:04:03 +00:00
Seat-specific vouchers (#1486)
* Basic functionality * API * Do not delete seats with vouchers * Show seat in list of seats * Validate availability of seats * Fix invalid logic in Seat.is_available * Show voucher name in edit form
This commit is contained in:
@@ -2020,7 +2020,7 @@ class SeatingTestCase(TestCase):
|
||||
|
||||
@classscope(attr='organizer')
|
||||
def test_free(self):
|
||||
assert set(self.event.free_seats) == {self.seat_a1, self.seat_a2}
|
||||
assert set(self.event.free_seats()) == {self.seat_a1, self.seat_a2}
|
||||
assert self.seat_a1.is_available()
|
||||
assert self.seat_a2.is_available()
|
||||
|
||||
@@ -2028,7 +2028,7 @@ class SeatingTestCase(TestCase):
|
||||
def test_blocked(self):
|
||||
self.seat_a1.blocked = True
|
||||
self.seat_a1.save()
|
||||
assert set(self.event.free_seats) == {self.seat_a2}
|
||||
assert set(self.event.free_seats()) == {self.seat_a2}
|
||||
assert not self.seat_a1.is_available()
|
||||
assert self.seat_a2.is_available()
|
||||
|
||||
@@ -2043,7 +2043,7 @@ class SeatingTestCase(TestCase):
|
||||
order=o, item=self.ticket, variation=None, price=Decimal("12"),
|
||||
seat=self.seat_a1
|
||||
)
|
||||
assert set(self.event.free_seats) == {self.seat_a2}
|
||||
assert set(self.event.free_seats()) == {self.seat_a2}
|
||||
assert not self.seat_a1.is_available()
|
||||
|
||||
@classscope(attr='organizer')
|
||||
@@ -2057,7 +2057,7 @@ class SeatingTestCase(TestCase):
|
||||
order=o, item=self.ticket, variation=None, price=Decimal("12"),
|
||||
seat=self.seat_a1
|
||||
)
|
||||
assert set(self.event.free_seats) == {self.seat_a2}
|
||||
assert set(self.event.free_seats()) == {self.seat_a2}
|
||||
assert not self.seat_a1.is_available()
|
||||
|
||||
@classscope(attr='organizer')
|
||||
@@ -2071,7 +2071,7 @@ class SeatingTestCase(TestCase):
|
||||
order=o, item=self.ticket, variation=None, price=Decimal("12"),
|
||||
seat=self.seat_a1
|
||||
)
|
||||
assert set(self.event.free_seats) == {self.seat_a1, self.seat_a2}
|
||||
assert set(self.event.free_seats()) == {self.seat_a1, self.seat_a2}
|
||||
assert self.seat_a1.is_available()
|
||||
|
||||
@classscope(attr='organizer')
|
||||
@@ -2080,7 +2080,7 @@ class SeatingTestCase(TestCase):
|
||||
event=self.event, cart_id='a', item=self.ticket, seat=self.seat_a1,
|
||||
price=23, expires=now() + timedelta(minutes=10)
|
||||
)
|
||||
assert set(self.event.free_seats) == {self.seat_a2}
|
||||
assert set(self.event.free_seats()) == {self.seat_a2}
|
||||
assert not self.seat_a1.is_available()
|
||||
|
||||
@classscope(attr='organizer')
|
||||
@@ -2089,7 +2089,7 @@ class SeatingTestCase(TestCase):
|
||||
event=self.event, cart_id='a', item=self.ticket, seat=self.seat_a1,
|
||||
price=23, expires=now() - timedelta(minutes=10)
|
||||
)
|
||||
assert set(self.event.free_seats) == {self.seat_a1, self.seat_a2}
|
||||
assert set(self.event.free_seats()) == {self.seat_a1, self.seat_a2}
|
||||
assert self.seat_a1.is_available()
|
||||
|
||||
@classscope(attr='organizer')
|
||||
@@ -2106,7 +2106,7 @@ class SeatingTestCase(TestCase):
|
||||
order=o, item=self.ticket, variation=None, price=Decimal("12"),
|
||||
seat=self.seat_a1, subevent=se1
|
||||
)
|
||||
assert set(se1.free_seats) == set()
|
||||
assert set(se1.free_seats()) == set()
|
||||
assert not self.seat_a1.is_available()
|
||||
|
||||
@classscope(attr='organizer')
|
||||
@@ -2123,7 +2123,7 @@ class SeatingTestCase(TestCase):
|
||||
order=o, item=self.ticket, variation=None, price=Decimal("12"),
|
||||
seat=self.seat_a1, subevent=se1
|
||||
)
|
||||
assert set(se1.free_seats) == {self.seat_a1}
|
||||
assert set(se1.free_seats()) == {self.seat_a1}
|
||||
assert self.seat_a1.is_available()
|
||||
|
||||
@classscope(attr='organizer')
|
||||
@@ -2135,7 +2135,7 @@ class SeatingTestCase(TestCase):
|
||||
event=self.event, cart_id='a', item=self.ticket, seat=self.seat_a1,
|
||||
price=23, expires=now() + timedelta(minutes=10), subevent=se1
|
||||
)
|
||||
assert set(se1.free_seats) == set()
|
||||
assert set(se1.free_seats()) == set()
|
||||
assert not self.seat_a1.is_available()
|
||||
|
||||
@classscope(attr='organizer')
|
||||
@@ -2147,7 +2147,25 @@ class SeatingTestCase(TestCase):
|
||||
event=self.event, cart_id='a', item=self.ticket, seat=self.seat_a1,
|
||||
price=23, expires=now() - timedelta(minutes=10), subevent=se1
|
||||
)
|
||||
assert set(se1.free_seats) == {self.seat_a1}
|
||||
assert set(se1.free_seats()) == {self.seat_a1}
|
||||
assert self.seat_a1.is_available()
|
||||
|
||||
@classscope(attr='organizer')
|
||||
def test_voucher_active(self):
|
||||
Voucher.objects.create(
|
||||
event=self.event, code='a', item=self.ticket, seat=self.seat_a1,
|
||||
valid_until=now() + timedelta(minutes=10)
|
||||
)
|
||||
assert set(self.event.free_seats()) == {self.seat_a2}
|
||||
assert not self.seat_a1.is_available()
|
||||
|
||||
@classscope(attr='organizer')
|
||||
def test_voucher_expired(self):
|
||||
Voucher.objects.create(
|
||||
event=self.event, code='a', item=self.ticket, seat=self.seat_a1,
|
||||
valid_until=now() - timedelta(minutes=10)
|
||||
)
|
||||
assert set(self.event.free_seats()) == {self.seat_a2, self.seat_a1}
|
||||
assert self.seat_a1.is_available()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user