api: list bookings of user_external_id for an event (#40719)
This commit is contained in:
parent
1584b52ed3
commit
d41b9ab20b
|
@ -33,6 +33,11 @@ urlpatterns = [
|
|||
views.slot_status,
|
||||
name='api-event-status',
|
||||
),
|
||||
url(
|
||||
r'^agenda/(?P<agenda_identifier>[\w-]+)/bookings/(?P<event_identifier>[\w-]+)/$',
|
||||
views.slot_bookings,
|
||||
name='api-event-bookings',
|
||||
),
|
||||
url(
|
||||
r'^agenda/meetings/(?P<meeting_identifier>[\w-]+)/datetimes/$',
|
||||
views.meeting_datetimes,
|
||||
|
|
|
@ -1099,6 +1099,34 @@ class SlotStatus(APIView):
|
|||
slot_status = SlotStatus.as_view()
|
||||
|
||||
|
||||
class SlotBookings(APIView):
|
||||
permission_classes = (permissions.IsAuthenticated,)
|
||||
|
||||
def get_object(self, agenda_identifier, event_identifier):
|
||||
return get_object_or_404(Event, slug=event_identifier, agenda__slug=agenda_identifier)
|
||||
|
||||
def get(self, request, agenda_identifier=None, event_identifier=None, format=None):
|
||||
if not request.GET.get('user_external_id'):
|
||||
response = {
|
||||
'err': 1,
|
||||
'err_class': 'missing param user_external_id',
|
||||
'err_desc': _('missing param user_external_id'),
|
||||
}
|
||||
return Response(response)
|
||||
event = self.get_object(agenda_identifier, event_identifier)
|
||||
booking_queryset = event.booking_set.filter(
|
||||
user_external_id=request.GET['user_external_id'], primary_booking__isnull=True
|
||||
).order_by('pk')
|
||||
response = {
|
||||
'err': 0,
|
||||
'data': [{'booking_id': b.pk, 'in_waiting_list': b.in_waiting_list} for b in booking_queryset],
|
||||
}
|
||||
return Response(response)
|
||||
|
||||
|
||||
slot_bookings = SlotBookings.as_view()
|
||||
|
||||
|
||||
class BookingICS(APIView):
|
||||
permission_classes = (permissions.IsAuthenticated,)
|
||||
|
||||
|
|
|
@ -1303,6 +1303,67 @@ def test_status(app, some_data, user):
|
|||
resp = app.get('/api/agenda/%s/status/%s/' % (agenda_id, 'unknown'), status=404)
|
||||
|
||||
|
||||
def test_bookings(app, some_data, user):
|
||||
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
|
||||
event = Event.objects.filter(agenda=agenda).exclude(start_datetime__lt=now())[0]
|
||||
event.slug = 'event-slug'
|
||||
event.places = 5
|
||||
event.waiting_list_places = 5
|
||||
event.save()
|
||||
|
||||
# create a booking not on the waiting list
|
||||
primary1 = Booking.objects.create(event=event, in_waiting_list=False, user_external_id='42')
|
||||
Booking.objects.create(
|
||||
event=event, in_waiting_list=False, primary_booking=primary1, user_external_id='42'
|
||||
)
|
||||
primary2 = Booking.objects.create(event=event, in_waiting_list=False, user_external_id='foobar')
|
||||
Booking.objects.create(event=event, in_waiting_list=False, user_external_id='')
|
||||
primary4 = Booking.objects.create(event=event, in_waiting_list=True, user_external_id='42')
|
||||
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
|
||||
# unknown agenda
|
||||
resp = app.get(
|
||||
'/api/agenda/foobar/bookings/%s/' % (event.pk), params={'user_external_id': '42'}, status=404
|
||||
)
|
||||
# unknown event
|
||||
resp = app.get(
|
||||
'/api/agenda/%s/bookings/0/' % (agenda.slug), params={'user_external_id': '42'}, status=404
|
||||
)
|
||||
resp = app.get(
|
||||
'/api/agenda/%s/bookings/foobar/' % (agenda.slug), params={'user_external_id': '42'}, status=404
|
||||
)
|
||||
|
||||
resp = app.get(
|
||||
'/api/agenda/%s/bookings/%s/' % (agenda.slug, event.slug), params={'user_external_id': '42'}
|
||||
)
|
||||
assert resp.json['err'] == 0
|
||||
assert resp.json['data'] == [
|
||||
{'booking_id': primary1.pk, 'in_waiting_list': False},
|
||||
{'booking_id': primary4.pk, 'in_waiting_list': True},
|
||||
]
|
||||
resp = app.get(
|
||||
'/api/agenda/%s/bookings/%s/' % (agenda.slug, event.slug), params={'user_external_id': 'foobar'}
|
||||
)
|
||||
assert resp.json['err'] == 0
|
||||
assert resp.json['data'] == [
|
||||
{'booking_id': primary2.pk, 'in_waiting_list': False},
|
||||
]
|
||||
resp = app.get(
|
||||
'/api/agenda/%s/bookings/%s/' % (agenda.slug, event.slug), params={'user_external_id': '35'}
|
||||
)
|
||||
assert resp.json['err'] == 0
|
||||
assert resp.json['data'] == []
|
||||
# no user_external_id in params
|
||||
resp = app.get('/api/agenda/%s/bookings/%s/' % (agenda.slug, event.slug), params={'user_external_id': ''})
|
||||
assert resp.json['err'] == 1
|
||||
assert resp.json['reason'] == 'missing param user_external_id' # legacy
|
||||
assert resp.json['err_class'] == 'missing param user_external_id'
|
||||
assert resp.json['err_desc'] == 'missing param user_external_id'
|
||||
resp = app.get('/api/agenda/%s/bookings/%s/' % (agenda.slug, event.slug))
|
||||
assert resp.json['err'] == 1
|
||||
|
||||
|
||||
def test_waiting_list_datetimes(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]
|
||||
|
|
Loading…
Reference in New Issue