@@ -296,4 +296,128 @@ public function test_quiz_is_overriden_calendar_event_group_override() {
296296
297297 $ this ->assertTrue (quiz_is_overriden_calendar_event ($ event ));
298298 }
299+
300+ /**
301+ * Test test_quiz_get_user_timeclose().
302+ */
303+ public function test_quiz_get_user_timeclose () {
304+ global $ DB ;
305+
306+ $ this ->resetAfterTest ();
307+ $ this ->setAdminUser ();
308+
309+ $ basetimestamp = time (); // The timestamp we will base the enddates on.
310+
311+ // Create generator, course and quizzes.
312+ $ student1 = $ this ->getDataGenerator ()->create_user ();
313+ $ student2 = $ this ->getDataGenerator ()->create_user ();
314+ $ teacher = $ this ->getDataGenerator ()->create_user ();
315+ $ course = $ this ->getDataGenerator ()->create_course ();
316+ $ quizgenerator = $ this ->getDataGenerator ()->get_plugin_generator ('mod_quiz ' );
317+
318+ // Both quizzes close in two hours.
319+ $ quiz1 = $ quizgenerator ->create_instance (array ('course ' => $ course ->id , 'timeclose ' => $ basetimestamp + 7200 ));
320+ $ quiz2 = $ quizgenerator ->create_instance (array ('course ' => $ course ->id , 'timeclose ' => $ basetimestamp + 7200 ));
321+ $ group1 = $ this ->getDataGenerator ()->create_group (array ('courseid ' => $ course ->id ));
322+ $ group2 = $ this ->getDataGenerator ()->create_group (array ('courseid ' => $ course ->id ));
323+
324+ $ student1id = $ student1 ->id ;
325+ $ student2id = $ student2 ->id ;
326+ $ teacherid = $ teacher ->id ;
327+
328+ // Users enrolments.
329+ $ studentrole = $ DB ->get_record ('role ' , array ('shortname ' => 'student ' ));
330+ $ teacherrole = $ DB ->get_record ('role ' , array ('shortname ' => 'editingteacher ' ));
331+ $ this ->getDataGenerator ()->enrol_user ($ student1id , $ course ->id , $ studentrole ->id , 'manual ' );
332+ $ this ->getDataGenerator ()->enrol_user ($ student2id , $ course ->id , $ studentrole ->id , 'manual ' );
333+ $ this ->getDataGenerator ()->enrol_user ($ teacherid , $ course ->id , $ teacherrole ->id , 'manual ' );
334+
335+ // Create groups.
336+ $ group1 = $ this ->getDataGenerator ()->create_group (array ('courseid ' => $ course ->id ));
337+ $ group2 = $ this ->getDataGenerator ()->create_group (array ('courseid ' => $ course ->id ));
338+ $ group1id = $ group1 ->id ;
339+ $ group2id = $ group2 ->id ;
340+ $ this ->getDataGenerator ()->create_group_member (array ('userid ' => $ student1id , 'groupid ' => $ group1id ));
341+ $ this ->getDataGenerator ()->create_group_member (array ('userid ' => $ student2id , 'groupid ' => $ group2id ));
342+
343+ // Group 1 gets an group override for quiz 1 to close in three hours.
344+ $ record1 = (object ) [
345+ 'quiz ' => $ quiz1 ->id ,
346+ 'groupid ' => $ group1id ,
347+ 'timeclose ' => $ basetimestamp + 10800 // In three hours.
348+ ];
349+ $ DB ->insert_record ('quiz_overrides ' , $ record1 );
350+
351+ // Let's test quiz 1 closes in three hours for user student 1 since member of group 1.
352+ // Quiz 2 closes in two hours.
353+ $ this ->setUser ($ student1id );
354+ $ params = new stdClass ();
355+
356+ $ comparearray = array ();
357+ $ object = new stdClass ();
358+ $ object ->id = $ quiz1 ->id ;
359+ $ object ->usertimeclose = $ basetimestamp + 10800 ; // The overriden timeclose for quiz 1.
360+ $ object ->usertimelimit = 0 ;
361+
362+ $ comparearray [$ quiz1 ->id ] = $ object ;
363+
364+ $ object = new stdClass ();
365+ $ object ->id = $ quiz2 ->id ;
366+ $ object ->usertimeclose = $ basetimestamp + 7200 ; // The unchanged timeclose for quiz 2.
367+ $ object ->usertimelimit = 0 ;
368+
369+ $ comparearray [$ quiz2 ->id ] = $ object ;
370+
371+ $ this ->assertEquals ($ comparearray , quiz_get_user_timeclose ($ course ->id ));
372+
373+ // User 2 gets an user override for quiz 1 to close in four hours.
374+ $ record2 = (object ) [
375+ 'quiz ' => $ quiz1 ->id ,
376+ 'userid ' => $ student2id ,
377+ 'timeclose ' => $ basetimestamp + 14400 // In four hours.
378+ ];
379+ $ DB ->insert_record ('quiz_overrides ' , $ record2 );
380+
381+ // Let's test quiz 1 closes in four hours for user student 2 since personally overriden.
382+ // Quiz 2 closes in two hours.
383+ $ this ->setUser ($ student2id );
384+
385+ $ comparearray = array ();
386+ $ object = new stdClass ();
387+ $ object ->id = $ quiz1 ->id ;
388+ $ object ->usertimeclose = $ basetimestamp + 14400 ; // The overriden timeclose for quiz 1.
389+ $ object ->usertimelimit = 0 ;
390+
391+ $ comparearray [$ quiz1 ->id ] = $ object ;
392+
393+ $ object = new stdClass ();
394+ $ object ->id = $ quiz2 ->id ;
395+ $ object ->usertimeclose = $ basetimestamp + 7200 ; // The unchanged timeclose for quiz 2.
396+ $ object ->usertimelimit = 0 ;
397+
398+ $ comparearray [$ quiz2 ->id ] = $ object ;
399+
400+ $ this ->assertEquals ($ comparearray , quiz_get_user_timeclose ($ course ->id ));
401+
402+ // Let's test a teacher sees the original times.
403+ // Quiz 1 and quiz 2 close in two hours.
404+ $ this ->setUser ($ teacherid );
405+
406+ $ comparearray = array ();
407+ $ object = new stdClass ();
408+ $ object ->id = $ quiz1 ->id ;
409+ $ object ->usertimeclose = $ basetimestamp + 7200 ; // The unchanged timeclose for quiz 1.
410+ $ object ->usertimelimit = 0 ;
411+
412+ $ comparearray [$ quiz1 ->id ] = $ object ;
413+
414+ $ object = new stdClass ();
415+ $ object ->id = $ quiz2 ->id ;
416+ $ object ->usertimeclose = $ basetimestamp + 7200 ; // The unchanged timeclose for quiz 2.
417+ $ object ->usertimelimit = 0 ;
418+
419+ $ comparearray [$ quiz2 ->id ] = $ object ;
420+
421+ $ this ->assertEquals ($ comparearray , quiz_get_user_timeclose ($ course ->id ));
422+ }
299423}
0 commit comments