feat: enhance exam user status handling and add autosave verification in tests

This commit is contained in:
Ross
2026-06-29 11:49:43 +01:00
parent 12014fbb23
commit 077c858024
3 changed files with 30 additions and 3 deletions
+22 -2
View File
@@ -2639,13 +2639,27 @@ class ExamViews(View, LoginRequiredMixin):
return self.exam_user_status(request, pk, user_id=user_id)
def exam_user_status(self, request, pk, cid=None, user_id=None):
# TODO: add filtering by user / cid
exam = get_object_or_404(self.Exam, pk=pk)
# Restrict just to exam authors
if request.user not in exam.author.all():
raise PermissionDenied
# Robustly parse parameters from GET query string
get_cid = request.GET.get("cid")
get_user_id = request.GET.get("user_id")
if get_cid not in (None, "", "None"):
try:
cid = int(get_cid)
except ValueError:
pass
if get_user_id not in (None, "", "None"):
try:
user_id = int(get_user_id)
except ValueError:
pass
if cid is not None:
statuses = exam.exam_user_status.filter(cid_user_exam__cid_user__cid=cid)
elif user_id is not None:
@@ -3477,7 +3491,13 @@ class ExamViews(View, LoginRequiredMixin):
cid_user=c, start_time=t
)
in_progress = request.POST.get("in_progress") == "true"
if not in_progress:
if in_progress:
exam.exam_user_status.create(
cid_user_exam=cid_user_exam,
status="autosaved",
extra="autosaved {} answers".format(n),
)
else:
exam.exam_user_status.create(
cid_user_exam=cid_user_exam,
status="submitted",