Check-in: Fix handling of optional file questions (Z#23236493) (#6251)

This commit is contained in:
Raphael Michel
2026-06-08 14:25:50 +02:00
committed by GitHub
parent 93469d33e5
commit f16034d0cc
2 changed files with 25 additions and 1 deletions

View File

@@ -788,7 +788,10 @@ def _redeem_process(*, checkinlists, raw_barcode, answers_data, datetime, force,
if str(q.pk) in answers_data: if str(q.pk) in answers_data:
try: try:
if q.type == Question.TYPE_FILE: if q.type == Question.TYPE_FILE:
given_answers[q] = _handle_file_upload(answers_data[str(q.pk)], user, auth) if answers_data[str(q.pk)]:
given_answers[q] = _handle_file_upload(answers_data[str(q.pk)], user, auth)
else:
given_answers[q] = None
else: else:
given_answers[q] = q.clean_answer(answers_data[str(q.pk)]) given_answers[q] = q.clean_answer(answers_data[str(q.pk)])
except (ValidationError, BaseValidationError): except (ValidationError, BaseValidationError):

View File

@@ -1098,6 +1098,27 @@ def test_question_upload(token_client, organizer, clist, event, order, question)
assert order.positions.first().answers.get(question=question[0]).file assert order.positions.first().answers.get(question=question[0]).file
@pytest.mark.django_db
def test_question_upload_optional(token_client, organizer, clist, event, order, question):
with scopes_disabled():
p = order.positions.first()
question[0].type = 'F'
question[0].required = False
question[0].save()
resp = _redeem(token_client, organizer, clist, p.pk, {})
assert resp.status_code == 400
assert resp.data['status'] == 'incomplete'
with scopes_disabled():
assert resp.data['questions'] == [QuestionSerializer(question[0]).data]
resp = _redeem(token_client, organizer, clist, p.pk, {'answers': {question[0].pk: ""}})
assert resp.status_code == 201
assert resp.data['status'] == 'ok'
with scopes_disabled():
assert not order.positions.first().answers.filter(question=question[0]).exists()
@pytest.mark.django_db @pytest.mark.django_db
def test_store_failed(token_client, organizer, clist, event, order): def test_store_failed(token_client, organizer, clist, event, order):
with scopes_disabled(): with scopes_disabled():