api: patch booking & user fields (#63913)
This commit is contained in:
parent
001af97db2
commit
3db7658f6e
|
@ -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',
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue