Projet

Général

Profil

0002-api-return-end_datetime-on-booking-events-37352.patch

Nicolas Roche, 28 mai 2020 17:57

Télécharger (4,56 ko)

Voir les différences:

Subject: [PATCH 2/2] api: return end_datetime on booking events (#37352)

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

  
914 916
        return Response(response)
915 917

  
916 918

  
tests/test_api.py
67 67

  
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
        event = Event(start_datetime=first_date + datetime.timedelta(days=i), places=20, agenda=agenda)
75
        event = Event(start_datetime=first_date + datetime.timedelta(days=i), duration=i * 45,
76
                      places=20, agenda=agenda)
76 77
        event.save()
77 78

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

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

  
761 763
    slots_string_param = ','.join([str(e) for e in events_ids])
762 764
    resp = app.post_json('/api/agenda/%s/fillslots/' % agenda.slug, params={'slots': slots_string_param})
763 765
    primary_booking_id = resp.json['booking_id']
764 766
    Booking.objects.get(id=primary_booking_id)
765 767
    assert Booking.objects.count() == 3
768
    for idx, id in enumerate(events_ids):
769
        event = Event.objects.get(id=id)
770
        assert resp.json['events'][idx]['end_datetime'] == localtime(event.end_datetime).strftime('%Y-%m-%d %H:%M:%S')
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
-