api: suspend, accept and resize endpoints only for events (#46027)
This commit is contained in:
parent
4ed8c9ce00
commit
8ca72fd705
|
@ -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 = {
|
||||
|
|
|
@ -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]
|
||||
|
|
Loading…
Reference in New Issue