Skip to content

Commit 6d33c09

Browse files
authored
fix: Fix autopublish grading by auto grader (#1188)
* fix: Fix autopublish grading by auto grader * feat: Implement tests for autopublishing
1 parent 85a3c1e commit 6d33c09

File tree

2 files changed

+52
-2
lines changed

2 files changed

+52
-2
lines changed

lib/cadet/jobs/autograder/result_store_worker.ex

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,10 @@ defmodule Cadet.Autograder.ResultStoreWorker do
9393
assessment = Repo.get(Assessment, submission.assessment_id)
9494
assessment_config = Repo.get_by(AssessmentConfig, id: assessment.config_id)
9595
is_grading_auto_published = assessment_config.is_grading_auto_published
96+
is_manually_graded = assessment_config.is_manually_graded
9697

97-
if Assessments.is_fully_autograded?(submission_id) and is_grading_auto_published do
98+
if Assessments.is_fully_autograded?(submission_id) and is_grading_auto_published and
99+
not is_manually_graded do
98100
Assessments.publish_grading(submission_id)
99101
end
100102

test/cadet/jobs/autograder/result_store_worker_test.exs

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,55 @@ defmodule Cadet.Autograder.ResultStoreWorkerTest do
7272
end
7373

7474
describe "#perform, valid answer_id" do
75-
test "before manual grading and grading auto published", %{answer: answer, results: results} do
75+
test "before manual grading, grading auto published and manual grading required", %{
76+
answer: answer,
77+
results: results
78+
} do
79+
for result <- results do
80+
ResultStoreWorker.perform(%{answer_id: answer.id, result: result})
81+
82+
answer =
83+
Answer
84+
|> join(:inner, [a], q in assoc(a, :question))
85+
|> preload([_, q], question: q)
86+
|> Repo.get(answer.id)
87+
88+
errors_string_keys =
89+
Enum.map(result.result, fn err ->
90+
Enum.reduce(err, %{}, fn {k, v}, acc ->
91+
Map.put(acc, "#{k}", v)
92+
end)
93+
end)
94+
95+
if result.max_score == 0 do
96+
assert answer.xp == 0
97+
else
98+
assert answer.xp ==
99+
Integer.floor_div(
100+
answer.question.max_xp * result.score,
101+
result.max_score
102+
)
103+
end
104+
105+
submission = Repo.get(Submission, answer.submission_id)
106+
107+
assert submission.is_grading_published == false
108+
assert answer.autograding_status == result.status
109+
assert answer.autograding_results == errors_string_keys
110+
end
111+
end
112+
113+
test "before manual grading, grading auto published and manual grading not required", %{
114+
results: results
115+
} do
116+
assessment_config =
117+
insert(:assessment_config, %{is_grading_auto_published: true, is_manually_graded: false})
118+
119+
assessment = insert(:assessment, %{config: assessment_config})
120+
question = insert(:question, %{assessment: assessment})
121+
submission = insert(:submission, %{status: :submitted, assessment: assessment})
122+
answer = insert(:answer, %{question: question, submission: submission})
123+
76124
for result <- results do
77125
ResultStoreWorker.perform(%{answer_id: answer.id, result: result})
78126

0 commit comments

Comments
 (0)