[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/grade/report/user/tests/ -> externallib_test.php (source)

   1  <?php
   2  // This file is part of Moodle - http://moodle.org/
   3  //
   4  // Moodle is free software: you can redistribute it and/or modify
   5  // it under the terms of the GNU General Public License as published by
   6  // the Free Software Foundation, either version 3 of the License, or
   7  // (at your option) any later version.
   8  //
   9  // Moodle is distributed in the hope that it will be useful,
  10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  // GNU General Public License for more details.
  13  //
  14  // You should have received a copy of the GNU General Public License
  15  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
  16  
  17  /**
  18   * User grade report functions unit tests
  19   *
  20   * @package    gradereport_user
  21   * @category   external
  22   * @copyright  2015 Juan Leyva <juan@moodle.com>
  23   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  24   */
  25  
  26  defined('MOODLE_INTERNAL') || die();
  27  
  28  global $CFG;
  29  
  30  require_once($CFG->dirroot . '/webservice/tests/helpers.php');
  31  require_once($CFG->dirroot . '/grade/report/user/externallib.php');
  32  
  33  /**
  34   * User grade report functions unit tests
  35   *
  36   * @package    gradereport_user
  37   * @category   external
  38   * @copyright  2015 Juan Leyva <juan@moodle.com>
  39   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  40   */
  41  class gradereport_user_externallib_testcase extends externallib_advanced_testcase {
  42  
  43      /**
  44       * Loads some data to be used by the different tests
  45       * @param  int $s1grade Student 1 grade
  46       * @param  int $s2grade Student 2 grade
  47       * @return array          Course and users instances
  48       */
  49      private function load_data($s1grade, $s2grade) {
  50          global $DB;
  51  
  52          $course = $this->getDataGenerator()->create_course();
  53  
  54          $studentrole = $DB->get_record('role', array('shortname' => 'student'));
  55          $student1 = $this->getDataGenerator()->create_user();
  56          $this->getDataGenerator()->enrol_user($student1->id, $course->id, $studentrole->id);
  57  
  58          $student2 = $this->getDataGenerator()->create_user();
  59          $this->getDataGenerator()->enrol_user($student2->id, $course->id, $studentrole->id);
  60  
  61          $teacherrole = $DB->get_record('role', array('shortname' => 'editingteacher'));
  62          $teacher = $this->getDataGenerator()->create_user();
  63          $this->getDataGenerator()->enrol_user($teacher->id, $course->id, $teacherrole->id);
  64  
  65          $assignment = $this->getDataGenerator()->create_module('assign', array('name' => "Test assign", 'course' => $course->id));
  66          $modcontext = get_coursemodule_from_instance('assign', $assignment->id, $course->id);
  67          $assignment->cmidnumber = $modcontext->id;
  68  
  69          $student1grade = array('userid' => $student1->id, 'rawgrade' => $s1grade);
  70          $student2grade = array('userid' => $student2->id, 'rawgrade' => $s2grade);
  71          $studentgrades = array($student1->id => $student1grade, $student2->id => $student2grade);
  72          assign_grade_item_update($assignment, $studentgrades);
  73  
  74          return array($course, $teacher, $student1, $student2);
  75      }
  76  
  77      /**
  78       * Test get_grades_table function case teacher
  79       */
  80      public function test_get_grades_table_teacher() {
  81  
  82          $this->resetAfterTest(true);
  83  
  84          $s1grade = 80;
  85          $s2grade = 60;
  86  
  87          list($course, $teacher, $student1, $student2) = $this->load_data($s1grade, $s2grade);
  88  
  89          // A teacher must see all student grades.
  90          $this->setUser($teacher);
  91  
  92          $studentgrades = gradereport_user_external::get_grades_table($course->id);
  93          $studentgrades = external_api::clean_returnvalue(gradereport_user_external::get_grades_table_returns(), $studentgrades);
  94  
  95          // No warnings returned.
  96          $this->assertTrue(count($studentgrades['warnings']) == 0);
  97  
  98          // Check that two grades are returned (each for student).
  99          $this->assertTrue(count($studentgrades['tables']) == 2);
 100  
 101          // Read returned grades.
 102          $studentreturnedgrades = array();
 103          $studentreturnedgrades[$studentgrades['tables'][0]['userid']] =
 104              (int) $studentgrades['tables'][0]['tabledata'][1]['grade']['content'];
 105  
 106          $studentreturnedgrades[$studentgrades['tables'][1]['userid']] =
 107              (int) $studentgrades['tables'][1]['tabledata'][1]['grade']['content'];
 108  
 109          $this->assertEquals($s1grade, $studentreturnedgrades[$student1->id]);
 110          $this->assertEquals($s2grade, $studentreturnedgrades[$student2->id]);
 111      }
 112  
 113      /**
 114       * Test get_grades_table function case student
 115       */
 116      public function test_get_grades_table_student() {
 117          global $CFG, $DB;
 118  
 119          $this->resetAfterTest(true);
 120  
 121          $s1grade = 80;
 122          $s2grade = 60;
 123  
 124          list($course, $teacher, $student1, $student2) = $this->load_data($s1grade, $s2grade);
 125  
 126          // A user can see his own grades.
 127          $this->setUser($student1);
 128          $studentgrade = gradereport_user_external::get_grades_table($course->id, $student1->id);
 129          $studentgrade = external_api::clean_returnvalue(gradereport_user_external::get_grades_table_returns(), $studentgrade);
 130  
 131          // No warnings returned.
 132          $this->assertTrue(count($studentgrade['warnings']) == 0);
 133  
 134          $this->assertTrue(count($studentgrade['tables']) == 1);
 135          $student1returnedgrade = (int) $studentgrade['tables'][0]['tabledata'][1]['grade']['content'];
 136          $this->assertEquals($s1grade, $student1returnedgrade);
 137  
 138      }
 139  
 140      /**
 141       * Test get_grades_table function case incorrect permissions
 142       */
 143      public function test_get_grades_table_permissions() {
 144          global $CFG, $DB;
 145  
 146          $this->resetAfterTest(true);
 147  
 148          $s1grade = 80;
 149          $s2grade = 60;
 150  
 151          list($course, $teacher, $student1, $student2) = $this->load_data($s1grade, $s2grade);
 152  
 153          $this->setUser($student2);
 154  
 155          try {
 156              $studentgrade = gradereport_user_external::get_grades_table($course->id, $student1->id);
 157              $this->fail('Exception expected due to not perissions to view other user grades.');
 158          } catch (moodle_exception $e) {
 159              $this->assertEquals('nopermissiontoviewgrades', $e->errorcode);
 160          }
 161  
 162      }
 163  
 164      /**
 165       * Test view_grade_report function
 166       */
 167      public function test_view_grade_report() {
 168          global $USER;
 169  
 170          $this->resetAfterTest(true);
 171  
 172          $s1grade = 80;
 173          $s2grade = 60;
 174          list($course, $teacher, $student1, $student2) = $this->load_data($s1grade, $s2grade);
 175  
 176          // Redirect events to the sink, so we can recover them later.
 177          $sink = $this->redirectEvents();
 178  
 179          $this->setUser($student1);
 180          $result = gradereport_user_external::view_grade_report($course->id);
 181          $result = external_api::clean_returnvalue(gradereport_user_external::view_grade_report_returns(), $result);
 182          $events = $sink->get_events();
 183          $this->assertCount(1, $events);
 184          $event = reset($events);
 185  
 186          // Check the event details are correct.
 187          $this->assertInstanceOf('\gradereport_user\event\grade_report_viewed', $event);
 188          $this->assertEquals(context_course::instance($course->id), $event->get_context());
 189          $this->assertEquals($USER->id, $event->get_data()['relateduserid']);
 190  
 191          $this->setUser($teacher);
 192          $result = gradereport_user_external::view_grade_report($course->id, $student1->id);
 193          $result = external_api::clean_returnvalue(gradereport_user_external::view_grade_report_returns(), $result);
 194          $events = $sink->get_events();
 195          $event = reset($events);
 196          $sink->close();
 197  
 198          // Check the event details are correct.
 199          $this->assertInstanceOf('\gradereport_user\event\grade_report_viewed', $event);
 200          $this->assertEquals(context_course::instance($course->id), $event->get_context());
 201          $this->assertEquals($student1->id, $event->get_data()['relateduserid']);
 202  
 203          $this->setUser($student2);
 204          try {
 205              $studentgrade = gradereport_user_external::view_grade_report($course->id, $student1->id);
 206              $this->fail('Exception expected due to not permissions to view other user grades.');
 207          } catch (moodle_exception $e) {
 208              $this->assertEquals('nopermissiontoviewgrades', $e->errorcode);
 209          }
 210  
 211      }
 212  
 213  }


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1