@@ -72,18 +72,58 @@ 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: % {
112+ teams: [ team1 , team2 ] ,
113+ assessment: team_assessment ,
114+ teamless: [ Enum . at ( students , 4 ) ]
115+ }
116+ }
79117 end
80118
81- test "it returns list of students with matching submissions" , % {
82- students: students ,
83- assessment: assessment
119+ test "it returns list of students with matching submissions for individual assessments" , % {
120+ individual: % { students: students , assessment: assessment }
84121 } do
85122 submissions =
86- Enum . map ( students , & insert ( :submission , % { assessment: assessment , student: & 1 } ) )
123+ Enum . map (
124+ students ,
125+ & insert ( :submission , % { assessment: assessment , student: & 1 , team: nil } )
126+ )
87127
88128 expected = Enum . map ( submissions , & % { student_id: & 1 . student_id , submission_id: & 1 . id } )
89129
@@ -95,9 +135,8 @@ defmodule Cadet.Autograder.UtilitiesTest do
95135 assert results == expected
96136 end
97137
98- test "it returns list of students with without matching submissions" , % {
99- students: students ,
100- assessment: assessment
138+ test "it returns list of students without matching submissions for individual assessments" , % {
139+ individual: % { students: students , assessment: assessment }
101140 } do
102141 expected_student_ids = Enum . map ( students , & & 1 . id )
103142
@@ -108,6 +147,45 @@ defmodule Cadet.Autograder.UtilitiesTest do
108147
109148 assert results |> Enum . map ( & & 1 . submission ) |> Enum . uniq ( ) == [ nil ]
110149 end
150+
151+ test "it returns list of students both with and without matching submissions for team assessments" ,
152+ % {
153+ team: % { teams: teams , assessment: assessment , teamless: teamless }
154+ } do
155+ submissions =
156+ Enum . map (
157+ teams ,
158+ & % {
159+ team_id: & 1 . id ,
160+ submission: insert ( :submission , % { assessment: assessment , team: & 1 , student: nil } )
161+ }
162+ )
163+
164+ expected =
165+ teams
166+ |> Enum . flat_map ( & & 1 . team_members )
167+ |> Enum . map (
168+ & % {
169+ student_id: & 1 . student_id ,
170+ submission_id:
171+ Enum . find ( submissions , fn s -> s . team_id == & 1 . team_id end ) . submission . id
172+ }
173+ )
174+
175+ expected = expected ++ Enum . map ( teamless , & % { student_id: & 1 . id , submission_id: nil } )
176+
177+ results =
178+ assessment . id
179+ |> Utilities . fetch_submissions ( assessment . course_id )
180+ |> Enum . map (
181+ & % {
182+ student_id: & 1 . student_id ,
183+ submission_id: if ( & 1 . submission , do: & 1 . submission . id , else: nil )
184+ }
185+ )
186+
187+ assert results == expected
188+ end
111189 end
112190
113191 defp get_assessments_ids ( assessments ) do
0 commit comments