api: patch booking & user fields (#63913)

This commit is contained in:
Lauréline Guérin 2022-05-05 14:12:48 +02:00
parent 001af97db2
commit 3db7658f6e
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
3 changed files with 68 additions and 6 deletions

View File

@ -164,6 +164,10 @@ class BookingSerializer(serializers.ModelSerializer):
fields = [
'id',
'in_waiting_list',
'user_first_name',
'user_last_name',
'user_email',
'user_phone_number',
'user_was_present',
'user_absence_reason',
'user_presence_reason',

View File

@ -2419,13 +2419,24 @@ class BookingAPI(APIView):
self.booking.extra_data.update(extra_data)
self.booking.save()
if 'user_was_present' in request.data:
self.booking.secondary_booking_set.update(user_was_present=self.booking.user_was_present)
self.booking.event.set_is_checked()
secondary_bookings_update = {}
for key in [
'user_was_present',
'user_first_name',
'user_last_name',
'user_email',
'user_phone_number',
]:
if key in request.data:
secondary_bookings_update[key] = getattr(self.booking, key)
if 'user_absence_reason' in request.data or 'user_presence_reason' in request.data:
self.booking.secondary_booking_set.update(user_check_type=self.booking.user_check_type)
secondary_bookings_update['user_check_type'] = self.booking.user_check_type
if extra_data:
self.booking.secondary_booking_set.update(extra_data=self.booking.extra_data)
secondary_bookings_update['extra_data'] = self.booking.extra_data
if secondary_bookings_update:
self.booking.secondary_booking_set.update(**secondary_bookings_update)
if 'user_was_present' in request.data:
self.booking.event.set_is_checked()
response = {'err': 0, 'booking_id': self.booking.pk}
return Response(response)

View File

@ -145,6 +145,10 @@ def test_bookings_api(app, user):
{
'id': meetings_booking1.pk,
'in_waiting_list': False,
'user_first_name': '',
'user_last_name': '',
'user_email': '',
'user_phone_number': '',
'user_was_present': None,
'user_absence_reason': '',
'user_presence_reason': '',
@ -153,6 +157,10 @@ def test_bookings_api(app, user):
{
'id': events_booking1.pk,
'in_waiting_list': False,
'user_first_name': '',
'user_last_name': '',
'user_email': '',
'user_phone_number': '',
'user_was_present': None,
'user_absence_reason': '',
'user_presence_reason': '',
@ -162,6 +170,10 @@ def test_bookings_api(app, user):
{
'id': events_booking2.pk,
'in_waiting_list': False,
'user_first_name': '',
'user_last_name': '',
'user_email': '',
'user_phone_number': '',
'user_was_present': None,
'user_absence_reason': '',
'user_presence_reason': '',
@ -575,7 +587,7 @@ def test_booking_patch_api_present(app, user, flag):
app.patch_json('/api/booking/%s/' % booking.pk, params={'user_was_present': flag})
booking.refresh_from_db()
assert booking.user_was_present == flag
# all secondary bookings are upadted
# all secondary bookings are updated
assert list(booking.secondary_booking_set.values_list('user_was_present', flat=True)) == [flag, flag]
other_booking.refresh_from_db()
assert other_booking.user_was_present is None # not changed
@ -854,6 +866,41 @@ def test_booking_patch_api_both_reasons(app, user):
assert resp.json['err_desc'] == 'invalid payload'
def test_booking_patch_api_user_fields(app, user):
agenda = Agenda.objects.create(kind='events')
event = Event.objects.create(agenda=agenda, start_datetime=now(), places=10)
booking = Booking.objects.create(event=event)
# make secondary bookings
Booking.objects.create(event=event, primary_booking=booking)
Booking.objects.create(event=event, primary_booking=booking)
# and other booking
other_booking = Booking.objects.create(event=event)
app.authorization = ('Basic', ('john.doe', 'password'))
to_test = [
('user_first_name', 'fooo'),
('user_first_name', ''),
('user_last_name', 'baaaar'),
('user_last_name', ''),
('user_email', 'fooo@baaaar.com'),
('user_email', ''),
('user_phone_number', '0606'),
('user_phone_number', ''),
]
for key, value in to_test:
params = {
key: value,
}
app.patch_json('/api/booking/%s/' % booking.pk, params=params)
booking.refresh_from_db()
assert getattr(booking, key) == value
# all secondary bookings are updated
assert list(booking.secondary_booking_set.values_list(key, flat=True)) == [value, value]
other_booking.refresh_from_db()
assert getattr(other_booking, key) == '' # not changed
def test_booking_patch_api_extra_data(app, user):
agenda = Agenda.objects.create(kind='events')
event = Event.objects.create(agenda=agenda, start_datetime=now(), places=10)