api: fix fillslot with user exclusion & cancelled bookings (#69859)

This commit is contained in:
Lauréline Guérin 2022-10-04 13:38:00 +02:00
parent f76bc34c30
commit af7ffbdae5
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 10 additions and 2 deletions

View File

@ -652,7 +652,9 @@ def get_events_from_slots(slots, request, agenda, payload):
if event.cancelled:
raise APIError(N_('event %s is cancelled'), event.slug, err_class='event is cancelled')
if exclude_user and user_external_id:
if event.booking_set.filter(user_external_id=user_external_id).exists():
if event.booking_set.filter(
user_external_id=user_external_id, cancellation_datetime__isnull=True
).exists():
raise APIError(
N_('event %s is already booked by user'),
event.slug,

View File

@ -349,7 +349,13 @@ def test_booking_api_exclude_slots(app, user):
assert resp.json['err'] == 1
assert resp.json['err_class'] == 'event is already booked by user'
resp = app.post('/api/agenda/%s/fillslot/%s/' % (agenda.slug, event.slug), params={'exclude_user': True})
assert resp.json['err'] == 0
assert resp.json['err'] == 0 # ok, no user_external_id
Booking.objects.update(cancellation_datetime=now())
resp = app.post(
'/api/agenda/%s/fillslot/%s/' % (agenda.slug, event.slug),
params={'user_external_id': '42', 'exclude_user': True},
)
assert resp.json['err'] == 0 # ok, existing bookings are cancelled
event.delete()