api: hide check fields for bookings of meetings agendas (#69169)
gitea-wip/chrono/pipeline/pr-main This commit looks good
Details
gitea-wip/chrono/pipeline/pr-main This commit looks good
Details
This commit is contained in:
parent
e238bfc321
commit
ade248abf0
|
@ -230,17 +230,21 @@ class BookingSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
def to_representation(self, instance):
|
def to_representation(self, instance):
|
||||||
ret = super().to_representation(instance)
|
ret = super().to_representation(instance)
|
||||||
|
if self.instance.event.agenda.kind != 'events':
|
||||||
|
ret['desk'] = {
|
||||||
|
'slug': self.instance.event.desk.slug,
|
||||||
|
'label': self.instance.event.desk.label,
|
||||||
|
}
|
||||||
|
ret.pop('user_was_present', None)
|
||||||
|
ret.pop('user_absence_reason', None)
|
||||||
|
ret.pop('user_presence_reason', None)
|
||||||
|
else:
|
||||||
ret['user_absence_reason'] = (
|
ret['user_absence_reason'] = (
|
||||||
self.instance.user_check_type_slug if self.instance.user_was_present is False else None
|
self.instance.user_check_type_slug if self.instance.user_was_present is False else None
|
||||||
)
|
)
|
||||||
ret['user_presence_reason'] = (
|
ret['user_presence_reason'] = (
|
||||||
self.instance.user_check_type_slug if self.instance.user_was_present is True else None
|
self.instance.user_check_type_slug if self.instance.user_was_present is True else None
|
||||||
)
|
)
|
||||||
if self.instance.event.agenda.kind != 'events':
|
|
||||||
ret['desk'] = {
|
|
||||||
'slug': self.instance.event.desk.slug,
|
|
||||||
'label': self.instance.event.desk.label,
|
|
||||||
}
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def _validate_check_type(self, kind, value):
|
def _validate_check_type(self, kind, value):
|
||||||
|
|
|
@ -2538,6 +2538,13 @@ class BookingAPI(APIView):
|
||||||
if not serializer.is_valid():
|
if not serializer.is_valid():
|
||||||
raise APIErrorBadRequest(N_('invalid payload'), errors=serializer.errors, err=4)
|
raise APIErrorBadRequest(N_('invalid payload'), errors=serializer.errors, err=4)
|
||||||
|
|
||||||
|
if self.booking.event.agenda.kind != 'events' and (
|
||||||
|
'user_was_present' in request.data
|
||||||
|
or 'user_absence_reason' in request.data
|
||||||
|
or 'user_presence_reason' in request.data
|
||||||
|
):
|
||||||
|
raise APIErrorBadRequest(N_('can not set check fields for non events agenda'), err=7)
|
||||||
|
|
||||||
if (
|
if (
|
||||||
self.booking.event.checked
|
self.booking.event.checked
|
||||||
and self.booking.event.agenda.disable_check_update
|
and self.booking.event.agenda.disable_check_update
|
||||||
|
|
|
@ -154,9 +154,6 @@ def test_bookings_api(app, user):
|
||||||
'user_last_name': '',
|
'user_last_name': '',
|
||||||
'user_email': '',
|
'user_email': '',
|
||||||
'user_phone_number': '',
|
'user_phone_number': '',
|
||||||
'user_was_present': None,
|
|
||||||
'user_absence_reason': None,
|
|
||||||
'user_presence_reason': None,
|
|
||||||
'use_color_for': None,
|
'use_color_for': None,
|
||||||
'extra_data': None,
|
'extra_data': None,
|
||||||
'cancellation_datetime': None,
|
'cancellation_datetime': None,
|
||||||
|
@ -630,6 +627,12 @@ def test_booking_patch_api_present(app, user, flag):
|
||||||
resp = app.patch_json('/api/booking/%s/' % booking.pk)
|
resp = app.patch_json('/api/booking/%s/' % booking.pk)
|
||||||
assert resp.json['err'] == 0
|
assert resp.json['err'] == 0
|
||||||
|
|
||||||
|
agenda.kind = 'meetings'
|
||||||
|
agenda.save()
|
||||||
|
resp = app.patch_json('/api/booking/%s/' % booking.pk, params={'user_was_present': flag}, status=400)
|
||||||
|
assert resp.json['err'] == 7
|
||||||
|
assert resp.json['err_desc'] == 'can not set check fields for non events agenda'
|
||||||
|
|
||||||
|
|
||||||
@mock.patch('chrono.api.serializers.get_agenda_check_types')
|
@mock.patch('chrono.api.serializers.get_agenda_check_types')
|
||||||
def test_booking_patch_api_absence_reason(check_types, app, user):
|
def test_booking_patch_api_absence_reason(check_types, app, user):
|
||||||
|
@ -739,6 +742,14 @@ def test_booking_patch_api_absence_reason(check_types, app, user):
|
||||||
resp = app.patch_json('/api/booking/%s/' % booking.pk)
|
resp = app.patch_json('/api/booking/%s/' % booking.pk)
|
||||||
assert resp.json['err'] == 0
|
assert resp.json['err'] == 0
|
||||||
|
|
||||||
|
agenda.kind = 'meetings'
|
||||||
|
agenda.save()
|
||||||
|
resp = app.patch_json(
|
||||||
|
'/api/booking/%s/' % booking.pk, params={'user_absence_reason': 'foo-bar'}, status=400
|
||||||
|
)
|
||||||
|
assert resp.json['err'] == 7
|
||||||
|
assert resp.json['err_desc'] == 'can not set check fields for non events agenda'
|
||||||
|
|
||||||
|
|
||||||
@mock.patch('chrono.api.serializers.get_agenda_check_types')
|
@mock.patch('chrono.api.serializers.get_agenda_check_types')
|
||||||
def test_booking_patch_api_presence_reason(check_types, app, user):
|
def test_booking_patch_api_presence_reason(check_types, app, user):
|
||||||
|
@ -848,6 +859,14 @@ def test_booking_patch_api_presence_reason(check_types, app, user):
|
||||||
resp = app.patch_json('/api/booking/%s/' % booking.pk)
|
resp = app.patch_json('/api/booking/%s/' % booking.pk)
|
||||||
assert resp.json['err'] == 0
|
assert resp.json['err'] == 0
|
||||||
|
|
||||||
|
agenda.kind = 'meetings'
|
||||||
|
agenda.save()
|
||||||
|
resp = app.patch_json(
|
||||||
|
'/api/booking/%s/' % booking.pk, params={'user_presence_reason': 'foo-bar'}, status=400
|
||||||
|
)
|
||||||
|
assert resp.json['err'] == 7
|
||||||
|
assert resp.json['err_desc'] == 'can not set check fields for non events agenda'
|
||||||
|
|
||||||
|
|
||||||
def test_booking_patch_api_both_reasons(app, user):
|
def test_booking_patch_api_both_reasons(app, user):
|
||||||
agenda = Agenda.objects.create(kind='events')
|
agenda = Agenda.objects.create(kind='events')
|
||||||
|
|
Loading…
Reference in New Issue