@@ -152,4 +152,128 @@ public function test_quiz_view() {
152
152
$ completiondata = $ completion ->get_data ($ cm );
153
153
$ this ->assertEquals (1 , $ completiondata ->completionstate );
154
154
}
155
+
156
+ /**
157
+ * Test test_quiz_get_user_timeclose().
158
+ */
159
+ public function test_quiz_get_user_timeclose () {
160
+ global $ DB ;
161
+
162
+ $ this ->resetAfterTest ();
163
+ $ this ->setAdminUser ();
164
+
165
+ $ basetimestamp = time (); // The timestamp we will base the enddates on.
166
+
167
+ // Create generator, course and quizzes.
168
+ $ student1 = $ this ->getDataGenerator ()->create_user ();
169
+ $ student2 = $ this ->getDataGenerator ()->create_user ();
170
+ $ teacher = $ this ->getDataGenerator ()->create_user ();
171
+ $ course = $ this ->getDataGenerator ()->create_course ();
172
+ $ quizgenerator = $ this ->getDataGenerator ()->get_plugin_generator ('mod_quiz ' );
173
+
174
+ // Both quizzes close in two hours.
175
+ $ quiz1 = $ quizgenerator ->create_instance (array ('course ' => $ course ->id , 'timeclose ' => $ basetimestamp + 7200 ));
176
+ $ quiz2 = $ quizgenerator ->create_instance (array ('course ' => $ course ->id , 'timeclose ' => $ basetimestamp + 7200 ));
177
+ $ group1 = $ this ->getDataGenerator ()->create_group (array ('courseid ' => $ course ->id ));
178
+ $ group2 = $ this ->getDataGenerator ()->create_group (array ('courseid ' => $ course ->id ));
179
+
180
+ $ student1id = $ student1 ->id ;
181
+ $ student2id = $ student2 ->id ;
182
+ $ teacherid = $ teacher ->id ;
183
+
184
+ // Users enrolments.
185
+ $ studentrole = $ DB ->get_record ('role ' , array ('shortname ' => 'student ' ));
186
+ $ teacherrole = $ DB ->get_record ('role ' , array ('shortname ' => 'editingteacher ' ));
187
+ $ this ->getDataGenerator ()->enrol_user ($ student1id , $ course ->id , $ studentrole ->id , 'manual ' );
188
+ $ this ->getDataGenerator ()->enrol_user ($ student2id , $ course ->id , $ studentrole ->id , 'manual ' );
189
+ $ this ->getDataGenerator ()->enrol_user ($ teacherid , $ course ->id , $ teacherrole ->id , 'manual ' );
190
+
191
+ // Create groups.
192
+ $ group1 = $ this ->getDataGenerator ()->create_group (array ('courseid ' => $ course ->id ));
193
+ $ group2 = $ this ->getDataGenerator ()->create_group (array ('courseid ' => $ course ->id ));
194
+ $ group1id = $ group1 ->id ;
195
+ $ group2id = $ group2 ->id ;
196
+ $ this ->getDataGenerator ()->create_group_member (array ('userid ' => $ student1id , 'groupid ' => $ group1id ));
197
+ $ this ->getDataGenerator ()->create_group_member (array ('userid ' => $ student2id , 'groupid ' => $ group2id ));
198
+
199
+ // Group 1 gets an group override for quiz 1 to close in three hours.
200
+ $ record1 = (object ) [
201
+ 'quiz ' => $ quiz1 ->id ,
202
+ 'groupid ' => $ group1id ,
203
+ 'timeclose ' => $ basetimestamp + 10800 // In three hours.
204
+ ];
205
+ $ DB ->insert_record ('quiz_overrides ' , $ record1 );
206
+
207
+ // Let's test quiz 1 closes in three hours for user student 1 since member of group 1.
208
+ // Quiz 2 closes in two hours.
209
+ $ this ->setUser ($ student1id );
210
+ $ params = new stdClass ();
211
+
212
+ $ comparearray = array ();
213
+ $ object = new stdClass ();
214
+ $ object ->id = $ quiz1 ->id ;
215
+ $ object ->usertimeclose = $ basetimestamp + 10800 ; // The overriden timeclose for quiz 1.
216
+ $ object ->usertimelimit = 0 ;
217
+
218
+ $ comparearray [$ quiz1 ->id ] = $ object ;
219
+
220
+ $ object = new stdClass ();
221
+ $ object ->id = $ quiz2 ->id ;
222
+ $ object ->usertimeclose = $ basetimestamp + 7200 ; // The unchanged timeclose for quiz 2.
223
+ $ object ->usertimelimit = 0 ;
224
+
225
+ $ comparearray [$ quiz2 ->id ] = $ object ;
226
+
227
+ $ this ->assertEquals ($ comparearray , quiz_get_user_timeclose ($ course ->id ));
228
+
229
+ // User 2 gets an user override for quiz 1 to close in four hours.
230
+ $ record2 = (object ) [
231
+ 'quiz ' => $ quiz1 ->id ,
232
+ 'userid ' => $ student2id ,
233
+ 'timeclose ' => $ basetimestamp + 14400 // In four hours.
234
+ ];
235
+ $ DB ->insert_record ('quiz_overrides ' , $ record2 );
236
+
237
+ // Let's test quiz 1 closes in four hours for user student 2 since personally overriden.
238
+ // Quiz 2 closes in two hours.
239
+ $ this ->setUser ($ student2id );
240
+
241
+ $ comparearray = array ();
242
+ $ object = new stdClass ();
243
+ $ object ->id = $ quiz1 ->id ;
244
+ $ object ->usertimeclose = $ basetimestamp + 14400 ; // The overriden timeclose for quiz 1.
245
+ $ object ->usertimelimit = 0 ;
246
+
247
+ $ comparearray [$ quiz1 ->id ] = $ object ;
248
+
249
+ $ object = new stdClass ();
250
+ $ object ->id = $ quiz2 ->id ;
251
+ $ object ->usertimeclose = $ basetimestamp + 7200 ; // The unchanged timeclose for quiz 2.
252
+ $ object ->usertimelimit = 0 ;
253
+
254
+ $ comparearray [$ quiz2 ->id ] = $ object ;
255
+
256
+ $ this ->assertEquals ($ comparearray , quiz_get_user_timeclose ($ course ->id ));
257
+
258
+ // Let's test a teacher sees the original times.
259
+ // Quiz 1 and quiz 2 close in two hours.
260
+ $ this ->setUser ($ teacherid );
261
+
262
+ $ comparearray = array ();
263
+ $ object = new stdClass ();
264
+ $ object ->id = $ quiz1 ->id ;
265
+ $ object ->usertimeclose = $ basetimestamp + 7200 ; // The unchanged timeclose for quiz 1.
266
+ $ object ->usertimelimit = 0 ;
267
+
268
+ $ comparearray [$ quiz1 ->id ] = $ object ;
269
+
270
+ $ object = new stdClass ();
271
+ $ object ->id = $ quiz2 ->id ;
272
+ $ object ->usertimeclose = $ basetimestamp + 7200 ; // The unchanged timeclose for quiz 2.
273
+ $ object ->usertimelimit = 0 ;
274
+
275
+ $ comparearray [$ quiz2 ->id ] = $ object ;
276
+
277
+ $ this ->assertEquals ($ comparearray , quiz_get_user_timeclose ($ course ->id ));
278
+ }
155
279
}
0 commit comments