api: return slot-bookings url in datetimes api (#44374)

This commit is contained in:
Lauréline Guérin 2020-06-23 16:53:20 +02:00
parent 549e64e4bb
commit ff939fc570
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 36 additions and 4 deletions

View File

@ -421,6 +421,12 @@ class Datetimes(APIView):
'url': x.url,
'disabled': bool(x.full),
'api': {
'bookings_url': request.build_absolute_uri(
reverse(
'api-event-bookings',
kwargs={'agenda_identifier': agenda.slug, 'event_identifier': x.slug},
)
),
'fillslot_url': request.build_absolute_uri(
reverse(
'api-fillslot',
@ -1322,7 +1328,9 @@ 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)
return get_object_or_404(
Event, slug=event_identifier, agenda__slug=agenda_identifier, agenda__kind='events'
)
def get(self, request, agenda_identifier=None, event_identifier=None, format=None):
if not request.GET.get('user_external_id'):

View File

@ -376,13 +376,28 @@ def test_datetime_api_label(app, some_data):
assert 'Hello world' in [x['text'] for x in resp.json['data']]
def test_datetime_api_status_url(app, some_data):
agenda = Agenda.objects.get(label=u'Foo bar 2')
def test_datetime_api_urls(app):
agenda = Agenda.objects.create(label='Foo bar', kind='events', minimal_booking_delay=0)
event = Event.objects.create(
slug='event-slug',
start_datetime=(now() + datetime.timedelta(days=5)).replace(hour=10, minute=0),
places=5,
waiting_list_places=5,
agenda=agenda,
)
resp = app.get('/api/agenda/%s/datetimes/' % agenda.slug)
for datum in resp.json['data']:
assert urlparse.urlparse(datum['api']['bookings_url']).path == '/api/agenda/%s/bookings/%s/' % (
agenda.slug,
event.slug,
)
assert urlparse.urlparse(datum['api']['fillslot_url']).path == '/api/agenda/%s/fillslot/%s/' % (
agenda.slug,
event.slug,
)
assert urlparse.urlparse(datum['api']['status_url']).path == '/api/agenda/%s/status/%s/' % (
agenda.slug,
datum['slug'],
event.slug,
)
@ -1794,6 +1809,15 @@ def test_bookings(app, user):
resp = app.get('/api/agenda/%s/bookings/%s/' % (agenda.slug, event.slug))
assert resp.json['err'] == 1
# wrong kind
agenda.kind = 'meetings'
agenda.save()
resp = app.get(
'/api/agenda/%s/bookings/%s/' % (agenda.slug, event.slug),
params={'user_external_id': '42'},
status=404,
)
def test_waiting_list_datetimes(app, some_data, user):
agenda_id = Agenda.objects.filter(label=u'Foo bar')[0].id