api: flat extra_data in booking patch endpoint (#61074)
This commit is contained in:
parent
d1da2b5c95
commit
8be7358dee
|
@ -143,7 +143,7 @@ class BookingSerializer(serializers.ModelSerializer):
|
|||
class Meta:
|
||||
model = Booking
|
||||
fields = ['id', 'in_waiting_list', 'user_was_present', 'user_absence_reason', 'extra_data']
|
||||
read_only_fields = ['id', 'in_waiting_list']
|
||||
read_only_fields = ['id', 'in_waiting_list', 'extra_data']
|
||||
|
||||
def validate_user_absence_reason(self, value):
|
||||
if not value:
|
||||
|
|
|
@ -2089,18 +2089,19 @@ class BookingAPI(APIView):
|
|||
):
|
||||
raise APIErrorBadRequest(N_('event is marked as checked'), err=5)
|
||||
|
||||
if 'extra_data' in serializer.validated_data:
|
||||
extra_data = self.booking.extra_data or {}
|
||||
extra_data.update(serializer.validated_data['extra_data'] or {})
|
||||
serializer.validated_data['extra_data'] = extra_data
|
||||
|
||||
serializer.save()
|
||||
extra_data = {k: v for k, v in request.data.items() if k not in serializer.validated_data}
|
||||
if extra_data:
|
||||
self.booking.extra_data = self.booking.extra_data or {}
|
||||
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()
|
||||
if 'user_absence_reason' in request.data:
|
||||
self.booking.secondary_booking_set.update(user_absence_reason=self.booking.user_absence_reason)
|
||||
if 'extra_data' in request.data:
|
||||
if extra_data:
|
||||
self.booking.secondary_booking_set.update(extra_data=self.booking.extra_data)
|
||||
|
||||
response = {'err': 0, 'booking_id': self.booking.pk}
|
||||
|
|
|
@ -638,22 +638,22 @@ def test_booking_patch_api_extra_data(app, user):
|
|||
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
|
||||
app.patch_json('/api/booking/%s/' % booking.pk, params={'extra_data': {'foo': 'bar'}})
|
||||
app.patch_json('/api/booking/%s/' % booking.pk, params={'foo': 'bar'})
|
||||
booking.refresh_from_db()
|
||||
assert booking.user_was_present is True # not changed
|
||||
assert booking.extra_data == {'foo': 'bar'}
|
||||
|
||||
app.patch_json('/api/booking/%s/' % booking.pk, params={'extra_data': {'foo': 'baz'}})
|
||||
app.patch_json('/api/booking/%s/' % booking.pk, params={'foo': 'baz'})
|
||||
booking.refresh_from_db()
|
||||
assert booking.user_was_present is True # not changed
|
||||
assert booking.extra_data == {'foo': 'baz'}
|
||||
|
||||
app.patch_json('/api/booking/%s/' % booking.pk, params={'extra_data': {'foooo': 'bar'}})
|
||||
app.patch_json('/api/booking/%s/' % booking.pk, params={'foooo': 'bar'})
|
||||
booking.refresh_from_db()
|
||||
assert booking.user_was_present is True # not changed
|
||||
assert booking.extra_data == {'foo': 'baz', 'foooo': 'bar'}
|
||||
|
||||
app.patch_json('/api/booking/%s/' % booking.pk, params={'extra_data': {'foooo': 'baz', 'foo': None}})
|
||||
app.patch_json('/api/booking/%s/' % booking.pk, params={'foooo': 'baz', 'foo': None})
|
||||
booking.refresh_from_db()
|
||||
assert booking.user_was_present is True # not changed
|
||||
assert booking.extra_data == {'foo': None, 'foooo': 'baz'}
|
||||
|
@ -664,7 +664,7 @@ def test_booking_patch_api_extra_data(app, user):
|
|||
# and other booking
|
||||
other_booking = Booking.objects.create(event=event)
|
||||
|
||||
app.patch_json('/api/booking/%s/' % booking.pk, params={'extra_data': {'foooo': 'baz', 'foo': None}})
|
||||
app.patch_json('/api/booking/%s/' % booking.pk, params={'foooo': 'baz', 'foo': None})
|
||||
assert booking.user_was_present is True # not changed
|
||||
assert booking.extra_data == {'foo': None, 'foooo': 'baz'}
|
||||
# all secondary bookings are upadted
|
||||
|
@ -679,11 +679,7 @@ def test_booking_patch_api_extra_data(app, user):
|
|||
other_booking.refresh_from_db()
|
||||
assert other_booking.extra_data is None # not changed
|
||||
|
||||
app.patch_json('/api/booking/%s/' % booking.pk, params={'extra_data': None})
|
||||
booking.refresh_from_db()
|
||||
assert booking.user_was_present is True # not changed
|
||||
assert booking.extra_data == {'foo': None, 'foooo': 'baz'} # not changed
|
||||
app.patch_json('/api/booking/%s/' % booking.pk, params={'extra_data': {}})
|
||||
app.patch_json('/api/booking/%s/' % booking.pk, params={})
|
||||
booking.refresh_from_db()
|
||||
assert booking.user_was_present is True # not changed
|
||||
assert booking.extra_data == {'foo': None, 'foooo': 'baz'} # not changed
|
||||
|
|
Loading…
Reference in New Issue