From 9f09e25cdda83e96b4e33c172edee5255be44b9c Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 24 Jan 2024 16:05:47 +0100 Subject: [PATCH] MDL-80718 quiz: Apply overrides in mod_quiz_get_combined_review_options --- mod/quiz/classes/external.php | 2 + mod/quiz/tests/external/external_test.php | 77 +++++++++++++++++++++++ 2 files changed, 79 insertions(+) diff --git a/mod/quiz/classes/external.php b/mod/quiz/classes/external.php index 8cae72c1ce3f4..348236dd91ac1 100644 --- a/mod/quiz/classes/external.php +++ b/mod/quiz/classes/external.php @@ -636,6 +636,8 @@ public static function get_combined_review_options($quizid, $userid = 0) { require_capability('mod/quiz:viewreports', $context); } + // Update quiz with override information. + $quiz = quiz_update_effective_access($quiz, $params['userid']); $attempts = quiz_get_user_attempts($quiz->id, $user->id, 'all', true); $result = []; diff --git a/mod/quiz/tests/external/external_test.php b/mod/quiz/tests/external/external_test.php index 9c8cf01de6235..dfd7eca1bfd49 100644 --- a/mod/quiz/tests/external/external_test.php +++ b/mod/quiz/tests/external/external_test.php @@ -844,6 +844,83 @@ public function test_get_combined_review_options() { } } + /** + * Test get_combined_review_options when the user has an override. + * + * @covers ::get_combined_review_options + * @covers ::get_combined_review_options_parameters + * @covers ::get_combined_review_options_returns + */ + public function test_get_combined_review_options_with_overrides(): void { + global $DB; + + // Create a closed quiz with review marks only when quiz is closed. + list($quiz, $context, $quizobj) = $this->create_quiz_with_questions(true, true, 'deferredfeedback', false, [ + 'timeclose' => time() - HOURSECS, + 'marksduring' => 0, + 'marksimmediately' => 0, + 'marksopen' => 0, + 'marksclosed' => 1, + ]); + + // Check that the student can see the marks because the quiz is closed. + $this->setUser($this->student); + + $expected = [ + "someoptions" => [ + ["name" => "feedback", "value" => 1], + ["name" => "generalfeedback", "value" => 1], + ["name" => "rightanswer", "value" => 1], + ["name" => "overallfeedback", "value" => 1], + ["name" => "marks", "value" => 2], + ], + "alloptions" => [ + ["name" => "feedback", "value" => 1], + ["name" => "generalfeedback", "value" => 1], + ["name" => "rightanswer", "value" => 1], + ["name" => "overallfeedback", "value" => 1], + ["name" => "marks", "value" => 2], + ], + "warnings" => [], + ]; + + $result = mod_quiz_external::get_combined_review_options($quiz->id); + $result = external_api::clean_returnvalue(mod_quiz_external::get_combined_review_options_returns(), $result); + + $this->assertEquals($expected, $result); + + // Add an override for the student to increase the close time. + $DB->insert_record('quiz_overrides', [ + 'quiz' => $quiz->id, + 'userid' => $this->student->id, + 'timeclose' => time() + HOURSECS, + ]); + + // Check that now the marks option has changed. + $expected = [ + "someoptions" => [ + ["name" => "feedback", "value" => 1], + ["name" => "generalfeedback", "value" => 1], + ["name" => "rightanswer", "value" => 1], + ["name" => "overallfeedback", "value" => 1], + ["name" => "marks", "value" => 1], + ], + "alloptions" => [ + ["name" => "feedback", "value" => 1], + ["name" => "generalfeedback", "value" => 1], + ["name" => "rightanswer", "value" => 1], + ["name" => "overallfeedback", "value" => 1], + ["name" => "marks", "value" => 1], + ], + "warnings" => [], + ]; + + $result = mod_quiz_external::get_combined_review_options($quiz->id); + $result = external_api::clean_returnvalue(mod_quiz_external::get_combined_review_options_returns(), $result); + + $this->assertEquals($expected, $result); + } + /** * Test start_attempt */