@@ -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