api: allow empty cancel_booking_id (#33783)

This commit is contained in:
Thomas NOËL 2019-06-11 09:56:03 +02:00
parent bb372f0ebe
commit af3b8ffc44
2 changed files with 25 additions and 7 deletions

View File

@ -316,7 +316,7 @@ class SlotSerializer(serializers.Serializer):
user_display_label = serializers.CharField(max_length=250, allow_blank=True)
backoffice_url = serializers.URLField(allow_blank=True)
count = serializers.IntegerField(min_value=1)
cancel_booking_id = serializers.IntegerField()
cancel_booking_id = serializers.CharField(max_length=250, allow_blank=True, allow_null=True)
class SlotsSerializer(SlotSerializer):
@ -384,10 +384,20 @@ class Fillslots(APIView):
}, status=status.HTTP_400_BAD_REQUEST)
to_cancel_booking = None
if 'cancel_booking_id' in payload:
cancel_booking_id = None
if payload.get('cancel_booking_id'):
try:
cancel_booking_id = int(payload.get('cancel_booking_id'))
except (ValueError, TypeError):
return Response({
'err': 1,
'reason': 'cancel_booking_id is not an integer'
}, status=status.HTTP_400_BAD_REQUEST)
if cancel_booking_id is not None:
cancel_error = None
try:
to_cancel_booking = Booking.objects.get(pk=payload.get('cancel_booking_id'))
to_cancel_booking = Booking.objects.get(pk=cancel_booking_id)
if to_cancel_booking.cancellation_datetime:
cancel_error = 'cancel booking: booking already cancelled'
else:

View File

@ -783,12 +783,20 @@ def test_booking_api_with_cancel_booking(app, some_data, user):
params={'cancel_booking_id': 'no an integer'},
status=400)
# cancel_booking_id can't be empty if specified
app.post_json(
# cancel_booking_id can be empty or null
resp = app.post_json(
'/api/agenda/%s/fillslot/%s/' % (agenda_id, event_0.id),
params={'cancel_booking_id': ''},
status=400)
params={'cancel_booking_id': ''})
assert resp.json['err'] == 0
assert 'cancelled_booking_id' not in resp.json
assert Booking.objects.count() == 5
resp = app.post_json(
'/api/agenda/%s/fillslot/%s/' % (agenda_id, event_0.id),
params={'cancel_booking_id': None})
assert resp.json['err'] == 0
assert 'cancelled_booking_id' not in resp.json
assert Booking.objects.count() == 6
def test_booking_cancellation_api(app, some_data, user):
agenda_id = Agenda.objects.filter(label=u'Foo bar')[0].id