Fix #1440 -- API confusion about creating free orders

This commit is contained in:
Raphael Michel
2019-10-11 09:00:46 +02:00
parent 361488f3e6
commit b9a911dd97
3 changed files with 25 additions and 2 deletions
+3
View File
@@ -858,6 +858,9 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
order.total = sum([p.price for p in order.positions.all()]) + sum([f.value for f in order.fees.all()])
order.save(update_fields=['total'])
if order.total == Decimal('0.00') and validated_data.get('status') == Order.STATUS_PAID and not payment_provider:
payment_provider = 'free'
if order.total == Decimal('0.00') and validated_data.get('status') != Order.STATUS_PAID:
order.status = Order.STATUS_PAID
order.save()
+19
View File
@@ -1656,6 +1656,25 @@ def test_order_email_optional(token_client, organizer, event, item, quota, quest
assert not o.email
@pytest.mark.django_db
def test_order_create_payment_provider_optional_free(token_client, organizer, event, item, quota, question):
res = copy.deepcopy(ORDER_CREATE_PAYLOAD)
res['positions'][0]['item'] = item.pk
res['positions'][0]['answers'][0]['question'] = question.pk
res['positions'][0]['price'] = '0.00'
res['positions'][0]['status'] = 'p'
del res['payment_provider']
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'])
assert not o.payments.exists()
@pytest.mark.django_db
def test_order_create_payment_info_optional(token_client, organizer, event, item, quota, question):
res = copy.deepcopy(ORDER_CREATE_PAYLOAD)