Add mark_refunded parameter to refund creation

This commit is contained in:
Raphael Michel
2018-08-21 15:46:38 +02:00
parent 6502fdb1f5
commit 35ddf6790e
3 changed files with 32 additions and 1 deletions

View File

@@ -1594,7 +1594,8 @@ Order refund endpoints
"amount": "23.00",
"payment": 1,
"execution_date": null,
"provider": "manual"
"provider": "manual",
"mark_refunded": false
}
**Example response**:

View File

@@ -617,6 +617,7 @@ class RefundViewSet(CreateModelMixin, viewsets.ReadOnlyModelViewSet):
return ctx
def create(self, request, *args, **kwargs):
mark_refunded = request.data.pop('mark_refunded', False)
serializer = OrderRefundCreateSerializer(data=request.data, context=self.get_serializer_context())
serializer.is_valid(raise_exception=True)
with transaction.atomic():
@@ -632,6 +633,12 @@ class RefundViewSet(CreateModelMixin, viewsets.ReadOnlyModelViewSet):
user=request.user if request.user.is_authenticated else None,
auth=request.auth
)
if mark_refunded:
mark_order_refunded(
r.order,
user=request.user if request.user.is_authenticated else None,
auth=(request.auth if request.auth else None),
)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

View File

@@ -2269,6 +2269,29 @@ def test_refund_create(token_client, organizer, event, order):
assert r.source == "admin"
assert r.info_data == {"foo": "bar"}
assert r.payment.local_id == 2
order.refresh_from_db()
assert order.status == Order.STATUS_PENDING
@pytest.mark.django_db
def test_refund_create_mark_refunded(token_client, organizer, event, order):
res = copy.deepcopy(REFUND_CREATE_PAYLOAD)
res['mark_refunded'] = True
resp = token_client.post(
'/api/v1/organizers/{}/events/{}/orders/{}/refunds/'.format(
organizer.slug, event.slug, order.code
), format='json', data=res
)
assert resp.status_code == 201
r = order.refunds.get(local_id=resp.data['local_id'])
assert r.provider == "manual"
assert r.amount == Decimal("23.00")
assert r.state == "created"
assert r.source == "admin"
assert r.info_data == {"foo": "bar"}
assert r.payment.local_id == 2
order.refresh_from_db()
assert order.status == Order.STATUS_REFUNDED
@pytest.mark.django_db