From 3ac443b5c32ba6c4ffffa141ad128c7213896ec6 Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Mon, 14 Sep 2020 13:58:41 +0200 Subject: [PATCH] agendas: do not call cancel booking callback by default (#46612) --- chrono/agendas/management/commands/cancel_events.py | 2 +- chrono/agendas/models.py | 4 ++-- tests/test_api.py | 9 +++++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/chrono/agendas/management/commands/cancel_events.py b/chrono/agendas/management/commands/cancel_events.py index 537a53c..926634a 100644 --- a/chrono/agendas/management/commands/cancel_events.py +++ b/chrono/agendas/management/commands/cancel_events.py @@ -41,7 +41,7 @@ class Command(BaseCommand): bookings = [] for booking in event.booking_set.filter(cancellation_datetime__isnull=True).all(): try: - booking.cancel() + booking.cancel(trigger_callback=True) except RequestException as e: bookings.append(booking) errors[booking.pk] = str(e) diff --git a/chrono/agendas/models.py b/chrono/agendas/models.py index 3830845..fbec52e 100644 --- a/chrono/agendas/models.py +++ b/chrono/agendas/models.py @@ -984,7 +984,7 @@ class Event(models.Model): else: with transaction.atomic(): for booking in bookings_to_cancel: - booking.cancel(trigger_callback=False) + booking.cancel() self.cancelled = True self.save() @@ -1017,7 +1017,7 @@ class Booking(models.Model): if (self.event.full, self.event.almost_full) != initial_values: self.event.save() - def cancel(self, trigger_callback=True): + def cancel(self, trigger_callback=False): timestamp = now() with transaction.atomic(): self.secondary_booking_set.update(cancellation_datetime=timestamp) diff --git a/tests/test_api.py b/tests/test_api.py index 780dc9d..1df903d 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -1642,11 +1642,16 @@ def test_booking_cancellation_post_api(app, some_data, user): resp = app.post('/api/agenda/%s/fillslot/%s/' % (agenda.id, event.id), status=401) app.authorization = ('Basic', ('john.doe', 'password')) - resp = app.post('/api/agenda/%s/fillslot/%s/' % (agenda.id, event.id)) + resp = app.post( + '/api/agenda/%s/fillslot/%s/' % (agenda.id, event.id), + params={'cancel_callback_url': 'http://example.net/jump/trigger/',}, + ) booking_id = resp.json['booking_id'] assert Booking.objects.count() == 1 assert urlparse.urlparse(resp.json['api']['cancel_url']).path == '/api/booking/%s/cancel/' % booking_id - resp = app.post('/api/booking/%s/cancel/' % booking_id) + with mock.patch('chrono.agendas.models.requests.post') as mocked_post: + resp = app.post('/api/booking/%s/cancel/' % booking_id) + assert not mocked_post.called assert Booking.objects.filter(cancellation_datetime__isnull=False).count() == 1 # cancel an object that doesn't exist -- 2.20.1