api: include meeting types endpoints in /agenda/ API (#16448)

This commit is contained in:
Frédéric Péters 2017-06-10 15:52:40 +02:00
parent d46adc81c0
commit 678b297adf
2 changed files with 32 additions and 15 deletions

View File

@ -32,18 +32,31 @@ from ..agendas.models import Agenda, Event, Booking, MeetingType, TimePeriod
class Agendas(GenericAPIView):
permission_classes = ()
def get(self, request, agenda_identifier=None, format=None):
response = {'data': [{
'id': x.id,
'slug': x.slug,
'api': {
'datetimes_url': request.build_absolute_uri(
reverse('api-agenda-datetimes',
kwargs={'agenda_identifier': x.slug})),
},
'text': x.label}
for x in Agenda.objects.all().order_by('label')]}
return Response(response)
def get(self, request, format=None):
agendas = []
for agenda in Agenda.objects.all().order_by('label'):
agenda_data = {
'id': agenda.id,
'slug': agenda.slug,
'text': agenda.label,
'kind': agenda.kind,
}
if agenda.kind == 'events':
agenda_data['api'] = {
'datetimes_url': request.build_absolute_uri(
reverse('api-agenda-datetimes',
kwargs={'agenda_identifier': agenda.slug}))
}
elif agenda.kind == 'meetings':
agenda_data['api'] = {
'meetings_url': request.build_absolute_uri(
reverse('api-agenda-meetings',
kwargs={'agenda_identifier': agenda.slug}))
}
agendas.append(agenda_data)
return Response({'data': agendas})
agendas = Agendas.as_view()

View File

@ -84,14 +84,18 @@ def meetings_agenda(time_zone, mock_now):
time_period.save()
return agenda
def test_agendas_api(app, some_data):
def test_agendas_api(app, some_data, meetings_agenda):
agenda1 = Agenda.objects.filter(label=u'Foo bar')[0]
agenda2 = Agenda.objects.filter(label=u'Foo bar2')[0]
resp = app.get('/api/agenda/')
assert resp.json == {'data': [
{'text': 'Foo bar', 'id': agenda1.id, 'slug': u'foo-bar',
{'text': 'Foo bar', 'id': agenda1.id, 'slug': u'foo-bar', 'kind': 'events',
'api': {'datetimes_url': 'http://testserver/api/agenda/%s/datetimes/' % agenda1.slug}},
{'text': 'Foo bar2', 'id': agenda2.id, 'slug': u'foo-bar2',
{'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},
},
{'text': 'Foo bar2', 'id': agenda2.id, 'slug': u'foo-bar2', 'kind': 'events',
'api': {'datetimes_url': 'http://testserver/api/agenda/%s/datetimes/' % agenda2.slug}}
]}