Skip to content

Commit ca07021

Browse files
committed
Add more extensive tests
1 parent 5bdd7c5 commit ca07021

File tree

1 file changed

+67
-9
lines changed

1 file changed

+67
-9
lines changed

test/cadet/jobs/autograder/utilities_test.exs

Lines changed: 67 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,18 +72,54 @@ defmodule Cadet.Autograder.UtilitiesTest do
7272
setup do
7373
course = insert(:course)
7474
config = insert(:assessment_config, %{course: course})
75-
assessment = insert(:assessment, %{is_published: true, course: course, config: config})
75+
76+
# Individual assessment
77+
assessment =
78+
insert(:assessment, %{
79+
is_published: true,
80+
course: course,
81+
config: config,
82+
max_team_size: 1
83+
})
84+
7685
students = insert_list(5, :course_registration, %{role: :student, course: course})
7786
insert(:course_registration, %{course: build(:course), role: :student})
78-
%{students: students, assessment: assessment}
87+
88+
# Team assessment
89+
team_assessment =
90+
insert(:assessment, %{
91+
is_published: true,
92+
course: course,
93+
config: config,
94+
max_team_size: 2
95+
})
96+
97+
team_member1 = insert(:team_member, %{student: Enum.at(students, 0)})
98+
team_member2 = insert(:team_member, %{student: Enum.at(students, 1)})
99+
100+
team1 =
101+
insert(:team, %{assessment: team_assessment, team_members: [team_member1, team_member2]})
102+
103+
team_member3 = insert(:team_member, %{student: Enum.at(students, 2)})
104+
team_member4 = insert(:team_member, %{student: Enum.at(students, 3)})
105+
106+
team2 =
107+
insert(:team, %{assessment: team_assessment, team_members: [team_member3, team_member4]})
108+
109+
%{
110+
individual: %{students: students, assessment: assessment},
111+
team: %{teams: [team1, team2], assessment: team_assessment, teamless: [Enum.at(students, 4)]}
112+
}
79113
end
80114

81-
test "it returns list of students with matching submissions", %{
82-
students: students,
83-
assessment: assessment
115+
test "it returns list of students with matching submissions for individual assessments", %{
116+
individual: %{students: students, assessment: assessment}
84117
} do
85118
submissions =
86-
Enum.map(students, &insert(:submission, %{assessment: assessment, student: &1}))
119+
Enum.map(
120+
students,
121+
&insert(:submission, %{assessment: assessment, student: &1, team: nil})
122+
)
87123

88124
expected = Enum.map(submissions, &%{student_id: &1.student_id, submission_id: &1.id})
89125

@@ -95,9 +131,8 @@ defmodule Cadet.Autograder.UtilitiesTest do
95131
assert results == expected
96132
end
97133

98-
test "it returns list of students with without matching submissions", %{
99-
students: students,
100-
assessment: assessment
134+
test "it returns list of students without matching submissions for individual assessments", %{
135+
individual: %{students: students, assessment: assessment}
101136
} do
102137
expected_student_ids = Enum.map(students, & &1.id)
103138

@@ -108,6 +143,29 @@ defmodule Cadet.Autograder.UtilitiesTest do
108143

109144
assert results |> Enum.map(& &1.submission) |> Enum.uniq() == [nil]
110145
end
146+
147+
test "it returns list of students both with and without matching submissions for team assessments", %{
148+
team: %{teams: teams, assessment: assessment, teamless: teamless}
149+
} do
150+
submissions =
151+
Enum.map(teams, &%{
152+
team_id: &1.id,
153+
submission: insert(:submission, %{assessment: assessment, team: &1, student: nil})
154+
})
155+
156+
expected = Enum.flat_map(teams, & &1.team_members) |> Enum.map(&%{
157+
student_id: &1.student_id,
158+
submission_id: Enum.find(submissions, fn s -> s.team_id == &1.team_id end).submission.id
159+
})
160+
expected = expected ++ Enum.map(teamless, &%{student_id: &1.id, submission_id: nil})
161+
162+
results =
163+
assessment.id
164+
|> Utilities.fetch_submissions(assessment.course_id)
165+
|> Enum.map(&%{student_id: &1.student_id, submission_id: (if &1.submission, do: &1.submission.id, else: nil)})
166+
167+
assert results == expected
168+
end
111169
end
112170

113171
defp get_assessments_ids(assessments) do

0 commit comments

Comments
 (0)