Projet

Général

Profil

0001-api-complete-slot_status-endpoint-result-48877.patch

Lauréline Guérin, 03 décembre 2020 16:15

Télécharger (5,23 ko)

Voir les différences:

Subject: [PATCH] api: complete slot_status endpoint result (#48877)

 chrono/api/views.py | 73 ++++++++++++++++++++++-----------------------
 tests/test_api.py   | 17 +++++++++++
 2 files changed, 53 insertions(+), 37 deletions(-)
chrono/api/views.py
363 363
    return places
364 364

  
365 365

  
366
def get_event_detail(request, event, agenda=None):
367
    agenda = agenda or event.agenda
368
    return {
369
        'id': event.slug,
370
        'slug': event.slug,  # kept for compatibility
371
        'text': force_text(event),
372
        'datetime': format_response_datetime(event.start_datetime),
373
        'description': event.description,
374
        'pricing': event.pricing,
375
        'url': event.url,
376
        'disabled': bool(event.full),
377
        'api': {
378
            'bookings_url': request.build_absolute_uri(
379
                reverse(
380
                    'api-event-bookings',
381
                    kwargs={'agenda_identifier': agenda.slug, 'event_identifier': event.slug},
382
                )
383
            ),
384
            'fillslot_url': request.build_absolute_uri(
385
                reverse(
386
                    'api-fillslot', kwargs={'agenda_identifier': agenda.slug, 'event_identifier': event.slug},
387
                )
388
            ),
389
            'status_url': request.build_absolute_uri(
390
                reverse(
391
                    'api-event-status',
392
                    kwargs={'agenda_identifier': agenda.slug, 'event_identifier': event.slug},
393
                )
394
            ),
395
        },
396
        'places': get_event_places(event),
397
    }
398

  
399

  
366 400
def get_resources_from_request(request, agenda):
367 401
    if agenda.kind != 'meetings' or 'resources' not in request.GET:
368 402
        return []
......
463 497
                )
464 498
            )
465 499

  
466
        response = {
467
            'data': [
468
                {
469
                    'id': x.slug,
470
                    'slug': x.slug,  # kept for compatibility
471
                    'text': force_text(x),
472
                    'datetime': format_response_datetime(x.start_datetime),
473
                    'description': x.description,
474
                    'pricing': x.pricing,
475
                    'url': x.url,
476
                    'disabled': bool(x.full),
477
                    'api': {
478
                        'bookings_url': request.build_absolute_uri(
479
                            reverse(
480
                                'api-event-bookings',
481
                                kwargs={'agenda_identifier': agenda.slug, 'event_identifier': x.slug},
482
                            )
483
                        ),
484
                        'fillslot_url': request.build_absolute_uri(
485
                            reverse(
486
                                'api-fillslot',
487
                                kwargs={'agenda_identifier': agenda.slug, 'event_identifier': x.slug},
488
                            )
489
                        ),
490
                        'status_url': request.build_absolute_uri(
491
                            reverse(
492
                                'api-event-status',
493
                                kwargs={'agenda_identifier': agenda.slug, 'event_identifier': x.slug},
494
                            )
495
                        ),
496
                    },
497
                    'places': get_event_places(x),
498
                }
499
                for x in entries
500
            ]
501
        }
500
        response = {'data': [get_event_detail(request, x, agenda=agenda) for x in entries]}
502 501
        return Response(response)
503 502

  
504 503

  
......
1438 1437
        event = self.get_object(agenda_identifier, event_identifier)
1439 1438
        response = {
1440 1439
            'err': 0,
1441
            'places': get_event_places(event),
1442 1440
        }
1441
        response.update(get_event_detail(request, event))
1443 1442
        return Response(response)
1444 1443

  
1445 1444

  
tests/test_api.py
1916 1916
    assert resp.json['places']['total'] == 10
1917 1917
    assert resp.json['places']['available'] == 9
1918 1918
    assert resp.json['places']['reserved'] == 1
1919
    assert resp.json == {
1920
        'err': 0,
1921
        'id': 'event-slug',
1922
        'slug': 'event-slug',
1923
        'text': str(event),
1924
        'datetime': localtime(event.start_datetime).strftime('%Y-%m-%d %H:%M:%S'),
1925
        'description': None,
1926
        'pricing': None,
1927
        'url': None,
1928
        'disabled': False,
1929
        'api': {
1930
            'bookings_url': 'http://testserver/api/agenda/foo-bar/bookings/event-slug/',
1931
            'fillslot_url': 'http://testserver/api/agenda/foo-bar/fillslot/event-slug/',
1932
            'status_url': 'http://testserver/api/agenda/foo-bar/status/event-slug/',
1933
        },
1934
        'places': {'available': 9, 'reserved': 1, 'total': 10, 'full': False, 'has_waiting_list': False},
1935
    }
1919 1936
    assert 'waiting_list_total' not in resp.json['places']
1920 1937

  
1921 1938
    Booking(event=event, in_waiting_list=True).save()
1922
-