X7ROOT File Manager
Current Path:
/home/cbholdings/pasukulu/mod/quiz/tests
home
/
cbholdings
/
pasukulu
/
mod
/
quiz
/
tests
/
📁
..
📄
attempt_test.php
(24.12 KB)
📄
attempt_walkthrough_from_csv_test.php
(15.08 KB)
📄
attempt_walkthrough_test.php
(26.25 KB)
📄
attempts_test.php
(40.41 KB)
📁
backup
📁
behat
📄
calendar_event_modified_test.php
(18.52 KB)
📄
custom_completion_test.php
(21.18 KB)
📄
dates_test.php
(7.14 KB)
📁
event
📁
external
📁
fixtures
📁
generator
📄
generator_test.php
(4.79 KB)
📄
lib_test.php
(54.41 KB)
📄
local_structure_slot_random_test.php
(16.74 KB)
📄
locallib_test.php
(28.24 KB)
📁
privacy
📄
privacy_legacy_quizaccess_polyfill_test.php
(6.87 KB)
📄
qbank_helper_test.php
(9.06 KB)
📁
question
📄
quiz_notify_attempt_manual_grading_completed_test.php
(11.79 KB)
📄
quiz_question_bank_view_test.php
(2.99 KB)
📄
quiz_question_helper_test_trait.php
(6.66 KB)
📄
quiz_question_restore_test.php
(22.52 KB)
📄
quiz_question_version_test.php
(8.71 KB)
📄
quizobj_test.php
(2.2 KB)
📄
repaginate_test.php
(10.52 KB)
📄
reportlib_test.php
(6.23 KB)
📄
restore_attempt_test.php
(4.32 KB)
📄
restore_override_test.php
(3.63 KB)
📄
structure_test.php
(35.88 KB)
📄
tags_test.php
(4.54 KB)
Editing: quiz_notify_attempt_manual_grading_completed_test.php
<?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Contains the class containing unit tests for the quiz notify attempt manual grading completed cron task. * * @package mod_quiz * @copyright 2021 The Open University * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace mod_quiz; use advanced_testcase; use context_course; use context_module; use mod_quiz\task\quiz_notify_attempt_manual_grading_completed; use question_engine; use mod_quiz\quiz_settings; use stdClass; defined('MOODLE_INTERNAL') || die(); /** * Class containing unit tests for the quiz notify attempt manual grading completed cron task. * * @package mod_quiz * @copyright 2021 The Open University * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class quiz_notify_attempt_manual_grading_completed_test extends advanced_testcase { /** @var \stdClass $course Test course to contain quiz. */ protected $course; /** @var \stdClass $quiz A test quiz. */ protected $quiz; /** @var context The quiz context. */ protected $context; /** @var stdClass The course_module. */ protected $cm; /** @var stdClass The student test. */ protected $student; /** @var stdClass The teacher test. */ protected $teacher; /** @var quiz_settings Object containing the quiz settings. */ protected $quizobj; /** @var question_usage_by_activity The question usage for this quiz attempt. */ protected $quba; /** * Standard test setup. * * Create a course with a quiz and a student and a(n editing) teacher. * the quiz has a truefalse question and an essay question. * * Also create some bits of a quiz attempt to be used later. */ public function setUp(): void { global $DB; $this->resetAfterTest(); $this->setAdminUser(); // Setup test data. $this->course = $this->getDataGenerator()->create_course(); $this->quiz = $this->getDataGenerator()->create_module('quiz', ['course' => $this->course->id]); $this->context = context_module::instance($this->quiz->cmid); $this->cm = get_coursemodule_from_instance('quiz', $this->quiz->id); // Create users. $this->student = self::getDataGenerator()->create_user(); $this->teacher = self::getDataGenerator()->create_user(); // Users enrolments. $studentrole = $DB->get_record('role', ['shortname' => 'student']); $teacherrole = $DB->get_record('role', ['shortname' => 'editingteacher']); // Allow student to receive messages. $coursecontext = context_course::instance($this->course->id); assign_capability('mod/quiz:emailnotifyattemptgraded', CAP_ALLOW, $studentrole->id, $coursecontext, true); $this->getDataGenerator()->enrol_user($this->student->id, $this->course->id, $studentrole->id); $this->getDataGenerator()->enrol_user($this->teacher->id, $this->course->id, $teacherrole->id); // Make a quiz. $quizgenerator = $this->getDataGenerator()->get_plugin_generator('mod_quiz'); $this->quiz = $quizgenerator->create_instance(['course' => $this->course->id, 'questionsperpage' => 0, 'grade' => 100.0, 'sumgrades' => 2]); // Create a truefalse question and an essay question. $questiongenerator = $this->getDataGenerator()->get_plugin_generator('core_question'); $cat = $questiongenerator->create_question_category(); $truefalse = $questiongenerator->create_question('truefalse', null, ['category' => $cat->id]); $essay = $questiongenerator->create_question('essay', null, ['category' => $cat->id]); // Add them to the quiz. quiz_add_quiz_question($truefalse->id, $this->quiz); quiz_add_quiz_question($essay->id, $this->quiz); $this->quizobj = quiz_settings::create($this->quiz->id); $this->quba = question_engine::make_questions_usage_by_activity('mod_quiz', $this->quizobj->get_context()); $this->quba->set_preferred_behaviour($this->quizobj->get_quiz()->preferredbehaviour); } /** * Test SQL querry get list attempt in condition. */ public function test_get_list_of_attempts_within_conditions() { global $DB; $timenow = time(); // Create an attempt to be completely graded (one hour ago). $attempt1 = quiz_create_attempt($this->quizobj, 1, null, $timenow - HOURSECS, false, $this->student->id); quiz_start_new_attempt($this->quizobj, $this->quba, $attempt1, 1, $timenow - HOURSECS); quiz_attempt_save_started($this->quizobj, $this->quba, $attempt1); // Process some responses from the student (30 mins ago) and submit (20 mins ago). $attemptobj1 = quiz_attempt::create($attempt1->id); $tosubmit = [2 => ['answer' => 'Student 1 answer', 'answerformat' => FORMAT_HTML]]; $attemptobj1->process_submitted_actions($timenow - 30 * MINSECS, false, $tosubmit); $attemptobj1->process_finish($timenow - 20 * MINSECS, false); // Finish the attempt of student (now). $attemptobj1->get_question_usage()->manual_grade(2, 'Good!', 1, FORMAT_HTML); question_engine::save_questions_usage_by_activity($attemptobj1->get_question_usage()); $update = new stdClass(); $update->id = $attemptobj1->get_attemptid(); $update->timemodified = $timenow; $update->sumgrades = $attemptobj1->get_question_usage()->get_total_mark(); $DB->update_record('quiz_attempts', $update); $attemptobj1->get_quizobj()->get_grade_calculator()->recompute_final_grade(); // Not quite time to send yet. $task = new quiz_notify_attempt_manual_grading_completed(); $task->set_time_for_testing($timenow + 5 * HOURSECS - 1); $attempts = $task->get_list_of_attempts(); $this->assertEquals(0, iterator_count($attempts)); // After time to send. $task->set_time_for_testing($timenow + 5 * HOURSECS + 1); $attempts = $task->get_list_of_attempts(); $this->assertEquals(1, iterator_count($attempts)); } /** * Test SQL query does not return attempts if the grading is not complete yet. */ public function test_get_list_of_attempts_without_manual_graded() { $timenow = time(); // Create an attempt which won't be graded (1 hour ago). $attempt2 = quiz_create_attempt($this->quizobj, 2, null, $timenow - HOURSECS, false, $this->student->id); quiz_start_new_attempt($this->quizobj, $this->quba, $attempt2, 2, $timenow - HOURSECS); quiz_attempt_save_started($this->quizobj, $this->quba, $attempt2); // Process some responses from the student (30 mins ago) and submit (now). $attemptobj2 = quiz_attempt::create($attempt2->id); $tosubmit = [2 => ['answer' => 'Answer of student 2.', 'answerformat' => FORMAT_HTML]]; $attemptobj2->process_submitted_actions($timenow - 30 * MINSECS, false, $tosubmit); $attemptobj2->process_finish($timenow, false); // After time to notify, except attempt not graded, so it won't appear. $task = new quiz_notify_attempt_manual_grading_completed(); $task->set_time_for_testing($timenow + 5 * HOURSECS + 1); $attempts = $task->get_list_of_attempts(); $this->assertEquals(0, iterator_count($attempts)); } /** * Test notify manual grading completed task which the user attempt has not capability. */ public function test_notify_manual_grading_completed_task_without_capability() { global $DB; // Create an attempt for a user without the capability. $timenow = time(); $attempt = quiz_create_attempt($this->quizobj, 3, null, $timenow, false, $this->teacher->id); quiz_start_new_attempt($this->quizobj, $this->quba, $attempt, 3, $timenow - HOURSECS); quiz_attempt_save_started($this->quizobj, $this->quba, $attempt); // Process some responses and submit. $attemptobj = quiz_attempt::create($attempt->id); $tosubmit = [2 => ['answer' => 'Answer of teacher.', 'answerformat' => FORMAT_HTML]]; $attemptobj->process_submitted_actions($timenow - 30 * MINSECS, false, $tosubmit); $attemptobj->process_finish($timenow - 20 * MINSECS, false); // Grade the attempt. $attemptobj->get_question_usage()->manual_grade(2, 'Good!', 1, FORMAT_HTML); question_engine::save_questions_usage_by_activity($attemptobj->get_question_usage()); $update = new stdClass(); $update->id = $attemptobj->get_attemptid(); $update->timemodified = $timenow; $update->sumgrades = $attemptobj->get_question_usage()->get_total_mark(); $DB->update_record('quiz_attempts', $update); $attemptobj->get_quizobj()->get_grade_calculator()->recompute_final_grade(); // Run the quiz notify attempt manual graded task. ob_start(); $task = new quiz_notify_attempt_manual_grading_completed(); $task->set_time_for_testing($timenow + 5 * HOURSECS + 1); $task->execute(); ob_get_clean(); $attemptobj = quiz_attempt::create($attempt->id); $this->assertEquals($attemptobj->get_attempt()->timefinish, $attemptobj->get_attempt()->gradednotificationsenttime); } /** * Test notify manual grading completed task which the user attempt has capability. */ public function test_notify_manual_grading_completed_task_with_capability() { global $DB; // Create an attempt with capability. $timenow = time(); $attempt = quiz_create_attempt($this->quizobj, 4, null, $timenow, false, $this->student->id); quiz_start_new_attempt($this->quizobj, $this->quba, $attempt, 4, $timenow - HOURSECS); quiz_attempt_save_started($this->quizobj, $this->quba, $attempt); // Process some responses from the student. $attemptobj = quiz_attempt::create($attempt->id); $tosubmit = [2 => ['answer' => 'Answer of student.', 'answerformat' => FORMAT_HTML]]; $attemptobj->process_submitted_actions($timenow - 30 * MINSECS, false, $tosubmit); $attemptobj->process_finish($timenow - 20 * MINSECS, false); // Finish the attempt of student. $attemptobj->get_question_usage()->manual_grade(2, 'Good!', 1, FORMAT_HTML); question_engine::save_questions_usage_by_activity($attemptobj->get_question_usage()); $update = new stdClass(); $update->id = $attemptobj->get_attemptid(); $update->timemodified = $timenow; $update->sumgrades = $attemptobj->get_question_usage()->get_total_mark(); $DB->update_record('quiz_attempts', $update); $attemptobj->get_quizobj()->get_grade_calculator()->recompute_final_grade(); // Run the quiz notify attempt manual graded task. ob_start(); $task = new quiz_notify_attempt_manual_grading_completed(); $task->set_time_for_testing($timenow + 5 * HOURSECS + 1); $task->execute(); ob_get_clean(); $attemptobj = quiz_attempt::create($attempt->id); $this->assertNotEquals(null, $attemptobj->get_attempt()->gradednotificationsenttime); $this->assertNotEquals($attemptobj->get_attempt()->timefinish, $attemptobj->get_attempt()->gradednotificationsenttime); } }
Upload File
Create Folder