api: add endpoint to get number of total/available/reserved places (#11374)

This commit is contained in:
Frédéric Péters 2016-06-18 12:24:21 +02:00
parent cc093973ad
commit bb09199d96
3 changed files with 34 additions and 0 deletions

View File

@ -21,5 +21,6 @@ from . import views
urlpatterns = patterns('',
url(r'agenda/(?P<pk>\w+)/datetimes/', views.datetimes),
url(r'agenda/(?P<agenda_pk>\w+)/fillslot/(?P<event_pk>\w+)/', views.fillslot),
url(r'agenda/(?P<agenda_pk>\w+)/status/(?P<event_pk>\w+)/', views.slot_status),
url(r'booking/(?P<booking_pk>\w+)/', views.booking),
)

View File

@ -76,3 +76,22 @@ class BookingAPI(APIView):
return Response(response)
booking = BookingAPI.as_view()
class SlotStatus(GenericAPIView):
serializer_class = SlotSerializer
permission_classes = (permissions.IsAuthenticated,)
def get(self, request, agenda_pk=None, event_pk=None, format=None):
event = Event.objects.filter(id=event_pk)[0]
response = {
'err': 0,
'places': {
'total': event.places,
'reserved': event.booked_places,
'available': event.places - event.booked_places,
}
}
return Response(response)
slot_status = SlotStatus.as_view()

View File

@ -114,3 +114,17 @@ def test_soldout(app, some_data, user):
resp = app.post('/api/agenda/%s/fillslot/%s/' % (agenda_id, event.id), status=400)
assert resp.json['err'] == 1
assert resp.json['reason'] == 'sold out'
def test_status(app, some_data, user):
agenda_id = Agenda.objects.filter(label=u'Foo bar')[0].id
event = Event.objects.filter(agenda_id=agenda_id)[0]
Booking(event=event).save()
resp = app.get('/api/agenda/%s/status/%s/' % (agenda_id, event.id), status=403)
app.authorization = ('Basic', ('john.doe', 'password'))
resp = app.get('/api/agenda/%s/status/%s/' % (agenda_id, event.id))
assert resp.json['err'] == 0
assert resp.json['places']['total'] == 10
assert resp.json['places']['available'] == 9
assert resp.json['places']['reserved'] == 1