api: add option to return booked events detail in fillslots APIs (#60023)
This commit is contained in:
parent
e2612b0303
commit
4c52f29cfd
|
@ -100,6 +100,8 @@ class MultipleAgendasEventsSlotsSerializer(EventsSlotsSerializer):
|
|||
|
||||
|
||||
class RecurringFillslotsSerializer(MultipleAgendasEventsSlotsSerializer):
|
||||
include_booked_events_detail = serializers.BooleanField(default=False)
|
||||
|
||||
def validate_slots(self, value):
|
||||
super().validate_slots(value)
|
||||
open_event_slugs = collections.defaultdict(set)
|
||||
|
|
|
@ -1682,6 +1682,10 @@ class RecurringFillslots(APIView):
|
|||
'cancelled_booking_count': deleted_count,
|
||||
'full_events': [get_event_detail(request, x, multiple_agendas=True) for x in full_events],
|
||||
}
|
||||
if payload.get('include_booked_events_detail'):
|
||||
response['booked_events'] = [
|
||||
get_event_detail(request, x, multiple_agendas=True) for x in events_to_book
|
||||
]
|
||||
return Response(response)
|
||||
|
||||
|
||||
|
@ -1692,6 +1696,7 @@ class EventsFillslots(APIView):
|
|||
permission_classes = (permissions.IsAuthenticated,)
|
||||
serializer_class = serializers.EventsSlotsSerializer
|
||||
serializer_extra_context = None
|
||||
multiple_agendas = False
|
||||
|
||||
def post(self, request, agenda_identifier):
|
||||
self.agenda = get_object_or_404(Agenda, slug=agenda_identifier, kind='events')
|
||||
|
@ -1762,7 +1767,13 @@ class EventsFillslots(APIView):
|
|||
response = {
|
||||
'err': 0,
|
||||
'booking_count': len(bookings),
|
||||
'waiting_list_events': [get_event_detail(request, x) for x in waiting_list_events],
|
||||
'booked_events': [
|
||||
get_event_detail(request, x, multiple_agendas=self.multiple_agendas) for x in events
|
||||
],
|
||||
'waiting_list_events': [
|
||||
get_event_detail(request, x, multiple_agendas=self.multiple_agendas)
|
||||
for x in waiting_list_events
|
||||
],
|
||||
'cancelled_booking_count': deleted_count,
|
||||
}
|
||||
return Response(response)
|
||||
|
@ -1782,6 +1793,7 @@ events_fillslots = EventsFillslots.as_view()
|
|||
|
||||
class MultipleAgendasEventsFillslots(EventsFillslots):
|
||||
serializer_class = serializers.MultipleAgendasEventsSlotsSerializer
|
||||
multiple_agendas = True
|
||||
|
||||
def post(self, request):
|
||||
serializer = serializers.AgendaOrSubscribedSlugsSerializer(
|
||||
|
|
|
@ -2181,6 +2181,7 @@ def test_recurring_events_api_fillslots(app, user, freezer):
|
|||
params['slots'] = 'foo-bar@event:0,foo-bar@event:3,foo-bar@sunday-event:6'
|
||||
resp = app.post_json(fillslots_url, params=params)
|
||||
assert resp.json['booking_count'] == 156
|
||||
assert 'booked_events' not in resp.json
|
||||
|
||||
assert Booking.objects.count() == 156
|
||||
assert Booking.objects.filter(event__primary_event=event).count() == 104
|
||||
|
@ -2223,9 +2224,13 @@ def test_recurring_events_api_fillslots(app, user, freezer):
|
|||
assert resp.json['booking_count'] == 0
|
||||
|
||||
params['slots'] = 'foo-bar@event:1'
|
||||
params['include_booked_events_detail'] = True
|
||||
resp = app.post_json(fillslots_url + '&date_start=2021-10-06&date_end=2021-11-06', params=params)
|
||||
assert resp.json['booking_count'] == 4
|
||||
assert Booking.objects.filter(user_external_id='user_id_4').count() == 4
|
||||
assert len(resp.json['booked_events']) == 4
|
||||
assert resp.json['booked_events'][0]['id'] == 'foo-bar@event--2021-10-12-1400'
|
||||
assert resp.json['booked_events'][1]['id'] == 'foo-bar@event--2021-10-19-1400'
|
||||
|
||||
resp = app.post_json(fillslots_url, params={'slots': 'foo-bar@event:0'}, status=400)
|
||||
assert resp.json['err'] == 1
|
||||
|
@ -2587,6 +2592,9 @@ def test_api_events_fillslots(app, user):
|
|||
params = {'user_external_id': 'user_id', 'slots': 'event,event-2'}
|
||||
resp = app.post_json(fillslots_url, params=params)
|
||||
assert resp.json['booking_count'] == 2
|
||||
assert len(resp.json['booked_events']) == 2
|
||||
assert resp.json['booked_events'][0]['id'] == 'event'
|
||||
assert resp.json['booked_events'][1]['id'] == 'event-2'
|
||||
assert len(resp.json['waiting_list_events']) == 0
|
||||
|
||||
events = Event.objects.all()
|
||||
|
@ -2595,7 +2603,10 @@ def test_api_events_fillslots(app, user):
|
|||
params['user_external_id'] = 'user_id_2'
|
||||
resp = app.post_json(fillslots_url, params=params)
|
||||
assert resp.json['booking_count'] == 2
|
||||
assert len(resp.json['booked_events']) == 2
|
||||
assert len(resp.json['waiting_list_events']) == 0
|
||||
assert resp.json['booked_events'][0]['id'] == 'event'
|
||||
assert resp.json['booked_events'][1]['id'] == 'event-2'
|
||||
|
||||
params['user_external_id'] = 'user_id_3'
|
||||
resp = app.post_json(fillslots_url, params=params)
|
||||
|
@ -2910,6 +2921,9 @@ def test_api_events_fillslots_multiple_agendas(app, user):
|
|||
params = {'user_external_id': 'user_id', 'slots': event_slugs}
|
||||
resp = app.post_json('/api/agendas/events/fillslots/?agendas=%s' % agenda_slugs, params=params)
|
||||
assert resp.json['booking_count'] == 2
|
||||
assert len(resp.json['booked_events']) == 2
|
||||
assert resp.json['booked_events'][0]['id'] == 'first-agenda@event'
|
||||
assert resp.json['booked_events'][1]['id'] == 'second-agenda@event'
|
||||
assert first_event.booking_set.count() == 1
|
||||
assert second_event.booking_set.count() == 1
|
||||
|
||||
|
@ -2917,6 +2931,7 @@ def test_api_events_fillslots_multiple_agendas(app, user):
|
|||
params = {'user_external_id': 'user_id', 'slots': 'first-agenda@event'}
|
||||
resp = app.post_json('/api/agendas/events/fillslots/?agendas=%s' % agenda_slugs, params=params)
|
||||
assert resp.json['booking_count'] == 0
|
||||
assert len(resp.json['booked_events']) == 0
|
||||
assert resp.json['cancelled_booking_count'] == 1
|
||||
assert first_event.booking_set.count() == 1
|
||||
assert second_event.booking_set.count() == 0
|
||||
|
@ -2924,6 +2939,9 @@ def test_api_events_fillslots_multiple_agendas(app, user):
|
|||
params = {'user_external_id': 'user_id_2', 'slots': event_slugs}
|
||||
resp = app.post_json('/api/agendas/events/fillslots/?agendas=%s' % agenda_slugs, params=params)
|
||||
assert resp.json['booking_count'] == 2
|
||||
assert len(resp.json['booked_events']) == 2
|
||||
assert resp.json['booked_events'][0]['id'] == 'first-agenda@event'
|
||||
assert resp.json['booked_events'][1]['id'] == 'second-agenda@event'
|
||||
assert first_event.booking_set.count() == 2
|
||||
assert second_event.booking_set.count() == 1
|
||||
|
||||
|
|
Loading…
Reference in New Issue