Projet

Général

Profil

0002-api-return-specified-end_datetime-on-event-fillslots.patch

Nicolas Roche, 26 mai 2020 20:25

Télécharger (5 ko)

Voir les différences:

Subject: [PATCH 2/2] api: return specified end_datetime on event fillslots
 (#37352)

 chrono/api/views.py | 20 ++++++++++++--------
 tests/test_api.py   |  5 +++++
 2 files changed, 17 insertions(+), 8 deletions(-)
chrono/api/views.py
894 894
            response['desk'] = {'label': available_desk.label, 'slug': available_desk.slug}
895 895
        if to_cancel_booking:
896 896
            response['cancelled_booking_id'] = cancelled_booking_id
897 897
        if agenda.kind == 'events' and not multiple_booking:
898 898
            event = events[0]
899 899
            # event.full is not up to date, it might have been changed by previous new_booking.save().
900 900
            event.refresh_from_db()
901 901
            response['places'] = get_event_places(event)
902
            if event.stop_datetime:
903
                response['end_datetime'] = format_response_datetime(event.stop_datetime)
902 904
        if agenda.kind == 'events' and multiple_booking:
903
            response['events'] = [
904
                {
905
                    'slug': x.slug,
906
                    'text': str(x),
907
                    'datetime': format_response_datetime(x.start_datetime),
908
                    'description': x.description,
905
            response['events'] = []
906
            for event in events:
907
                event_response = {
908
                    'slug': event.slug,
909
                    'text': str(event),
910
                    'datetime': format_response_datetime(event.start_datetime),
911
                    'description': event.description,
909 912
                }
910
                for x in events
911
            ]
913
                if event.stop_datetime:
914
                    event_response['end_datetime'] = format_response_datetime(event.stop_datetime)
915
                response['events'].append(event_response)
912 916

  
913 917
        return Response(response)
914 918

  
915 919

  
916 920
fillslots = Fillslots.as_view()
917 921

  
918 922

  
919 923
class Fillslot(Fillslots):
tests/test_api.py
68 68
@pytest.fixture
69 69
def some_data(time_zone, mock_now):
70 70
    agenda = Agenda(label=u'Foo bar')
71 71
    agenda.save()
72 72
    first_date = localtime(now()).replace(hour=17, minute=0, second=0, microsecond=0)
73 73
    first_date += datetime.timedelta(days=1)
74 74
    for i in range(3):
75 75
        event = Event(start_datetime=first_date + datetime.timedelta(days=i), places=20, agenda=agenda)
76
        if i == 0:
77
            event.stop_datetime = event.start_datetime + datetime.timedelta(hours=2)
76 78
        event.save()
77 79

  
78 80
    agenda2 = Agenda(label=u'Foo bar 2')
79 81
    agenda2.save()
80 82
    first_date = localtime(now()).replace(hour=20, minute=0, second=0, microsecond=0)
81 83
    first_date += datetime.timedelta(days=1)
82 84
    for i in range(2):
83 85
        event = Event(start_datetime=first_date + datetime.timedelta(days=i), places=20, agenda=agenda2)
......
444 446
            agenda.slug,
445 447
            event.slug or event.id,
446 448
        )
447 449

  
448 450
    app.authorization = ('Basic', ('john.doe', 'password'))
449 451
    resp = app.post('/api/agenda/%s/fillslot/%s/' % (agenda.slug, event.id))
450 452
    Booking.objects.get(id=resp.json['booking_id'])
451 453
    assert resp.json['datetime'] == localtime(event.start_datetime).strftime('%Y-%m-%d %H:%M:%S')
454
    assert resp.json['end_datetime'] == localtime(event.stop_datetime).strftime('%Y-%m-%d %H:%M:%S')
452 455
    assert 'accept_url' not in resp.json['api']
453 456
    assert 'suspend_url' in resp.json['api']
454 457
    assert 'cancel_url' in resp.json['api']
455 458
    assert 'ics_url' in resp.json['api']
456 459
    assert urlparse.urlparse(resp.json['api']['suspend_url']).netloc
457 460
    assert urlparse.urlparse(resp.json['api']['cancel_url']).netloc
458 461
    assert urlparse.urlparse(resp.json['api']['ics_url']).netloc
459 462
    assert Booking.objects.count() == 1
......
758 761
    assert resp.json['err_class'] == 'invalid payload'
759 762
    assert resp.json['err_desc'] == 'invalid payload'
760 763

  
761 764
    slots_string_param = ','.join([str(e) for e in events_ids])
762 765
    resp = app.post_json('/api/agenda/%s/fillslots/' % agenda.slug, params={'slots': slots_string_param})
763 766
    primary_booking_id = resp.json['booking_id']
764 767
    Booking.objects.get(id=primary_booking_id)
765 768
    assert Booking.objects.count() == 3
769
    assert resp.json['events'][0]['end_datetime']
770
    assert not resp.json['events'][1].get('end_datetime')
766 771

  
767 772

  
768 773
def test_booking_api_meeting(app, meetings_agenda, user):
769 774
    agenda_id = meetings_agenda.slug
770 775
    meeting_type = MeetingType.objects.get(agenda=meetings_agenda)
771 776
    resp = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id)
772 777
    event_id = resp.json['data'][2]['id']
773 778
    assert urlparse.urlparse(
774
-