api: add endpoint to get list of meeting types (#13360)

This commit is contained in:
Frédéric Péters 2017-06-10 16:04:32 +02:00
parent 3775bb5b7d
commit 998b6575f8
3 changed files with 50 additions and 0 deletions

View File

@ -28,6 +28,8 @@ urlpatterns = [
url(r'agenda/meetings/(?P<meeting_identifier>[\w-]+)/datetimes/$',
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-]+)/meetings/(?P<meeting_identifier>[\w-]+)/datetimes/$',
views.meeting_datetimes, name='api-agenda-meeting-datetimes'),

View File

@ -155,6 +155,35 @@ class MeetingDatetimes(GenericAPIView):
meeting_datetimes = MeetingDatetimes.as_view()
class MeetingList(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')
meeting_types = []
for meeting_type in agenda.meetingtype_set.all():
meeting_types.append({
'text': meeting_type.label,
'id': meeting_type.slug,
'api': {
'datetimes_url': request.build_absolute_uri(
reverse('api-agenda-meeting-datetimes',
kwargs={'agenda_identifier': agenda.slug,
'meeting_identifier': meeting_type.slug})),
}
})
return Response({'data': meeting_types})
meeting_list = MeetingList.as_view()
class SlotSerializer(serializers.Serializer):
pass

View File

@ -95,6 +95,25 @@ def test_agendas_api(app, some_data):
'api': {'datetimes_url': 'http://testserver/api/agenda/%s/datetimes/' % agenda2.slug}}
]}
def test_agendas_meetingtypes_api(app, some_data, meetings_agenda):
resp = app.get('/api/agenda/%s/meetings/' % meetings_agenda.slug)
assert resp.json == {'data': [
{'text': 'Blah',
'id': 'blah',
'api': {
'datetimes_url': 'http://testserver/api/agenda/foo-bar-meeting/meetings/blah/datetimes/',
}
}
]}
# wrong kind
agenda1 = Agenda.objects.filter(label=u'Foo bar')[0]
resp = app.get('/api/agenda/%s/meetings/' % agenda1.slug, status=404)
# unknown
resp = app.get('/api/agenda/xxxx/meetings/', status=404)
def test_datetimes_api(app, some_data):
agenda = Agenda.objects.filter(label=u'Foo bar')[0]