forked from CGM_Public/pretix_original
Allow to define ticket validity through a product (#3105)
This commit is contained in:
@@ -2253,6 +2253,101 @@ def test_order_paid_require_payment_method(token_client, organizer, event, item,
|
||||
assert not o.payments.exists()
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_order_create_auto_validity(token_client, organizer, event, item, quota, question):
|
||||
item.validity_mode = 'dynamic'
|
||||
item.validity_dynamic_duration_minutes = 30
|
||||
item.save()
|
||||
res = copy.deepcopy(ORDER_CREATE_PAYLOAD)
|
||||
res['positions'][0]['item'] = item.pk
|
||||
res['positions'][0]['answers'][0]['question'] = question.pk
|
||||
del res['positions'][0]['price']
|
||||
resp = token_client.post(
|
||||
'/api/v1/organizers/{}/events/{}/orders/'.format(
|
||||
organizer.slug, event.slug
|
||||
), format='json', data=res
|
||||
)
|
||||
assert resp.status_code == 201
|
||||
with scopes_disabled():
|
||||
o = Order.objects.get(code=resp.data['code'])
|
||||
p = o.positions.first()
|
||||
assert now() - datetime.timedelta(seconds=30) < p.valid_from <= now()
|
||||
assert now() + datetime.timedelta(minutes=29) < p.valid_until < now() + datetime.timedelta(minutes=31)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_order_create_manual_validity_precedence(token_client, organizer, event, item, quota, question):
|
||||
item.validity_mode = 'dynamic'
|
||||
item.validity_dynamic_duration_minutes = 30
|
||||
item.save()
|
||||
res = copy.deepcopy(ORDER_CREATE_PAYLOAD)
|
||||
res['positions'][0]['item'] = item.pk
|
||||
res['positions'][0]['answers'][0]['question'] = question.pk
|
||||
res['positions'][0]['valid_from'] = '2022-01-01T09:00:00.000Z'
|
||||
res['positions'][0]['valid_until'] = '2022-01-03T09:00:00.000Z'
|
||||
del res['positions'][0]['price']
|
||||
resp = token_client.post(
|
||||
'/api/v1/organizers/{}/events/{}/orders/'.format(
|
||||
organizer.slug, event.slug
|
||||
), format='json', data=res
|
||||
)
|
||||
assert resp.status_code == 201
|
||||
with scopes_disabled():
|
||||
o = Order.objects.get(code=resp.data['code'])
|
||||
p = o.positions.first()
|
||||
assert p.valid_from.isoformat() == '2022-01-01T09:00:00+00:00'
|
||||
assert p.valid_until.isoformat() == '2022-01-03T09:00:00+00:00'
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_order_create_auto_validity_with_requested_start(token_client, organizer, event, item, quota, question):
|
||||
item.validity_mode = 'dynamic'
|
||||
item.validity_dynamic_duration_minutes = 30
|
||||
item.validity_dynamic_start_choice = True
|
||||
item.save()
|
||||
res = copy.deepcopy(ORDER_CREATE_PAYLOAD)
|
||||
res['positions'][0]['item'] = item.pk
|
||||
res['positions'][0]['answers'][0]['question'] = question.pk
|
||||
res['positions'][0]['requested_valid_from'] = '2039-01-01T09:00:00.000Z'
|
||||
del res['positions'][0]['price']
|
||||
resp = token_client.post(
|
||||
'/api/v1/organizers/{}/events/{}/orders/'.format(
|
||||
organizer.slug, event.slug
|
||||
), format='json', data=res
|
||||
)
|
||||
assert resp.status_code == 201
|
||||
with scopes_disabled():
|
||||
o = Order.objects.get(code=resp.data['code'])
|
||||
p = o.positions.first()
|
||||
assert p.valid_from.isoformat() == '2039-01-01T09:00:00+00:00'
|
||||
assert p.valid_until.isoformat() == '2039-01-01T09:30:00+00:00'
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_order_create_auto_validity_with_requested_start_limitation(token_client, organizer, event, item, quota, question):
|
||||
item.validity_mode = 'dynamic'
|
||||
item.validity_dynamic_duration_minutes = 30
|
||||
item.validity_dynamic_start_choice = True
|
||||
item.validity_dynamic_start_choice_day_limit = 24
|
||||
item.save()
|
||||
res = copy.deepcopy(ORDER_CREATE_PAYLOAD)
|
||||
res['positions'][0]['item'] = item.pk
|
||||
res['positions'][0]['answers'][0]['question'] = question.pk
|
||||
res['positions'][0]['requested_valid_from'] = (now() + datetime.timedelta(days=30)).isoformat()
|
||||
del res['positions'][0]['price']
|
||||
resp = token_client.post(
|
||||
'/api/v1/organizers/{}/events/{}/orders/'.format(
|
||||
organizer.slug, event.slug
|
||||
), format='json', data=res
|
||||
)
|
||||
assert resp.status_code == 201
|
||||
with scopes_disabled():
|
||||
o = Order.objects.get(code=resp.data['code'])
|
||||
p = o.positions.first()
|
||||
assert now() + datetime.timedelta(days=23) < p.valid_from <= now() + datetime.timedelta(days=26)
|
||||
assert p.valid_until == p.valid_from + datetime.timedelta(minutes=30)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_order_create_auto_pricing(token_client, organizer, event, item, quota, question):
|
||||
res = copy.deepcopy(ORDER_CREATE_PAYLOAD)
|
||||
|
||||
Reference in New Issue
Block a user