Fix #2090 -- Test mode for memberships

This commit is contained in:
Raphael Michel
2021-05-27 11:47:07 +02:00
parent ab30129fc2
commit 49a9b71ea3
21 changed files with 195 additions and 16 deletions

View File

@@ -76,11 +76,12 @@ def create_membership(customer: Customer, position: OrderPosition):
granted_in=position,
date_start=date_start,
date_end=date_end,
attendee_name_parts=position.attendee_name_parts
attendee_name_parts=position.attendee_name_parts,
testmode=position.order.testmode,
)
def validate_memberships_in_order(customer: Customer, positions: List[AbstractPosition], event: Event, lock=False, ignored_order: Order = None):
def validate_memberships_in_order(customer: Customer, positions: List[AbstractPosition], event: Event, lock=False, ignored_order: Order = None, testmode=False):
"""
Validate that a set of cart or order positions. This currently does not validate
@@ -89,6 +90,7 @@ def validate_memberships_in_order(customer: Customer, positions: List[AbstractPo
:param event: Event this all is computed in
:param lock: Whether to place a SELECT FOR UPDATE lock on the selected memberships
:param ignored_order: An order that should be ignored for usage counting
:param testmode: If ``True``, only test mode memberships are allowed. If ``False``, test mode memberships are not allowed.
"""
tz = event.timezone
applicable_positions = [
@@ -139,6 +141,11 @@ def validate_memberships_in_order(customer: Customer, positions: List[AbstractPo
_('You selected a membership that is connected to a different customer account.')
)
if m.testmode != testmode:
raise ValidationError(
_('You can only use a test mode membership for test mode tickets.')
)
ev = p.subevent or event
if not m.is_valid(ev):

View File

@@ -817,7 +817,7 @@ def _create_order(event: Event, email: str, positions: List[CartPosition], now_d
raise OrderError(_("You cannot pay with gift cards when buying a gift card."))
try:
validate_memberships_in_order(customer, positions, event, lock=True)
validate_memberships_in_order(customer, positions, event, lock=True, testmode=event.testmode)
except ValidationError as e:
raise OrderError(e.message)
@@ -2063,7 +2063,7 @@ class OrderChangeManager:
)
fake_cart.append(cp)
try:
validate_memberships_in_order(self.order.customer, fake_cart, self.event, lock=True, ignored_order=self.order)
validate_memberships_in_order(self.order.customer, fake_cart, self.event, lock=True, ignored_order=self.order, testmode=self.order.testmode)
except ValidationError as e:
raise OrderError(e.message)