api: fix fillslots api when meeting type id is not found (#42534)

This commit is contained in:
Lauréline Guérin 2020-05-07 14:26:12 +02:00
parent 19af0088ff
commit 8e775f2bd3
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 25 additions and 1 deletions

View File

@ -605,7 +605,18 @@ class Fillslots(APIView):
datetimes.add(make_aware(datetime.datetime.strptime(datetime_str, '%Y-%m-%d-%H%M')))
# get all free slots and separate them by desk
all_slots = get_all_slots(agenda, agenda.get_meetingtype(id_=meeting_type_id))
try:
all_slots = get_all_slots(agenda, agenda.get_meetingtype(id_=meeting_type_id))
except (MeetingType.DoesNotExist, ValueError):
return Response(
{
'err': 1,
'err_class': 'invalid meeting type id: %s' % meeting_type_id,
'err_desc': _('invalid meeting type id: %s') % meeting_type_id,
},
status=status.HTTP_400_BAD_REQUEST,
)
all_free_slots = [slot for slot in all_slots if not slot.full]
datetimes_by_desk = defaultdict(set)
for slot in all_free_slots:

View File

@ -861,6 +861,19 @@ def test_booking_api_meeting_fillslots(app, meetings_agenda, user):
assert resp.json['err_class'] == 'all slots must have the same meeting type id (1)'
assert resp.json['err_desc'] == 'all slots must have the same meeting type id (1)'
unknown_slots = ['0:2017-05-22-1130']
resp = app.post('/api/agenda/%s/fillslots/' % agenda_id, params={'slots': unknown_slots}, status=400)
assert resp.json['err'] == 1
assert resp.json['reason'] == 'invalid meeting type id: 0' # legacy
assert resp.json['err_class'] == 'invalid meeting type id: 0'
assert resp.json['err_desc'] == 'invalid meeting type id: 0'
unknown_slots = ['foobar:2017-05-22-1130']
resp = app.post('/api/agenda/%s/fillslots/' % agenda_id, params={'slots': unknown_slots}, status=400)
assert resp.json['err'] == 1
assert resp.json['reason'] == 'invalid meeting type id: foobar' # legacy
assert resp.json['err_class'] == 'invalid meeting type id: foobar'
assert resp.json['err_desc'] == 'invalid meeting type id: foobar'
def test_booking_api_meeting_across_daylight_saving_time(app, meetings_agenda, user):
meetings_agenda.maximal_booking_delay = 365