diff --git a/src/pretix/api/views/checkin.py b/src/pretix/api/views/checkin.py index a3e5e83849..59efe19f26 100644 --- a/src/pretix/api/views/checkin.py +++ b/src/pretix/api/views/checkin.py @@ -424,6 +424,7 @@ class CheckinListPositionViewSet(viewsets.ReadOnlyModelViewSet): forced=force, ) raw_barcode_for_checkin = None + from_revoked_secret = False try: queryset = self.get_queryset(ignore_status=True, ignore_products=True) @@ -499,6 +500,7 @@ class CheckinListPositionViewSet(viewsets.ReadOnlyModelViewSet): elif revoked_matches and force: op = revoked_matches[0].position raw_barcode_for_checkin = self.kwargs['pk'] + from_revoked_secret = True else: op = revoked_matches[0].position op.order.log_action('pretix.event.checkin.revoked', data={ @@ -550,7 +552,7 @@ class CheckinListPositionViewSet(viewsets.ReadOnlyModelViewSet): auth=self.request.auth, type=type, raw_barcode=raw_barcode_for_checkin, - from_revoked_secret=True, + from_revoked_secret=from_revoked_secret, ) except RequiredQuestionsError as e: return Response({ diff --git a/src/tests/api/test_checkin.py b/src/tests/api/test_checkin.py index d9d47eeaf0..def405da9d 100644 --- a/src/tests/api/test_checkin.py +++ b/src/tests/api/test_checkin.py @@ -805,6 +805,26 @@ def test_forced_multiple(token_client, organizer, clist, event, order): assert resp.data['status'] == 'ok' +@pytest.mark.django_db +def test_forced_flag_set_if_required(token_client, organizer, clist, event, order): + with scopes_disabled(): + p = order.positions.first() + resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( + organizer.slug, event.slug, clist.pk, p.pk + ), {'force': True}, format='json') + with scopes_disabled(): + assert not p.checkins.order_by('pk').last().forced + assert resp.status_code == 201 + assert resp.data['status'] == 'ok' + resp = token_client.post('/api/v1/organizers/{}/events/{}/checkinlists/{}/positions/{}/redeem/'.format( + organizer.slug, event.slug, clist.pk, p.pk + ), {'force': True}, format='json') + with scopes_disabled(): + assert p.checkins.order_by('pk').last().forced + assert resp.status_code == 201 + assert resp.data['status'] == 'ok' + + @pytest.mark.django_db def test_require_product(token_client, organizer, clist, event, order): with scopes_disabled():