diff --git a/src/pretix/api/serializers/order.py b/src/pretix/api/serializers/order.py index dca6fba3c..524135369 100644 --- a/src/pretix/api/serializers/order.py +++ b/src/pretix/api/serializers/order.py @@ -1315,7 +1315,7 @@ class OrderCreateSerializer(I18nAwareModelSerializer): if 'valid_from' not in pos_data and 'valid_until' not in pos_data: valid_from, valid_until = pos_data['item'].compute_validity( requested_start=( - max(requested_valid_from, now()) + requested_valid_from if requested_valid_from and pos_data['item'].validity_dynamic_start_choice else now() ), diff --git a/src/tests/api/test_order_create.py b/src/tests/api/test_order_create.py index 6b752f72d..3a9c9d0b0 100644 --- a/src/tests/api/test_order_create.py +++ b/src/tests/api/test_order_create.py @@ -2459,6 +2459,31 @@ def test_order_create_auto_validity_with_requested_start_limitation(token_client assert p.valid_until == p.valid_from + datetime.timedelta(minutes=30) +@pytest.mark.django_db +def test_order_create_auto_validity_with_requested_start_in_past(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=31) < p.valid_from <= now() - datetime.timedelta(days=29) + 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)