diff --git a/mod/quiz/tests/attempt_walkthrough_test.php b/mod/quiz/tests/attempt_walkthrough_test.php new file mode 100644 index 00000000000..9062af1b82b --- /dev/null +++ b/mod/quiz/tests/attempt_walkthrough_test.php @@ -0,0 +1,126 @@ +. + +/** + * Quiz attempt walk through tests. + * + * @package mod_quiz + * @category phpunit + * @copyright 2013 The Open University + * @author Jamie Pratt + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; +require_once($CFG->dirroot . '/mod/quiz/editlib.php'); +require_once($CFG->dirroot . '/mod/quiz/locallib.php'); + +/** + * Quiz attempt walk through. + * + * @package mod_quiz + * @category phpunit + * @copyright 2013 The Open University + * @author Jamie Pratt + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class mod_quiz_attempt_walkthrough_testcase extends advanced_testcase { + + /** + * Create a quiz with questions and walk through a quiz attempt. + */ + public function test_quiz_attempt_walkthrough() { + global $SITE; + + $this->resetAfterTest(true); + + // Make a quiz. + $quizgenerator = $this->getDataGenerator()->get_plugin_generator('mod_quiz'); + + $quiz = $quizgenerator->create_instance(array('course'=>$SITE->id, 'questionsperpage' => 0, 'grade' => 100.0, + 'sumgrades' => 2)); + + // Create a couple of questions. + $questiongenerator = $this->getDataGenerator()->get_plugin_generator('core_question'); + + $cat = $questiongenerator->create_question_category(); + $saq = $questiongenerator->create_question('shortanswer', null, array('category' => $cat->id)); + $numq = $questiongenerator->create_question('numerical', null, array('category' => $cat->id)); + + // Add them to the quiz. + quiz_add_quiz_question($saq->id, $quiz); + quiz_add_quiz_question($numq->id, $quiz); + + // Make a user to do the quiz. + $user1 = $this->getDataGenerator()->create_user(); + $this->setUser($user1); + + $quizobj = quiz::create($quiz->id, $user1->id); + + // Start the attempt. + $quba = question_engine::make_questions_usage_by_activity('mod_quiz', $quizobj->get_context()); + $quba->set_preferred_behaviour($quizobj->get_quiz()->preferredbehaviour); + + $timenow = time(); + $attempt = quiz_create_attempt($quizobj, 1, false, $timenow); + + quiz_start_new_attempt($quizobj, $quba, $attempt, 1, $timenow); + + quiz_attempt_save_started($quizobj, $quba, $attempt); + + // Process some responses from the student. + $attemptobj = quiz_attempt::create($attempt->id); + $prefix1 = $quba->get_field_prefix(1); + $prefix2 = $quba->get_field_prefix(2); + + $tosubmit = array(); + $tosubmit['slots'] = '1,2'; + $tosubmit[$prefix1.':sequencecheck'] = 1; + $tosubmit[$prefix1.'answer'] = 'frog'; + + $tosubmit[$prefix2.':sequencecheck'] = 1; + $tosubmit[$prefix2.'answer'] = '3.14'; + + $attemptobj->process_submitted_actions($timenow, false, $tosubmit); + + // Finish the attempt. + $attemptobj = quiz_attempt::create($attempt->id); + $attemptobj->process_finish($timenow, false); + + // Re-load quiz attempt data. + $attemptobj = quiz_attempt::create($attempt->id); + + // Check that results are stored as expected. + $this->assertEquals(1, $attemptobj->get_attempt_number()); + $this->assertEquals(2, $attemptobj->get_sum_marks()); + $this->assertEquals(true, $attemptobj->is_finished()); + $this->assertEquals($timenow, $attemptobj->get_submitted_date()); + $this->assertEquals($user1->id, $attemptobj->get_userid()); + + // Check quiz grades. + $grades = quiz_get_user_grades($quiz, $user1->id); + $grade = array_shift($grades); + $this->assertEquals(100.0, $grade->rawgrade); + + // Check grade book. + $gradebookgrades = grade_get_grades($SITE->id, 'mod', 'quiz', $quiz->id, $user1->id); + $gradebookitem = array_shift($gradebookgrades->items); + $gradebookgrade = array_shift($gradebookitem->grades); + $this->assertEquals(100, $gradebookgrade->grade); + } +} diff --git a/mod/quiz/tests/attempts_test.php b/mod/quiz/tests/attempts_test.php index b70c26cffb7..901ca66c002 100644 --- a/mod/quiz/tests/attempts_test.php +++ b/mod/quiz/tests/attempts_test.php @@ -385,4 +385,4 @@ class mod_quiz_attempt_overdue_testcase extends advanced_testcase { groups_delete_group_members($course->id); $this->assertEquals(1200, $DB->get_field('quiz_attempts', 'timecheckstate', array('id'=>$attemptid))); } -} \ No newline at end of file +}