Projet

Général

Profil

0001-api-return-slot-bookings-url-in-datetimes-api-44374.patch

Lauréline Guérin, 23 juin 2020 16:54

Télécharger (3,55 ko)

Voir les différences:

Subject: [PATCH] api: return slot-bookings url in datetimes api (#44374)

 chrono/api/views.py | 10 +++++++++-
 tests/test_api.py   | 30 +++++++++++++++++++++++++++---
 2 files changed, 36 insertions(+), 4 deletions(-)
chrono/api/views.py
421 421
                    'url': x.url,
422 422
                    'disabled': bool(x.full),
423 423
                    'api': {
424
                        'bookings_url': request.build_absolute_uri(
425
                            reverse(
426
                                'api-event-bookings',
427
                                kwargs={'agenda_identifier': agenda.slug, 'event_identifier': x.slug},
428
                            )
429
                        ),
424 430
                        'fillslot_url': request.build_absolute_uri(
425 431
                            reverse(
426 432
                                'api-fillslot',
......
1283 1289
    permission_classes = (permissions.IsAuthenticated,)
1284 1290

  
1285 1291
    def get_object(self, agenda_identifier, event_identifier):
1286
        return get_object_or_404(Event, slug=event_identifier, agenda__slug=agenda_identifier)
1292
        return get_object_or_404(
1293
            Event, slug=event_identifier, agenda__slug=agenda_identifier, agenda__kind='events'
1294
        )
1287 1295

  
1288 1296
    def get(self, request, agenda_identifier=None, event_identifier=None, format=None):
1289 1297
        if not request.GET.get('user_external_id'):
tests/test_api.py
354 354
    assert 'Hello world' in [x['text'] for x in resp.json['data']]
355 355

  
356 356

  
357
def test_datetime_api_status_url(app, some_data):
358
    agenda = Agenda.objects.get(label=u'Foo bar 2')
357
def test_datetime_api_urls(app):
358
    agenda = Agenda.objects.create(label='Foo bar', kind='events', minimal_booking_delay=0)
359
    event = Event.objects.create(
360
        slug='event-slug',
361
        start_datetime=(now() + datetime.timedelta(days=5)).replace(hour=10, minute=0),
362
        places=5,
363
        waiting_list_places=5,
364
        agenda=agenda,
365
    )
359 366
    resp = app.get('/api/agenda/%s/datetimes/' % agenda.slug)
360 367
    for datum in resp.json['data']:
368
        assert urlparse.urlparse(datum['api']['bookings_url']).path == '/api/agenda/%s/bookings/%s/' % (
369
            agenda.slug,
370
            event.slug,
371
        )
372
        assert urlparse.urlparse(datum['api']['fillslot_url']).path == '/api/agenda/%s/fillslot/%s/' % (
373
            agenda.slug,
374
            event.slug,
375
        )
361 376
        assert urlparse.urlparse(datum['api']['status_url']).path == '/api/agenda/%s/status/%s/' % (
362 377
            agenda.slug,
363
            datum['slug'],
378
            event.slug,
364 379
        )
365 380

  
366 381

  
......
1772 1787
    resp = app.get('/api/agenda/%s/bookings/%s/' % (agenda.slug, event.slug))
1773 1788
    assert resp.json['err'] == 1
1774 1789

  
1790
    # wrong kind
1791
    agenda.kind = 'meetings'
1792
    agenda.save()
1793
    resp = app.get(
1794
        '/api/agenda/%s/bookings/%s/' % (agenda.slug, event.slug),
1795
        params={'user_external_id': '42'},
1796
        status=404,
1797
    )
1798

  
1775 1799

  
1776 1800
def test_waiting_list_datetimes(app, some_data, user):
1777 1801
    agenda_id = Agenda.objects.filter(label=u'Foo bar')[0].id
1778
-