0002-api-return-places-info-on-fillslot-api-for-an-event-.patch
chrono/api/views.py | ||
---|---|---|
124 | 124 |
return agenda_detail |
125 | 125 | |
126 | 126 | |
127 |
def get_event_places(event): |
|
128 |
places = { |
|
129 |
'total': event.places, |
|
130 |
'reserved': event.booked_places, |
|
131 |
'available': event.places - event.booked_places, |
|
132 |
} |
|
133 |
if event.waiting_list_places: |
|
134 |
places['waiting_list_total'] = event.waiting_list_places |
|
135 |
places['waiting_list_reserved'] = event.waiting_list |
|
136 |
places['waiting_list_available'] = (event.waiting_list_places - event.waiting_list) |
|
137 |
return places |
|
138 | ||
139 | ||
127 | 140 |
class Agendas(APIView): |
128 | 141 |
permission_classes = () |
129 | 142 | |
... | ... | |
338 | 351 |
format=format) |
339 | 352 | |
340 | 353 |
def fillslot(self, request, agenda_identifier=None, slots=[], format=None): |
354 |
multiple_booking = not slots |
|
341 | 355 |
try: |
342 | 356 |
agenda = Agenda.objects.get(slug=agenda_identifier) |
343 | 357 |
except Agenda.DoesNotExist: |
... | ... | |
529 | 543 |
'slug': available_desk.slug} |
530 | 544 |
if to_cancel_booking: |
531 | 545 |
response['cancelled_booking_id'] = cancelled_booking_id |
546 |
if agenda.kind == 'events' and not multiple_booking: |
|
547 |
event = events[0] |
|
548 |
response['places'] = get_event_places(event) |
|
532 | 549 | |
533 | 550 |
return Response(response) |
534 | 551 | |
... | ... | |
614 | 631 |
event = get_object_or_404(Event, id=event_pk) |
615 | 632 |
response = { |
616 | 633 |
'err': 0, |
617 |
'places': { |
|
618 |
'total': event.places, |
|
619 |
'reserved': event.booked_places, |
|
620 |
'available': event.places - event.booked_places, |
|
621 |
} |
|
634 |
'places': get_event_places(event), |
|
622 | 635 |
} |
623 |
if event.waiting_list_places: |
|
624 |
response['places']['waiting_list_total'] = event.waiting_list_places |
|
625 |
response['places']['waiting_list_reserved'] = event.waiting_list |
|
626 |
response['places']['waiting_list_available'] = (event.waiting_list_places - event.waiting_list) |
|
627 | 636 |
return Response(response) |
628 | 637 | |
629 | 638 |
slot_status = SlotStatus.as_view() |
tests/test_api.py | ||
---|---|---|
736 | 736 |
assert Booking.objects.all()[0].extra_data == {'hello': 'world'} |
737 | 737 | |
738 | 738 | |
739 |
def test_booking_api_available(app, some_data, meetings_agenda, user): |
|
740 |
agenda = Agenda.objects.filter(label=u'Foo bar')[0] |
|
741 |
event = Event.objects.filter(agenda=agenda)[0] |
|
742 | ||
743 |
app.authorization = ('Basic', ('john.doe', 'password')) |
|
744 |
resp = app.post_json('/api/agenda/%s/fillslot/%s/' % (agenda.pk, event.pk)) |
|
745 |
assert resp.json['err'] == 0 |
|
746 |
assert resp.json['places']['total'] == 10 |
|
747 |
assert resp.json['places']['available'] == 9 |
|
748 |
assert resp.json['places']['reserved'] == 1 |
|
749 |
assert 'waiting_list_total' not in resp.json['places'] |
|
750 | ||
751 |
Booking.objects.create(event=event, in_waiting_list=True) |
|
752 |
event.waiting_list_places = 5 |
|
753 |
event.save() |
|
754 | ||
755 |
resp = app.post_json('/api/agenda/%s/fillslot/%s/' % (agenda.pk, event.pk)) |
|
756 |
assert resp.json['err'] == 0 |
|
757 |
assert resp.json['places']['total'] == 10 |
|
758 |
assert resp.json['places']['available'] == 9 |
|
759 |
assert resp.json['places']['reserved'] == 1 |
|
760 |
assert resp.json['places']['waiting_list_total'] == 5 |
|
761 |
assert resp.json['places']['waiting_list_available'] == 4 |
|
762 |
assert resp.json['places']['waiting_list_reserved'] == 1 |
|
763 | ||
764 |
# not for mettings agenda |
|
765 |
event = Event.objects.filter(agenda=meetings_agenda)[0] |
|
766 |
resp = app.post_json('/api/agenda/%s/fillslot/%s/' % (meetings_agenda.pk, event.pk)) |
|
767 |
assert resp.json['err'] == 0 |
|
768 |
assert 'places' not in resp.json |
|
769 | ||
770 |
# not for multiple booking |
|
771 |
events = [x for x in Event.objects.filter(agenda=agenda).order_by('start_datetime') if x.in_bookable_period()][:2] |
|
772 |
slots = [x.pk for x in events] |
|
773 | ||
774 |
resp = app.post('/api/agenda/%s/fillslots/' % agenda.slug, |
|
775 |
params={'slots': slots, 'count': '3'}) |
|
776 |
assert resp.json['err'] == 0 |
|
777 |
assert 'places' not in resp.json |
|
778 | ||
779 | ||
739 | 780 |
def test_booking_api_with_cancel_booking(app, some_data, user): |
740 | 781 |
agenda_id = Agenda.objects.filter(label=u'Foo bar')[0].id |
741 | 782 |
event_0, event_1, event_2, event_3 = Event.objects.filter(agenda_id=agenda_id)[0:4] |
742 |
- |