コード例 #1
0
 /**
  * Test get_user_best_grade
  */
 public function test_get_user_best_grade()
 {
     global $DB;
     $this->setUser($this->student);
     $result = mod_quiz_external::get_user_best_grade($this->quiz->id);
     $result = external_api::clean_returnvalue(mod_quiz_external::get_user_best_grade_returns(), $result);
     // No grades yet.
     $this->assertFalse($result['hasgrade']);
     $this->assertTrue(!isset($result['grade']));
     $grade = new stdClass();
     $grade->quiz = $this->quiz->id;
     $grade->userid = $this->student->id;
     $grade->grade = 8.9;
     $grade->timemodified = time();
     $grade->id = $DB->insert_record('quiz_grades', $grade);
     $result = mod_quiz_external::get_user_best_grade($this->quiz->id);
     $result = external_api::clean_returnvalue(mod_quiz_external::get_user_best_grade_returns(), $result);
     // Now I have grades.
     $this->assertTrue($result['hasgrade']);
     $this->assertEquals(8.9, $result['grade']);
     // We should not see other users grades.
     $anotherstudent = self::getDataGenerator()->create_user();
     $this->getDataGenerator()->enrol_user($anotherstudent->id, $this->course->id, $this->studentrole->id, 'manual');
     try {
         mod_quiz_external::get_user_best_grade($this->quiz->id, $anotherstudent->id);
         $this->fail('Exception expected due to missing capability.');
     } catch (required_capability_exception $e) {
         $this->assertEquals('nopermissions', $e->errorcode);
     }
     // Teacher must be able to see student grades.
     $this->setUser($this->teacher);
     $result = mod_quiz_external::get_user_best_grade($this->quiz->id, $this->student->id);
     $result = external_api::clean_returnvalue(mod_quiz_external::get_user_best_grade_returns(), $result);
     $this->assertTrue($result['hasgrade']);
     $this->assertEquals(8.9, $result['grade']);
     // Invalid user.
     try {
         mod_quiz_external::get_user_best_grade($this->quiz->id, -1);
         $this->fail('Exception expected due to missing capability.');
     } catch (dml_missing_record_exception $e) {
         $this->assertEquals('invaliduser', $e->errorcode);
     }
     // Remove the created data.
     $DB->delete_records('quiz_grades', array('id' => $grade->id));
 }