コード例 #1
0
 /**
  * Test save_attempt
  */
 public function test_save_attempt()
 {
     // Create a new quiz with one attempt started.
     list($quiz, $context, $quizobj, $attempt, $attemptobj, $quba) = $this->create_quiz_with_questions(true);
     // Response for slot 1.
     $prefix = $quba->get_field_prefix(1);
     $data = array(array('name' => 'slots', 'value' => 1), array('name' => $prefix . ':sequencecheck', 'value' => $attemptobj->get_question_attempt(1)->get_sequence_check_count()), array('name' => $prefix . 'answer', 'value' => 1));
     $this->setUser($this->student);
     $result = mod_quiz_external::save_attempt($attempt->id, $data);
     $result = external_api::clean_returnvalue(mod_quiz_external::save_attempt_returns(), $result);
     $this->assertTrue($result['status']);
     // Now, get the summary.
     $result = mod_quiz_external::get_attempt_summary($attempt->id);
     $result = external_api::clean_returnvalue(mod_quiz_external::get_attempt_summary_returns(), $result);
     // Check it's marked as completed only the first one.
     $this->assertEquals('complete', $result['questions'][0]['state']);
     $this->assertEquals('todo', $result['questions'][1]['state']);
     $this->assertEquals(1, $result['questions'][0]['number']);
     $this->assertEquals(2, $result['questions'][1]['number']);
     $this->assertFalse($result['questions'][0]['flagged']);
     $this->assertFalse($result['questions'][1]['flagged']);
     $this->assertEmpty($result['questions'][0]['mark']);
     $this->assertEmpty($result['questions'][1]['mark']);
     // Now, second slot.
     $prefix = $quba->get_field_prefix(2);
     $data = array(array('name' => 'slots', 'value' => 2), array('name' => $prefix . ':sequencecheck', 'value' => $attemptobj->get_question_attempt(1)->get_sequence_check_count()), array('name' => $prefix . 'answer', 'value' => 1));
     $result = mod_quiz_external::save_attempt($attempt->id, $data);
     $result = external_api::clean_returnvalue(mod_quiz_external::save_attempt_returns(), $result);
     $this->assertTrue($result['status']);
     // Now, get the summary.
     $result = mod_quiz_external::get_attempt_summary($attempt->id);
     $result = external_api::clean_returnvalue(mod_quiz_external::get_attempt_summary_returns(), $result);
     // Check it's marked as completed only the first one.
     $this->assertEquals('complete', $result['questions'][0]['state']);
     $this->assertEquals('complete', $result['questions'][1]['state']);
 }