forked from CGM_Public/pretix_original
Deal with cancelling memberships (#2130)
This commit is contained in:
@@ -227,6 +227,27 @@ def test_validate_membership_ensure_locking(event, customer, membership, requiri
|
||||
assert any('FOR UPDATE' in s['sql'] for s in captured)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_validate_membership_canceled(event, customer, membership, requiring_ticket, membership_type):
|
||||
with pytest.raises(ValidationError) as excinfo:
|
||||
membership.canceled = True
|
||||
membership.save()
|
||||
validate_memberships_in_order(
|
||||
customer,
|
||||
[
|
||||
CartPosition(
|
||||
item=requiring_ticket,
|
||||
used_membership=membership
|
||||
)
|
||||
],
|
||||
event,
|
||||
lock=False,
|
||||
ignored_order=None,
|
||||
testmode=False,
|
||||
)
|
||||
assert "canceled" in str(excinfo.value)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_validate_membership_test_mode(event, customer, membership, requiring_ticket, membership_type):
|
||||
with pytest.raises(ValidationError) as excinfo:
|
||||
|
||||
@@ -1233,6 +1233,27 @@ class OrderTestCase(BaseQuotaTestCase):
|
||||
)
|
||||
assert not self.order.user_cancel_allowed
|
||||
|
||||
@classscope(attr='o')
|
||||
def test_can_cancel_order_with_membership(self):
|
||||
mt = self.event.organizer.membership_types.create(name="foo")
|
||||
customer = self.event.organizer.customers.create()
|
||||
self.order.customer = customer
|
||||
self.order.save()
|
||||
item1 = Item.objects.create(event=self.event, name="Ticket", default_price=23,
|
||||
admission=True, allow_cancel=True, issue_giftcard=True)
|
||||
p = OrderPosition.objects.create(order=self.order, item=item1,
|
||||
variation=None, price=23)
|
||||
m = customer.memberships.create(
|
||||
membership_type=mt,
|
||||
date_start=now(),
|
||||
date_end=now(),
|
||||
granted_in=p,
|
||||
)
|
||||
# yeah, doesn't really make sense on same order, but good enough for the test
|
||||
OrderPosition.objects.create(order=self.order, item=item1,
|
||||
variation=None, price=23, used_membership=m)
|
||||
assert not self.order.user_cancel_allowed
|
||||
|
||||
@classscope(attr='o')
|
||||
def test_can_cancel_order_free(self):
|
||||
self.order.status = Order.STATUS_PAID
|
||||
|
||||
@@ -1166,6 +1166,23 @@ class OrderChangeManagerTests(TestCase):
|
||||
self.ocm.commit()
|
||||
assert gc.value == Decimal('0.00')
|
||||
|
||||
@classscope(attr='o')
|
||||
def test_cancel_issued_membership(self):
|
||||
mt = self.event.organizer.membership_types.create(name="foo")
|
||||
customer = self.event.organizer.customers.create()
|
||||
self.order.customer = customer
|
||||
self.o.save()
|
||||
m = customer.memberships.create(
|
||||
membership_type=mt,
|
||||
date_start=now(),
|
||||
date_end=now(),
|
||||
granted_in=self.order.positions.first(),
|
||||
)
|
||||
self.ocm.cancel(self.op1)
|
||||
self.ocm.commit()
|
||||
m.refresh_from_db()
|
||||
assert m.canceled
|
||||
|
||||
@classscope(attr='o')
|
||||
def test_cancel_issued_giftcard_used(self):
|
||||
gc = self.o.issued_gift_cards.create(currency="EUR", issued_in=self.op1)
|
||||
@@ -2419,6 +2436,21 @@ class OrderChangeManagerTests(TestCase):
|
||||
op.refresh_from_db()
|
||||
assert op.secret != s
|
||||
|
||||
@classscope(attr='o')
|
||||
def test_cancel_order_membership(self):
|
||||
mt = self.event.organizer.membership_types.create(name="foo")
|
||||
customer = self.event.organizer.customers.create()
|
||||
self.order.customer = customer
|
||||
m = customer.memberships.create(
|
||||
membership_type=mt,
|
||||
date_start=now(),
|
||||
date_end=now(),
|
||||
granted_in=self.order.positions.first(),
|
||||
)
|
||||
cancel_order(self.order)
|
||||
m.refresh_from_db()
|
||||
assert m.canceled
|
||||
|
||||
@classscope(attr='o')
|
||||
def test_auto_change_payment_fee(self):
|
||||
fee2 = self.order.fees.create(fee_type=OrderFee.FEE_TYPE_SHIPPING, value=Decimal('0.50'))
|
||||
@@ -3019,3 +3051,20 @@ class OrderReactivateTest(TestCase):
|
||||
gc = self.o.issued_gift_cards.create(currency="EUR", issued_in=self.op1)
|
||||
reactivate_order(self.order)
|
||||
assert gc.value == 23
|
||||
|
||||
@classscope(attr='o')
|
||||
def test_reactivate_membership(self):
|
||||
mt = self.event.organizer.membership_types.create(name="foo")
|
||||
customer = self.event.organizer.customers.create()
|
||||
self.order.customer = customer
|
||||
self.order.save()
|
||||
m = customer.memberships.create(
|
||||
membership_type=mt,
|
||||
date_start=now(),
|
||||
date_end=now(),
|
||||
granted_in=self.order.positions.first(),
|
||||
canceled=True,
|
||||
)
|
||||
reactivate_order(self.order)
|
||||
m.refresh_from_db()
|
||||
assert not m.canceled
|
||||
|
||||
Reference in New Issue
Block a user