From 8fdd44d35c9a6bc4cb6fd6a1950c055c804a1fd1 Mon Sep 17 00:00:00 2001 From: Tim Hunt Date: Mon, 5 Aug 2024 15:33:42 +0100 Subject: [PATCH 1/2] Add undeclared properties to unit test classes. --- tests/modules/turnitin_assign_test.php | 8 +++++++- tests/modules/turnitin_forum_test.php | 11 ++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/tests/modules/turnitin_assign_test.php b/tests/modules/turnitin_assign_test.php index 15e26956..2cf26160 100644 --- a/tests/modules/turnitin_assign_test.php +++ b/tests/modules/turnitin_assign_test.php @@ -35,6 +35,12 @@ */ class plagiarism_turnitin_assign_testcase extends advanced_testcase { + /** @var stdClass created in setUp. */ + protected $course; + + /** @var stdClass created in setUp. */ + protected $assign; + /** * Create a course and assignment module instance */ @@ -105,4 +111,4 @@ public function test_check_is_resubmission_allowed_maxfiles_above_threshold() { $resubmissionallowed = $moduleobject->is_resubmission_allowed($assign->id, 1, 'text_content', ASSIGN_ATTEMPT_REOPEN_METHOD_NONE); $this->assertTrue($resubmissionallowed); } -} \ No newline at end of file +} diff --git a/tests/modules/turnitin_forum_test.php b/tests/modules/turnitin_forum_test.php index ecf75451..e2058654 100644 --- a/tests/modules/turnitin_forum_test.php +++ b/tests/modules/turnitin_forum_test.php @@ -34,6 +34,15 @@ */ class plagiarism_turnitin_forum_testcase extends advanced_testcase { + /** @var stdClass created in setUp. */ + protected $forum; + + /** @var stdClass created in setUp. */ + protected $discussion; + + /** @var stdClass created in setUp. */ + protected $post; + /** * Create a course and forum module instance */ @@ -99,4 +108,4 @@ public function test_to_check_content_from_database_is_returned_by_set_content_i $this->assertEquals($content, $this->post->message); } -} \ No newline at end of file +} From c00e3438aa620df217805a827fd66e308f8b3be8 Mon Sep 17 00:00:00 2001 From: Tim Hunt Date: Mon, 5 Aug 2024 15:34:45 +0100 Subject: [PATCH 2/2] Support either older or Moodle 4.2+ quiz class names --- classes/modules/turnitin_quiz.class.php | 17 ++++++++++++++--- tests/modules/turnitin_quiz_test.php | 16 ++++++++++++---- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/classes/modules/turnitin_quiz.class.php b/classes/modules/turnitin_quiz.class.php index 059f03ef..ae4394b7 100644 --- a/classes/modules/turnitin_quiz.class.php +++ b/classes/modules/turnitin_quiz.class.php @@ -74,8 +74,13 @@ public function update_mark($attemptid, $identifier, $userid, $grade, $quizgrade global $DB; $transaction = $DB->start_delegated_transaction(); + if (class_exists('\mod_quiz\quiz_attempt')) { + $quizattemptclass = '\mod_quiz\quiz_attempt'; + } else { + $quizattemptclass = 'quiz_attempt'; + } - $attempt = quiz_attempt::create($attemptid); + $attempt = $quizattemptclass::create($attemptid); $quba = question_engine::load_questions_usage_by_activity($attempt->get_uniqueid()); // Loop through each question slot. @@ -101,9 +106,15 @@ public function update_mark($attemptid, $identifier, $userid, $grade, $quizgrade $update->sumgrades = $quba->get_total_mark(); $DB->update_record('quiz_attempts', $update); - quiz_save_best_grade($attempt->get_quiz(), $userid); + if (class_exists('\mod_quiz\grade_calculator')) { + // Support Moodle 4.3+. + $attempt->get_quizobj()->get_grade_calculator()->recompute_final_grade($userid); + } else { + // Support older Moodle versions. + quiz_save_best_grade($attempt->get_quiz(), $userid); + } $transaction->allow_commit(); } -} \ No newline at end of file +} diff --git a/tests/modules/turnitin_quiz_test.php b/tests/modules/turnitin_quiz_test.php index 78e8381e..3d1bc725 100644 --- a/tests/modules/turnitin_quiz_test.php +++ b/tests/modules/turnitin_quiz_test.php @@ -55,7 +55,15 @@ public function test_update_mark() { 'layout' => '1,0', ]); - $quizobj = quiz::create($quiz->id, $user->id); + if (class_exists('\mod_quiz\quiz_settings')) { + $quizsettingsclass = '\mod_quiz\quiz_settings'; + $quizattemptclass = '\mod_quiz\quiz_attempt'; + } else { + $quizsettingsclass = 'quiz'; + $quizattemptclass = 'quiz_attempt'; + } + + $quizobj = $quizsettingsclass::create($quiz->id, $user->id); $quba = question_engine::make_questions_usage_by_activity('mod_quiz', $quizobj->get_context()); $quba->set_preferred_behaviour($quizobj->get_quiz()->preferredbehaviour); @@ -69,11 +77,11 @@ public function test_update_mark() { $attempt = quiz_create_attempt($quizobj, 1, false, $timenow, false, $user->id); quiz_start_new_attempt($quizobj, $quba, $attempt, 1, $timenow); quiz_attempt_save_started($quizobj, $quba, $attempt); - $attemptobj = quiz_attempt::create($attempt->id); + $attemptobj = $quizattemptclass::create($attempt->id); $attemptobj->process_finish($timenow, false); // Expect no marks or grade for the attempt yet. - $attemptobj = quiz_attempt::create($attempt->id); + $attemptobj = $quizattemptclass::create($attempt->id); $this->assertEquals(0.0, $attemptobj->get_sum_marks()); $grade = quiz_get_best_grade($quiz, $user->id); $this->assertEquals(0.0, $grade); @@ -86,7 +94,7 @@ public function test_update_mark() { $tiiquiz->update_mark($attempt->id, $identifier, $user->id, 75, $quiz->grade); // Reload the attempt and check the total marks and grade are as we expect it. - $attemptobj = quiz_attempt::create($attempt->id); + $attemptobj = $quizattemptclass::create($attempt->id); $this->assertEquals(0.75, $attemptobj->get_sum_marks()); $grade = quiz_get_best_grade($quiz, $user->id); $this->assertEquals(75.0, $grade);