Projet

Général

Profil

0001-api-limit-accept-suspend-resize-endpoints-to-events-.patch

Lauréline Guérin, 25 mai 2020 10:32

Télécharger (6,35 ko)

Voir les différences:

Subject: [PATCH 1/5] api: limit accept/suspend/resize endpoints to events
 agenda (#43077)

 chrono/api/views.py |  8 +++---
 tests/test_api.py   | 66 +++++++++++++++++++++++++++++++++------------
 2 files changed, 53 insertions(+), 21 deletions(-)
chrono/api/views.py
884 884
            response['api']['accept_url'] = request.build_absolute_uri(
885 885
                reverse('api-accept-booking', kwargs={'booking_pk': primary_booking.id})
886 886
            )
887
        else:
887
        elif agenda.kind == 'events':
888 888
            response['api']['suspend_url'] = request.build_absolute_uri(
889 889
                reverse('api-suspend-booking', kwargs={'booking_pk': primary_booking.pk})
890 890
            )
......
994 994
    permission_classes = (permissions.IsAuthenticated,)
995 995

  
996 996
    def post(self, request, booking_pk=None, format=None):
997
        booking = get_object_or_404(Booking, id=booking_pk)
997
        booking = get_object_or_404(Booking, pk=booking_pk, event__agenda__kind='events')
998 998
        if booking.cancellation_datetime:
999 999
            response = {
1000 1000
                'err': 1,
......
1041 1041
    permission_classes = (permissions.IsAuthenticated,)
1042 1042

  
1043 1043
    def post(self, request, booking_pk=None, format=None):
1044
        booking = get_object_or_404(Booking, pk=booking_pk)
1044
        booking = get_object_or_404(Booking, pk=booking_pk, event__agenda__kind='events')
1045 1045
        if booking.cancellation_datetime:
1046 1046
            response = {
1047 1047
                'err': 1,
......
1102 1102
            )
1103 1103
        payload = serializer.validated_data
1104 1104

  
1105
        booking = get_object_or_404(Booking, pk=booking_pk)
1105
        booking = get_object_or_404(Booking, pk=booking_pk, event__agenda__kind='events')
1106 1106
        event = booking.event
1107 1107
        if booking.cancellation_datetime:
1108 1108
            response = {
tests/test_api.py
1457 1457
    assert secondary.cancellation_datetime is not None
1458 1458

  
1459 1459

  
1460
def test_accept_booking(app, some_data, user):
1461
    agenda_id = Agenda.objects.filter(label=u'Foo bar')[0].id
1462
    event = Event.objects.filter(agenda_id=agenda_id).exclude(start_datetime__lt=now())[0]
1463
    event.waiting_list_places = 5
1464
    event.save()
1460
def test_accept_booking(app, user):
1461
    agenda = Agenda.objects.create(kind='events')
1462
    event = Event.objects.create(agenda=agenda, start_datetime=now(), places=20, waiting_list_places=5)
1465 1463

  
1466 1464
    # create a booking on the waiting list
1467 1465
    primary = Booking.objects.create(event=event, in_waiting_list=True)
......
1513 1511
    assert resp.json['overbooked_places'] == 1
1514 1512

  
1515 1513

  
1516
def test_suspend_booking(app, some_data, user):
1517
    agenda_id = Agenda.objects.filter(label=u'Foo bar')[0].id
1518
    event = Event.objects.filter(agenda_id=agenda_id).exclude(start_datetime__lt=now())[0]
1519
    event.waiting_list_places = 5
1520
    event.save()
1514
def test_accept_booking_non_event_agenda(app, user):
1515
    app.authorization = ('Basic', ('john.doe', 'password'))
1516

  
1517
    agenda = Agenda.objects.create(kind='meetings')
1518
    event = Event.objects.create(agenda=agenda, start_datetime=now(), places=1)
1519
    booking = Booking.objects.create(event=event)
1520
    app.post('/api/booking/%s/accept/' % booking.pk, status=404)
1521

  
1522
    agenda.kind = 'virtual'
1523
    agenda.save()
1524
    app.post('/api/booking/%s/accept/' % booking.pk, status=404)
1525

  
1526

  
1527
def test_suspend_booking(app, user):
1528
    agenda = Agenda.objects.create(kind='events')
1529
    event = Event.objects.create(agenda=agenda, start_datetime=now(), places=20, waiting_list_places=5)
1521 1530

  
1522 1531
    # create a booking not on the waiting list
1523 1532
    primary = Booking.objects.create(event=event, in_waiting_list=False)
......
1554 1563
    assert primary.in_waiting_list is False
1555 1564

  
1556 1565

  
1557
def test_resize_booking(app, some_data, user):
1558
    agenda_id = Agenda.objects.filter(label=u'Foo bar')[0].id
1559
    event = Event.objects.filter(agenda_id=agenda_id).exclude(start_datetime__lt=now())[0]
1560
    event.places = 5
1561
    event.waiting_list_places = 5
1562
    event.save()
1563
    event2 = Event.objects.filter(agenda_id=agenda_id).exclude(start_datetime__lt=now())[1]
1566
def test_suspend_booking_non_event_agenda(app, user):
1567
    app.authorization = ('Basic', ('john.doe', 'password'))
1568

  
1569
    agenda = Agenda.objects.create(kind='meetings')
1570
    event = Event.objects.create(agenda=agenda, start_datetime=now(), places=1)
1571
    booking = Booking.objects.create(event=event)
1572
    app.post('/api/booking/%s/suspend/' % booking.pk, status=404)
1573

  
1574
    agenda.kind = 'virtual'
1575
    agenda.save()
1576
    app.post('/api/booking/%s/suspend/' % booking.pk, status=404)
1577

  
1578

  
1579
def test_resize_booking(app, user):
1580
    agenda = Agenda.objects.create(kind='events')
1581
    event = Event.objects.create(agenda=agenda, start_datetime=now(), places=5, waiting_list_places=5)
1582
    event2 = Event.objects.create(agenda=agenda, start_datetime=now(), places=20, waiting_list_places=0)
1564 1583

  
1565 1584
    # create a booking not on the waiting list
1566 1585
    primary = Booking.objects.create(event=event, in_waiting_list=False)
......
1671 1690
    assert resp.json['err'] == 1
1672 1691

  
1673 1692

  
1693
def test_resize_booking_non_event_agenda(app, user):
1694
    app.authorization = ('Basic', ('john.doe', 'password'))
1695

  
1696
    agenda = Agenda.objects.create(kind='meetings')
1697
    event = Event.objects.create(agenda=agenda, start_datetime=now(), places=1)
1698
    booking = Booking.objects.create(event=event)
1699
    app.post('/api/booking/%s/resize/' % booking.pk, params={'count': 42}, status=404)
1700

  
1701
    agenda.kind = 'virtual'
1702
    agenda.save()
1703
    app.post('/api/booking/%s/resize/' % booking.pk, params={'count': 42}, status=404)
1704

  
1705

  
1674 1706
def test_multiple_booking_api(app, some_data, user):
1675 1707
    agenda = Agenda.objects.filter(label=u'Foo bar')[0]
1676 1708
    event = [x for x in Event.objects.filter(agenda=agenda) if x.in_bookable_period()][0]
1677
-