api: add new API to get list of desks (#19069)

This commit is contained in:
Frédéric Péters 2017-10-07 11:33:47 +02:00
parent 8e55b43a2a
commit 169cc6a0ab
3 changed files with 41 additions and 1 deletions

View File

@ -31,6 +31,8 @@ urlpatterns = [
views.meeting_datetimes, name='api-agenda-meeting-datetimes-legacy'),
url(r'agenda/(?P<agenda_identifier>[\w-]+)/meetings/$',
views.meeting_list, name='api-agenda-meetings'),
url(r'agenda/(?P<agenda_identifier>[\w-]+)/desks/$',
views.agenda_desk_list, name='api-agenda-desks'),
url(r'agenda/(?P<agenda_identifier>[\w-]+)/meetings/(?P<meeting_identifier>[\w-]+)/datetimes/$',
views.meeting_datetimes, name='api-agenda-meeting-datetimes'),

View File

@ -104,6 +104,9 @@ def get_agenda_detail(request, agenda):
agenda_detail['api'] = {
'meetings_url': request.build_absolute_uri(
reverse('api-agenda-meetings',
kwargs={'agenda_identifier': agenda.slug})),
'desks_url': request.build_absolute_uri(
reverse('api-agenda-desks',
kwargs={'agenda_identifier': agenda.slug}))
}
@ -273,6 +276,23 @@ class MeetingList(GenericAPIView):
meeting_list = MeetingList.as_view()
class AgendaDeskList(GenericAPIView):
permission_classes = ()
def get(self, request, agenda_identifier=None, format=None):
try:
agenda = Agenda.objects.get(slug=agenda_identifier)
except Agenda.DoesNotExist:
raise Http404()
if agenda.kind != 'meetings':
raise Http404('agenda found, but it was not a meetings agenda')
desks = [{'id': x.slug, 'text': x.label} for x in agenda.desk_set.all()]
return Response({'data': desks})
agenda_desk_list = AgendaDeskList.as_view()
class SlotSerializer(serializers.Serializer):
pass

View File

@ -104,7 +104,9 @@ def test_agendas_api(app, some_data, meetings_agenda):
'api': {'datetimes_url': 'http://testserver/api/agenda/%s/datetimes/' % agenda1.slug}},
{'text': 'Foo bar Meeting', 'id': meetings_agenda.id, 'slug': u'foo-bar-meeting',
'kind': 'meetings',
'api': {'meetings_url': 'http://testserver/api/agenda/%s/meetings/' % meetings_agenda.slug},
'api': {'meetings_url': 'http://testserver/api/agenda/%s/meetings/' % meetings_agenda.slug,
'desks_url': 'http://testserver/api/agenda/%s/desks/' % meetings_agenda.slug,
},
},
{'text': 'Foo bar2', 'id': agenda2.id, 'slug': u'foo-bar2', 'kind': 'events',
'api': {'datetimes_url': 'http://testserver/api/agenda/%s/datetimes/' % agenda2.slug}}
@ -129,6 +131,22 @@ def test_agendas_meetingtypes_api(app, some_data, meetings_agenda):
resp = app.get('/api/agenda/xxxx/meetings/', status=404)
def test_agendas_desks_api(app, some_data, meetings_agenda):
resp = app.get('/api/agenda/%s/desks/' % meetings_agenda.slug)
assert resp.json == {'data': [
{'text': 'Desk 1',
'id': 'desk-1',
}
]}
# wrong kind
agenda1 = Agenda.objects.filter(label=u'Foo bar')[0]
resp = app.get('/api/agenda/%s/desks/' % agenda1.slug, status=404)
# unknown
resp = app.get('/api/agenda/xxxx/desks/', status=404)
def test_datetimes_api(app, some_data):
agenda = Agenda.objects.filter(label=u'Foo bar')[0]