api: allow empty cancel_booking_id (#33783)
This commit is contained in:
parent
bb372f0ebe
commit
af3b8ffc44
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue