コード例 #1
0
 /**
  * Test get_combined_review_options.
  * This is a basic test, this is already tested in mod_quiz_display_options_testcase.
  */
 public function test_get_combined_review_options()
 {
     global $DB;
     // Create a new quiz with attempts.
     $quizgenerator = $this->getDataGenerator()->get_plugin_generator('mod_quiz');
     $data = array('course' => $this->course->id, 'sumgrades' => 1);
     $quiz = $quizgenerator->create_instance($data);
     // Create a couple of questions.
     $questiongenerator = $this->getDataGenerator()->get_plugin_generator('core_question');
     $cat = $questiongenerator->create_question_category();
     $question = $questiongenerator->create_question('numerical', null, array('category' => $cat->id));
     quiz_add_quiz_question($question->id, $quiz);
     $quizobj = quiz::create($quiz->id, $this->student->id);
     // Set grade to pass.
     $item = grade_item::fetch(array('courseid' => $this->course->id, 'itemtype' => 'mod', 'itemmodule' => 'quiz', 'iteminstance' => $quiz->id, 'outcomeid' => null));
     $item->gradepass = 80;
     $item->update();
     // Start the passing 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, false, $this->student->id);
     quiz_start_new_attempt($quizobj, $quba, $attempt, 1, $timenow);
     quiz_attempt_save_started($quizobj, $quba, $attempt);
     $this->setUser($this->student);
     $result = mod_quiz_external::get_combined_review_options($quiz->id);
     $result = external_api::clean_returnvalue(mod_quiz_external::get_combined_review_options_returns(), $result);
     // Expected values.
     $expected = array("someoptions" => array(array("name" => "feedback", "value" => 1), array("name" => "generalfeedback", "value" => 1), array("name" => "rightanswer", "value" => 1), array("name" => "overallfeedback", "value" => 0), array("name" => "marks", "value" => 2)), "alloptions" => array(array("name" => "feedback", "value" => 1), array("name" => "generalfeedback", "value" => 1), array("name" => "rightanswer", "value" => 1), array("name" => "overallfeedback", "value" => 0), array("name" => "marks", "value" => 2)), "warnings" => []);
     $this->assertEquals($expected, $result);
     // Now, finish the attempt.
     $attemptobj = quiz_attempt::create($attempt->id);
     $attemptobj->process_finish($timenow, false);
     $expected = array("someoptions" => array(array("name" => "feedback", "value" => 1), array("name" => "generalfeedback", "value" => 1), array("name" => "rightanswer", "value" => 1), array("name" => "overallfeedback", "value" => 1), array("name" => "marks", "value" => 2)), "alloptions" => array(array("name" => "feedback", "value" => 1), array("name" => "generalfeedback", "value" => 1), array("name" => "rightanswer", "value" => 1), array("name" => "overallfeedback", "value" => 1), array("name" => "marks", "value" => 2)), "warnings" => []);
     // We should see now the overall feedback.
     $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);
     // Start a new attempt, but not finish it.
     $timenow = time();
     $attempt = quiz_create_attempt($quizobj, 2, false, $timenow, false, $this->student->id);
     $quba = question_engine::make_questions_usage_by_activity('mod_quiz', $quizobj->get_context());
     $quba->set_preferred_behaviour($quizobj->get_quiz()->preferredbehaviour);
     quiz_start_new_attempt($quizobj, $quba, $attempt, 1, $timenow);
     quiz_attempt_save_started($quizobj, $quba, $attempt);
     $expected = array("someoptions" => array(array("name" => "feedback", "value" => 1), array("name" => "generalfeedback", "value" => 1), array("name" => "rightanswer", "value" => 1), array("name" => "overallfeedback", "value" => 1), array("name" => "marks", "value" => 2)), "alloptions" => array(array("name" => "feedback", "value" => 1), array("name" => "generalfeedback", "value" => 1), array("name" => "rightanswer", "value" => 1), array("name" => "overallfeedback", "value" => 0), array("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);
     // Teacher, for see student options.
     $this->setUser($this->teacher);
     $result = mod_quiz_external::get_combined_review_options($quiz->id, $this->student->id);
     $result = external_api::clean_returnvalue(mod_quiz_external::get_combined_review_options_returns(), $result);
     $this->assertEquals($expected, $result);
     // Invalid user.
     try {
         mod_quiz_external::get_combined_review_options($quiz->id, -1);
         $this->fail('Exception expected due to missing capability.');
     } catch (dml_missing_record_exception $e) {
         $this->assertEquals('invaliduser', $e->errorcode);
     }
 }