api: include accept/cancel URLs in booking response (#16126)

This commit is contained in:
Frédéric Péters 2017-05-02 16:52:50 +02:00
parent 59f03a9fbe
commit 2e0f219a66
3 changed files with 16 additions and 2 deletions

View File

@ -32,6 +32,8 @@ urlpatterns = [
views.meeting_datetimes, name='api-agenda-meeting-datetimes'),
url(r'booking/(?P<booking_pk>\w+)/$', views.booking),
url(r'booking/(?P<booking_pk>\w+)/cancel/$', views.cancel_booking),
url(r'booking/(?P<booking_pk>\w+)/accept/$', views.accept_booking),
url(r'booking/(?P<booking_pk>\w+)/cancel/$', views.cancel_booking,
name='api-cancel-booking'),
url(r'booking/(?P<booking_pk>\w+)/accept/$', views.accept_booking,
name='api-accept-booking'),
]

View File

@ -207,7 +207,14 @@ class Fillslot(GenericAPIView):
'in_waiting_list': new_booking.in_waiting_list,
'booking_id': new_booking.id,
'datetime': localtime(event.start_datetime),
'api': {
'cancel_url': reverse('api-cancel-booking', kwargs={'booking_pk': new_booking.id})
}
}
if new_booking.in_waiting_list:
response['api']['accept_url'] = reverse('api-accept-booking',
kwargs={'booking_pk': new_booking.id})
return Response(response)
fillslot = Fillslot.as_view()

View File

@ -202,6 +202,8 @@ def test_booking_api(app, some_data, user):
resp = app.post('/api/agenda/%s/fillslot/%s/' % (agenda.slug, event.id))
Booking.objects.get(id=resp.json['booking_id'])
assert resp.json['datetime'] == event.start_datetime.isoformat().replace('+00:00', 'Z')
assert 'accept_url' not in resp.json['api']
assert 'cancel_url' in resp.json['api']
assert Booking.objects.count() == 1
resp = app.post('/api/agenda/%s/fillslot/%s/' % (agenda.id, event.id))
@ -317,6 +319,7 @@ def test_booking_cancellation_post_api(app, some_data, user):
resp = app.post('/api/agenda/%s/fillslot/%s/' % (agenda_id, event.id))
booking_id = resp.json['booking_id']
assert Booking.objects.count() == 1
assert urlparse.urlparse(resp.json['api']['cancel_url']).path == '/api/booking/%s/cancel/' % booking_id
resp = app.post('/api/booking/%s/cancel/' % booking_id)
assert Booking.objects.filter(cancellation_datetime__isnull=False).count() == 1
@ -438,6 +441,8 @@ def test_waiting_list_booking(app, some_data, user):
resp = app.post('/api/agenda/%s/fillslot/%s/' % (agenda_id, event.id), status=200)
assert resp.json['err'] == 0
assert resp.json['in_waiting_list'] is True
assert 'accept_url' in resp.json['api']
assert 'cancel_url' in resp.json['api']
# cancel a booking that was not on the waiting list
booking = Booking.objects.filter(event=event, in_waiting_list=False)[0]