0001-api-get-meeting-by-slug-43526.patch
chrono/api/urls.py | ||
---|---|---|
44 | 44 |
name='api-agenda-meeting-datetimes-legacy', |
45 | 45 |
), |
46 | 46 |
url(r'^agenda/(?P<agenda_identifier>[\w-]+)/meetings/$', views.meeting_list, name='api-agenda-meetings'), |
47 |
url( |
|
48 |
r'^agenda/(?P<agenda_identifier>[\w-]+)/meetings/(?P<meeting_identifier>[\w-]+)/$', |
|
49 |
views.meeting_info, |
|
50 |
name='api-agenda-meetings', |
|
51 |
), |
|
47 | 52 |
url(r'^agenda/(?P<agenda_identifier>[\w-]+)/desks/$', views.agenda_desk_list, name='api-agenda-desks'), |
48 | 53 |
url( |
49 | 54 |
r'^agenda/(?P<agenda_identifier>[\w-]+)/meetings/(?P<meeting_identifier>[\w-]+)/datetimes/$', |
chrono/api/views.py | ||
---|---|---|
571 | 571 |
meeting_list = MeetingList.as_view() |
572 | 572 | |
573 | 573 | |
574 |
class MeetingInfo(APIView): |
|
575 |
permission_classes = () |
|
576 | ||
577 |
def get(self, request, agenda_identifier=None, meeting_identifier=None, format=None): |
|
578 |
try: |
|
579 |
agenda = Agenda.objects.get(slug=agenda_identifier) |
|
580 |
except Agenda.DoesNotExist: |
|
581 |
raise Http404() |
|
582 |
if not agenda.accept_meetings(): |
|
583 |
raise Http404('agenda found, but it does not accept meetings') |
|
584 | ||
585 |
try: |
|
586 |
meeting_type = agenda.get_meetingtype(slug=meeting_identifier) |
|
587 |
except MeetingType.DoesNotExist: |
|
588 |
raise Http404() |
|
589 | ||
590 |
datetimes_url = request.build_absolute_uri( |
|
591 |
reverse( |
|
592 |
'api-agenda-meeting-datetimes', |
|
593 |
kwargs={'agenda_identifier': agenda.slug, 'meeting_identifier': meeting_type.slug}, |
|
594 |
) |
|
595 |
) |
|
596 |
return Response( |
|
597 |
{ |
|
598 |
'data': { |
|
599 |
'text': meeting_type.label, |
|
600 |
'id': meeting_type.slug, |
|
601 |
'duration': meeting_type.duration, |
|
602 |
'api': {'datetimes_url': datetimes_url}, |
|
603 |
} |
|
604 |
} |
|
605 |
) |
|
606 | ||
607 |
return Response({'data': meeting_types}) |
|
608 | ||
609 | ||
610 |
meeting_info = MeetingInfo.as_view() |
|
611 | ||
612 | ||
574 | 613 |
class AgendaDeskList(APIView): |
575 | 614 |
permission_classes = () |
576 | 615 |
tests/test_api.py | ||
---|---|---|
252 | 252 |
resp = app.get('/api/agenda/xxxx/meetings/', status=404) |
253 | 253 | |
254 | 254 | |
255 |
def test_agendas_meetingtype_api(app, some_data, meetings_agenda): |
|
256 |
resp = app.get('/api/agenda/%s/meetings/blah/' % meetings_agenda.slug) |
|
257 |
assert resp.json == { |
|
258 |
'data': { |
|
259 |
'text': 'Blah', |
|
260 |
'id': 'blah', |
|
261 |
'duration': 30, |
|
262 |
'api': { |
|
263 |
'datetimes_url': 'http://testserver/api/agenda/foo-bar-meeting/meetings/blah/datetimes/', |
|
264 |
}, |
|
265 |
} |
|
266 |
} |
|
267 | ||
268 |
# wrong kind |
|
269 |
agenda1 = Agenda.objects.filter(label=u'Foo bar')[0] |
|
270 |
resp = app.get('/api/agenda/%s/meetings/' % agenda1.slug, status=404) |
|
271 | ||
272 |
# unknown |
|
273 |
resp = app.get('/api/agenda/xxxx/meetings/', status=404) |
|
274 |
resp = app.get('/api/agenda/%s/meetings/xxxx/' % agenda1.slug, status=404) |
|
275 | ||
276 | ||
255 | 277 |
def test_agendas_desks_api(app, some_data, meetings_agenda): |
256 | 278 |
resp = app.get('/api/agenda/%s/desks/' % meetings_agenda.slug) |
257 | 279 |
assert resp.json == {'data': [{'text': 'Desk 1', 'id': 'desk-1',}]} |
258 |
- |