api: do not cancel past bookings in multiple events fillslots (#59778)
This commit is contained in:
parent
289bcd785f
commit
842d7629d8
|
@ -1693,6 +1693,7 @@ class EventsFillslots(APIView):
|
|||
events = self.get_events(request, payload)
|
||||
|
||||
already_booked_events = self.get_already_booked_events(user_external_id)
|
||||
already_booked_events = already_booked_events.filter(start_datetime__gt=now())
|
||||
if start_datetime:
|
||||
already_booked_events = already_booked_events.filter(start_datetime__gte=start_datetime)
|
||||
if end_datetime:
|
||||
|
|
|
@ -2715,6 +2715,49 @@ def test_api_events_fillslots_past_event(app, user):
|
|||
assert resp.json['err'] == 0
|
||||
|
||||
|
||||
@pytest.mark.freeze_time('2021-09-06 12:00')
|
||||
def test_api_events_fillslots_preserve_past_bookings(app, user, freezer):
|
||||
agenda = Agenda.objects.create(label='Foo bar', kind='events')
|
||||
event = Event.objects.create(
|
||||
label='Event', start_datetime=now() + datetime.timedelta(days=5), places=2, agenda=agenda
|
||||
)
|
||||
second_event = Event.objects.create(
|
||||
label='Event 2', start_datetime=now() + datetime.timedelta(days=10), places=2, agenda=agenda
|
||||
)
|
||||
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
fillslots_url = '/api/agenda/%s/events/fillslots/' % agenda.slug
|
||||
params = {'user_external_id': 'user_id', 'slots': 'event,event-2'}
|
||||
resp = app.post_json(fillslots_url, params=params)
|
||||
assert resp.json['booking_count'] == 2
|
||||
assert resp.json['cancelled_booking_count'] == 0
|
||||
|
||||
# book only second event while first event is in the past
|
||||
freezer.move_to('2021-09-12')
|
||||
params = {'user_external_id': 'user_id', 'slots': 'event-2'}
|
||||
resp = app.post_json(fillslots_url, params=params)
|
||||
assert resp.json['booking_count'] == 0
|
||||
assert resp.json['cancelled_booking_count'] == 0
|
||||
assert event.booking_set.count() == 1
|
||||
assert second_event.booking_set.count() == 1
|
||||
|
||||
# do the same with multiple agendas API
|
||||
params = {'user_external_id': 'user_id', 'slots': 'foo-bar@event-2'}
|
||||
resp = app.post_json('/api/agendas/events/fillslots/?agendas=foo-bar', params=params)
|
||||
assert resp.json['booking_count'] == 0
|
||||
assert resp.json['cancelled_booking_count'] == 0
|
||||
assert event.booking_set.count() == 1
|
||||
assert second_event.booking_set.count() == 1
|
||||
|
||||
# cancel all future bookings
|
||||
params = {'user_external_id': 'user_id', 'slots': ''}
|
||||
resp = app.post_json(fillslots_url, params=params)
|
||||
assert resp.json['booking_count'] == 0
|
||||
assert resp.json['cancelled_booking_count'] == 1
|
||||
assert event.booking_set.count() == 1
|
||||
assert second_event.booking_set.count() == 0
|
||||
|
||||
|
||||
@pytest.mark.freeze_time('2021-09-06 12:00')
|
||||
def test_api_events_fillslots_multiple_agendas(app, user):
|
||||
first_agenda = Agenda.objects.create(label='First agenda', kind='events')
|
||||
|
|
Loading…
Reference in New Issue