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:
Raphael Michel
2019-11-15 10:56:34 +01:00
committed by GitHub
parent f79df47b78
commit a2c1c69d7e
19 changed files with 474 additions and 42 deletions

View File

@@ -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()