[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Aug 11 10:00:09 2016 | Cross-referenced by PHPXref 0.7.1 |