api: suspend, accept and resize endpoints only for events (#46027)

This commit is contained in:
Lauréline Guérin 2020-08-24 15:14:39 +02:00
parent 4ed8c9ce00
commit 8ca72fd705
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 55 additions and 19 deletions

View File

@ -1006,17 +1006,18 @@ class Fillslots(APIView):
'cancel_url': request.build_absolute_uri(
reverse('api-cancel-booking', kwargs={'booking_pk': primary_booking.id})
),
'accept_url': request.build_absolute_uri(
reverse('api-accept-booking', kwargs={'booking_pk': primary_booking.pk})
),
'suspend_url': request.build_absolute_uri(
reverse('api-suspend-booking', kwargs={'booking_pk': primary_booking.pk})
),
'ics_url': request.build_absolute_uri(
reverse('api-booking-ics', kwargs={'booking_pk': primary_booking.id})
),
},
}
if agenda.kind == 'events':
response['api']['accept_url'] = request.build_absolute_uri(
reverse('api-accept-booking', kwargs={'booking_pk': primary_booking.pk})
)
response['api']['suspend_url'] = request.build_absolute_uri(
reverse('api-suspend-booking', kwargs={'booking_pk': primary_booking.pk})
)
if agenda.accept_meetings():
response['end_datetime'] = format_response_datetime(events[-1].end_datetime)
response['duration'] = (events[-1].end_datetime - events[-1].start_datetime).seconds // 60
@ -1130,7 +1131,7 @@ class AcceptBooking(APIView):
permission_classes = (permissions.IsAuthenticated,)
def post(self, request, booking_pk=None, format=None):
booking = get_object_or_404(Booking, id=booking_pk)
booking = get_object_or_404(Booking, id=booking_pk, event__agenda__kind='events')
if booking.cancellation_datetime:
response = {
'err': 1,
@ -1177,7 +1178,7 @@ class SuspendBooking(APIView):
permission_classes = (permissions.IsAuthenticated,)
def post(self, request, booking_pk=None, format=None):
booking = get_object_or_404(Booking, pk=booking_pk)
booking = get_object_or_404(Booking, pk=booking_pk, event__agenda__kind='events')
if booking.cancellation_datetime:
response = {
'err': 1,
@ -1238,7 +1239,7 @@ class ResizeBooking(APIView):
)
payload = serializer.validated_data
booking = get_object_or_404(Booking, pk=booking_pk)
booking = get_object_or_404(Booking, pk=booking_pk, event__agenda__kind='events')
event = booking.event
if booking.cancellation_datetime:
response = {

View File

@ -1971,11 +1971,9 @@ def test_cancel_booking(app, some_data, user):
assert secondary.cancellation_datetime is not None
def test_accept_booking(app, some_data, user):
agenda_id = Agenda.objects.filter(label=u'Foo bar')[0].id
event = Event.objects.filter(agenda_id=agenda_id).exclude(start_datetime__lt=now())[0]
event.waiting_list_places = 5
event.save()
def test_accept_booking(app, user):
agenda = Agenda.objects.create(kind='events')
event = Event.objects.create(agenda=agenda, start_datetime=now(), places=20, waiting_list_places=5)
# create a booking on the waiting list
primary = Booking.objects.create(event=event, in_waiting_list=True)
@ -2027,11 +2025,22 @@ def test_accept_booking(app, some_data, user):
assert resp.json['overbooked_places'] == 1
def test_suspend_booking(app, some_data, user):
agenda_id = Agenda.objects.filter(label=u'Foo bar')[0].id
event = Event.objects.filter(agenda_id=agenda_id).exclude(start_datetime__lt=now())[0]
event.waiting_list_places = 5
event.save()
def test_accept_booking_non_event_agenda(app, user):
app.authorization = ('Basic', ('john.doe', 'password'))
agenda = Agenda.objects.create(kind='meetings')
event = Event.objects.create(agenda=agenda, start_datetime=now(), places=1)
booking = Booking.objects.create(event=event)
app.post('/api/booking/%s/accept/' % booking.pk, status=404)
agenda.kind = 'virtual'
agenda.save()
app.post('/api/booking/%s/accept/' % booking.pk, status=404)
def test_suspend_booking(app, user):
agenda = Agenda.objects.create(kind='events')
event = Event.objects.create(agenda=agenda, start_datetime=now(), places=20, waiting_list_places=5)
# create a booking not on the waiting list
primary = Booking.objects.create(event=event, in_waiting_list=False)
@ -2068,6 +2077,19 @@ def test_suspend_booking(app, some_data, user):
assert primary.in_waiting_list is False
def test_suspend_booking_non_event_agenda(app, user):
app.authorization = ('Basic', ('john.doe', 'password'))
agenda = Agenda.objects.create(kind='meetings')
event = Event.objects.create(agenda=agenda, start_datetime=now(), places=1)
booking = Booking.objects.create(event=event)
app.post('/api/booking/%s/suspend/' % booking.pk, status=404)
agenda.kind = 'virtual'
agenda.save()
app.post('/api/booking/%s/suspend/' % booking.pk, status=404)
def test_resize_booking_invalid_payload(app, user):
app.authorization = ('Basic', ('john.doe', 'password'))
# decrease a booking to 0
@ -2285,6 +2307,19 @@ def test_resize_booking_in_waiting_list(app, user):
assert primary.secondary_booking_set.count() == 0
def test_resize_booking_non_event_agenda(app, user):
app.authorization = ('Basic', ('john.doe', 'password'))
agenda = Agenda.objects.create(kind='meetings')
event = Event.objects.create(agenda=agenda, start_datetime=now(), places=1)
booking = Booking.objects.create(event=event)
app.post('/api/booking/%s/resize/' % booking.pk, params={'count': 42}, status=404)
agenda.kind = 'virtual'
agenda.save()
app.post('/api/booking/%s/resize/' % booking.pk, params={'count': 42}, status=404)
def test_multiple_booking_api(app, some_data, user):
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
event = [x for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()][0]