@@ -616,47 +616,64 @@ public function test_update_overdue_attempts_refetches_attempts_before_processin
616616 $ this ->setAdminUser ();
617617
618618 $ course = $ this ->getDataGenerator ()->create_course ();
619- $ student = $ this ->getDataGenerator ()->create_user ();
619+ $ student1 = $ this ->getDataGenerator ()->create_user ();
620+ $ student2 = $ this ->getDataGenerator ()->create_user ();
620621 $ studentrole = $ DB ->get_record ('role ' , ['shortname ' => 'student ' ]);
621- $ this ->assertTrue (enrol_try_internal_enrol ($ course ->id , $ student ->id , $ studentrole ->id ));
622+ $ this ->assertTrue (enrol_try_internal_enrol ($ course ->id , $ student1 ->id , $ studentrole ->id ));
623+ $ this ->assertTrue (enrol_try_internal_enrol ($ course ->id , $ student2 ->id , $ studentrole ->id ));
622624
623625 $ quizgenerator = $ this ->getDataGenerator ()->get_plugin_generator ('mod_quiz ' );
626+ $ questiongenerator = $ this ->getDataGenerator ()->get_plugin_generator ('core_question ' );
624627
625628 $ quiz = $ quizgenerator ->create_instance ([
626629 'course ' => $ course ->id ,
627630 'overduehandling ' => 'autosubmit ' ,
628- 'timeclose ' => 2000 ,
629- 'timelimit ' => 60 ,
631+ 'timelimit ' => 1 ,
630632 ]);
631633
632- $ attemptid = $ DB ->insert_record ('quiz_attempts ' , [
633- 'quiz ' => $ quiz ->id ,
634- 'userid ' => $ student ->id ,
635- 'attempt ' => 1 ,
636- 'state ' => 'inprogress ' ,
637- 'timestart ' => 100 ,
638- 'timecheckstate ' => 0 ,
639- 'layout ' => '' ,
640- 'uniqueid ' => $ this ->usage_id ($ quiz ),
641- ]);
634+ $ category = $ questiongenerator ->create_question_category ();
635+ $ question = $ questiongenerator ->create_question ('truefalse ' , null , ['category ' => $ category ->id ]);
636+ $ quizobj = quiz_settings::create ($ quiz ->id );
637+ quiz_add_quiz_question ($ question ->id , $ quiz );
638+ $ quizobj ->get_grade_calculator ()->recompute_quiz_sumgrades ();
639+
640+ // Create one attempt that is already finished and one that cron should submit.
641+ $ this ->setUser ($ student1 );
642+ $ finishedattempt = $ quizgenerator ->create_attempt ($ quiz ->id , $ student1 ->id );
643+ $ finishedattemptid = $ finishedattempt ->id ;
644+
645+ $ this ->setUser ($ student2 );
646+ $ overdueattempt = $ quizgenerator ->create_attempt ($ quiz ->id , $ student2 ->id );
647+ $ overdueattemptid = $ overdueattempt ->id ;
642648
643- $ finishedtime = 1500 ;
649+ $ finishedtime = $ finishedattempt -> timestart + 10 ;
644650 $ DB ->update_record ('quiz_attempts ' , (object )[
645- 'id ' => $ attemptid ,
651+ 'id ' => $ finishedattemptid ,
646652 'state ' => 'finished ' ,
647653 'timemodified ' => $ finishedtime ,
648654 'timefinish ' => $ finishedtime ,
649655 'timecheckstate ' => null ,
650656 ]);
651657
652- $ attemptinfo = (object )[
653- 'id ' => $ attemptid ,
654- 'quiz ' => $ quiz ->id ,
655- 'usertimeclose ' => (int ) $ quiz ->timeclose ,
656- 'usertimelimit ' => (int ) $ quiz ->timelimit ,
658+ $ attemptsinfo = [
659+ (object )[
660+ 'id ' => $ finishedattemptid ,
661+ 'quiz ' => $ quiz ->id ,
662+ 'usertimeclose ' => 0 ,
663+ 'usertimelimit ' => 1 ,
664+ ],
665+ (object )[
666+ 'id ' => $ overdueattemptid ,
667+ 'quiz ' => $ quiz ->id ,
668+ 'usertimeclose ' => 0 ,
669+ 'usertimelimit ' => 1 ,
670+ ],
657671 ];
658672
659- $ recordset = new class ([$ attemptinfo ]) extends moodle_recordset {
673+ $ originaloverdueattempt = $ DB ->get_record ('quiz_attempts ' , ['id ' => $ overdueattemptid ]);
674+ $ this ->assertEquals ('inprogress ' , $ originaloverdueattempt ->state );
675+
676+ $ recordset = new class ($ attemptsinfo ) extends moodle_recordset {
660677 /** @var array */
661678 private array $ records ;
662679
@@ -718,6 +735,8 @@ public function close() {
718735 }
719736 };
720737
738+ $ this ->setAdminUser ();
739+
721740 $ overduetask = new class ($ recordset ) extends update_overdue_attempts {
722741 /** @var moodle_recordset */
723742 private moodle_recordset $ recordset ;
@@ -743,11 +762,17 @@ public function get_list_of_overdue_attempts(int $processto): moodle_recordset {
743762 }
744763 };
745764
746- $ overduetask ->update_all_overdue_attempts ($ finishedtime + 120 , 0 );
765+ $ timenow = $ overdueattempt ->timestart + 100 ;
766+ $ overduetask ->update_all_overdue_attempts ($ timenow , 0 );
767+
768+ $ latestfinishedattempt = $ DB ->get_record ('quiz_attempts ' , ['id ' => $ finishedattemptid ]);
769+ $ this ->assertEquals ($ finishedtime , $ latestfinishedattempt ->timefinish );
770+ $ this ->assertEquals ($ finishedtime , $ latestfinishedattempt ->timemodified );
771+ $ this ->assertEquals ('finished ' , $ latestfinishedattempt ->state );
747772
748- $ latestattempt = $ DB ->get_record ('quiz_attempts ' , ['id ' => $ attemptid ]);
749- $ this ->assertEquals ($ finishedtime , $ latestattempt -> timefinish );
750- $ this ->assertEquals ( $ finishedtime , $ latestattempt -> timemodified );
751- $ this ->assertEquals ( ' finished ' , $ latestattempt -> state );
773+ $ latestoverdueattempt = $ DB ->get_record ('quiz_attempts ' , ['id ' => $ overdueattemptid ]);
774+ $ this ->assertEquals (' finished ' , $ latestoverdueattempt -> state );
775+ $ this ->assertGreaterThan ( 0 , $ latestoverdueattempt -> timefinish );
776+ $ this ->assertNotEquals ( 0 , $ latestoverdueattempt -> timemodified );
752777 }
753778}
0 commit comments