Projet

Général

Profil

0001-api-get-meeting-by-slug-43526.patch

Valentin Deniaud, 17 juin 2020 17:50

Télécharger (3,84 ko)

Voir les différences:

Subject: [PATCH] api: get meeting by slug (#43526)

 chrono/api/urls.py  |  5 +++++
 chrono/api/views.py | 39 +++++++++++++++++++++++++++++++++++++++
 tests/test_api.py   | 22 ++++++++++++++++++++++
 3 files changed, 66 insertions(+)
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
-