feat: enhance exam user status handling and add autosave verification in tests
This commit is contained in:
+22
-2
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user