diff --git a/mod/quiz/tests/generator/lib.php b/mod/quiz/tests/generator/lib.php index ae5ca854196..2f3818d9b6a 100644 --- a/mod/quiz/tests/generator/lib.php +++ b/mod/quiz/tests/generator/lib.php @@ -183,6 +183,7 @@ class mod_quiz_generator extends testing_module_generator { public function create_override(array $data): void { global $DB; + // Validate. if (!isset($data['quiz'])) { throw new coding_exception('Must specify quiz (id) when creating a quiz override.'); } @@ -195,6 +196,10 @@ class mod_quiz_generator extends testing_module_generator { throw new coding_exception('Cannot specify both userid and groupid when creating a quiz override.'); } + // Create the override. $DB->insert_record('quiz_overrides', (object) $data); + + // Update any associated calendar events, if necessary. + quiz_update_events($DB->get_record('quiz', ['id' => $data['quiz']], '*', MUST_EXIST)); } } diff --git a/mod/quiz/tests/generator_test.php b/mod/quiz/tests/generator_test.php index 2de1d943872..6d8c0ead5e3 100644 --- a/mod/quiz/tests/generator_test.php +++ b/mod/quiz/tests/generator_test.php @@ -23,6 +23,7 @@ namespace mod_quiz; * @category phpunit * @copyright 2012 Matt Petro * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @covers \mod_quiz_generator */ class generator_test extends \advanced_testcase { public function test_generator() { @@ -32,7 +33,7 @@ class generator_test extends \advanced_testcase { $this->assertEquals(0, $DB->count_records('quiz')); - /** @var mod_quiz_generator $generator */ + /** @var \mod_quiz_generator $generator */ $generator = $this->getDataGenerator()->get_plugin_generator('mod_quiz'); $this->assertInstanceOf('mod_quiz_generator', $generator); $this->assertEquals('quiz', $generator->get_modulename()); @@ -54,4 +55,65 @@ class generator_test extends \advanced_testcase { $this->assertEqualsWithDelta($createtime, $DB->get_field('quiz', 'timecreated', ['id' => $cm->instance]), 2); } + + public function test_generating_a_user_override() { + $this->resetAfterTest(true); + + $generator = $this->getDataGenerator(); + $course = $generator->create_course(); + $user = $generator->create_user(); + $quiz = $generator->create_module('quiz', ['course' => $course->id]); + $generator->enrol_user($user->id, $course->id, 'student'); + + /** @var \mod_quiz_generator $quizgenerator */ + $quizgenerator = $generator->get_plugin_generator('mod_quiz'); + $quizgenerator->create_override([ + 'quiz' => $quiz->id, + 'userid' => $user->id, + 'timeclose' => strtotime('2022-10-20'), + ]); + + // Check the corresponding calendar event now exists. + $events = calendar_get_events(strtotime('2022-01-01'), + strtotime('2022-12-31'), $user->id, false, $course->id); + $this->assertCount(1, $events); + $event = reset($events); + $this->assertEquals($user->id, $event->userid); + $this->assertEquals(0, $event->groupid); + $this->assertEquals(0, $event->courseid); + $this->assertEquals('quiz', $event->modulename); + $this->assertEquals($quiz->id, $event->instance); + $this->assertEquals('close', $event->eventtype); + $this->assertEquals(strtotime('2022-10-20'), $event->timestart); + } + + public function test_generating_a_group_override() { + $this->resetAfterTest(true); + + $generator = $this->getDataGenerator(); + $course = $generator->create_course(); + $quiz = $generator->create_module('quiz', ['course' => $course->id]); + $group = $generator->create_group(['courseid' => $course->id]); + + /** @var \mod_quiz_generator $quizgenerator */ + $quizgenerator = $generator->get_plugin_generator('mod_quiz'); + $quizgenerator->create_override([ + 'quiz' => $quiz->id, + 'groupid' => $group->id, + 'timeclose' => strtotime('2022-10-20'), + ]); + + // Check the corresponding calendar event now exists. + $events = calendar_get_events(strtotime('2022-01-01'), + strtotime('2022-12-31'), false, $group->id, $course->id); + $this->assertCount(1, $events); + $event = reset($events); + $this->assertEquals(0, $event->userid); + $this->assertEquals($group->id, $event->groupid); + $this->assertEquals($course->id, $event->courseid); + $this->assertEquals('quiz', $event->modulename); + $this->assertEquals($quiz->id, $event->instance); + $this->assertEquals('close', $event->eventtype); + $this->assertEquals(strtotime('2022-10-20'), $event->timestart); + } }