mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 00:16:46 +02:00
MDL-49036 webservices: gradereport_user_get_grades_table ws tests
This commit is contained in:
parent
3a2ba74694
commit
126470f3c8
5 changed files with 176 additions and 2 deletions
|
@ -2,6 +2,7 @@ This files describes API changes in /grade/report/*,
|
||||||
information provided here is intended especially for developers.
|
information provided here is intended especially for developers.
|
||||||
=== 2.9 ===
|
=== 2.9 ===
|
||||||
* Deprecating grade_report_grader:get_collapsing_icon.
|
* Deprecating grade_report_grader:get_collapsing_icon.
|
||||||
|
* A new web service function gradereport_user_get_grades_table has been added which will allow external system to retrieve grade information ready to be formatted as a table similar to the gradebook user report one.
|
||||||
|
|
||||||
=== 2.8.2 ===
|
=== 2.8.2 ===
|
||||||
* gradereport_singleview::__construct doesn't need groupid parameter anymore, so it was renamed to $unused.
|
* gradereport_singleview::__construct doesn't need groupid parameter anymore, so it was renamed to $unused.
|
||||||
|
|
|
@ -26,6 +26,15 @@ defined('MOODLE_INTERNAL') || die;
|
||||||
|
|
||||||
require_once("$CFG->libdir/externallib.php");
|
require_once("$CFG->libdir/externallib.php");
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* External grade report API implementation
|
||||||
|
*
|
||||||
|
* @package gradereport_user
|
||||||
|
* @copyright 2015 Juan Leyva <juan@moodle.com>
|
||||||
|
* @category external
|
||||||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||||
|
*/
|
||||||
class gradereport_user_external extends external_api {
|
class gradereport_user_external extends external_api {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
164
grade/report/user/tests/externallib_test.php
Normal file
164
grade/report/user/tests/externallib_test.php
Normal file
|
@ -0,0 +1,164 @@
|
||||||
|
<?php
|
||||||
|
// This file is part of Moodle - http://moodle.org/
|
||||||
|
//
|
||||||
|
// Moodle is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// Moodle is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User grade report functions unit tests
|
||||||
|
*
|
||||||
|
* @package gradereport_user
|
||||||
|
* @category external
|
||||||
|
* @copyright 2015 Juan Leyva <juan@moodle.com>
|
||||||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||||
|
*/
|
||||||
|
|
||||||
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
|
global $CFG;
|
||||||
|
|
||||||
|
require_once($CFG->dirroot . '/webservice/tests/helpers.php');
|
||||||
|
require_once($CFG->dirroot . '/grade/report/user/externallib.php');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User grade report functions unit tests
|
||||||
|
*
|
||||||
|
* @package gradereport_user
|
||||||
|
* @category external
|
||||||
|
* @copyright 2015 Juan Leyva <juan@moodle.com>
|
||||||
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||||
|
*/
|
||||||
|
class gradereport_user_externallib_testcase extends externallib_advanced_testcase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads some data to be used by the different tests
|
||||||
|
* @param int $s1grade Student 1 grade
|
||||||
|
* @param int $s2grade Student 2 grade
|
||||||
|
* @return array Course and users instances
|
||||||
|
*/
|
||||||
|
private function load_data($s1grade, $s2grade) {
|
||||||
|
global $DB;
|
||||||
|
|
||||||
|
$course = $this->getDataGenerator()->create_course();
|
||||||
|
|
||||||
|
$studentrole = $DB->get_record('role', array('shortname' => 'student'));
|
||||||
|
$student1 = $this->getDataGenerator()->create_user();
|
||||||
|
$this->getDataGenerator()->enrol_user($student1->id, $course->id, $studentrole->id);
|
||||||
|
|
||||||
|
$student2 = $this->getDataGenerator()->create_user();
|
||||||
|
$this->getDataGenerator()->enrol_user($student2->id, $course->id, $studentrole->id);
|
||||||
|
|
||||||
|
$teacherrole = $DB->get_record('role', array('shortname' => 'editingteacher'));
|
||||||
|
$teacher = $this->getDataGenerator()->create_user();
|
||||||
|
$this->getDataGenerator()->enrol_user($teacher->id, $course->id, $teacherrole->id);
|
||||||
|
|
||||||
|
$assignment = $this->getDataGenerator()->create_module('assign', array('name' => "Test assign", 'course' => $course->id));
|
||||||
|
$modcontext = get_coursemodule_from_instance('assign', $assignment->id, $course->id);
|
||||||
|
$assignment->cmidnumber = $modcontext->id;
|
||||||
|
|
||||||
|
$student1grade = array('userid' => $student1->id, 'rawgrade' => $s1grade);
|
||||||
|
$student2grade = array('userid' => $student2->id, 'rawgrade' => $s2grade);
|
||||||
|
$studentgrades = array($student1->id => $student1grade, $student2->id => $student2grade);
|
||||||
|
assign_grade_item_update($assignment, $studentgrades);
|
||||||
|
|
||||||
|
return array($course, $teacher, $student1, $student2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test get_grades_table function case teacher
|
||||||
|
*/
|
||||||
|
public function test_get_grades_table_teacher() {
|
||||||
|
|
||||||
|
$this->resetAfterTest(true);
|
||||||
|
|
||||||
|
$s1grade = 80;
|
||||||
|
$s2grade = 60;
|
||||||
|
|
||||||
|
list($course, $teacher, $student1, $student2) = $this->load_data($s1grade, $s2grade);
|
||||||
|
|
||||||
|
// A teacher must see all student grades.
|
||||||
|
$this->setUser($teacher);
|
||||||
|
|
||||||
|
$studentgrades = gradereport_user_external::get_grades_table($course->id);
|
||||||
|
$studentgrades = external_api::clean_returnvalue(gradereport_user_external::get_grades_table_returns(), $studentgrades);
|
||||||
|
|
||||||
|
// No warnings returned.
|
||||||
|
$this->assertTrue(count($studentgrades['warnings']) == 0);
|
||||||
|
|
||||||
|
// Check that two grades are returned (each for student).
|
||||||
|
$this->assertTrue(count($studentgrades['tables']) == 2);
|
||||||
|
|
||||||
|
// Read returned grades.
|
||||||
|
$studentreturnedgrades = array();
|
||||||
|
$studentreturnedgrades[$studentgrades['tables'][0]['userid']] =
|
||||||
|
(int) $studentgrades['tables'][0]['tabledata'][1]['grade']['content'];
|
||||||
|
|
||||||
|
$studentreturnedgrades[$studentgrades['tables'][1]['userid']] =
|
||||||
|
(int) $studentgrades['tables'][1]['tabledata'][1]['grade']['content'];
|
||||||
|
|
||||||
|
$this->assertEquals($s1grade, $studentreturnedgrades[$student1->id]);
|
||||||
|
$this->assertEquals($s2grade, $studentreturnedgrades[$student2->id]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test get_grades_table function case student
|
||||||
|
*/
|
||||||
|
public function test_get_grades_table_student() {
|
||||||
|
global $CFG, $DB;
|
||||||
|
|
||||||
|
$this->resetAfterTest(true);
|
||||||
|
|
||||||
|
$s1grade = 80;
|
||||||
|
$s2grade = 60;
|
||||||
|
|
||||||
|
list($course, $teacher, $student1, $student2) = $this->load_data($s1grade, $s2grade);
|
||||||
|
|
||||||
|
// A user can see his own grades.
|
||||||
|
$this->setUser($student1);
|
||||||
|
$studentgrade = gradereport_user_external::get_grades_table($course->id, $student1->id);
|
||||||
|
$studentgrade = external_api::clean_returnvalue(gradereport_user_external::get_grades_table_returns(), $studentgrade);
|
||||||
|
|
||||||
|
// No warnings returned.
|
||||||
|
$this->assertTrue(count($studentgrade['warnings']) == 0);
|
||||||
|
|
||||||
|
$this->assertTrue(count($studentgrade['tables']) == 1);
|
||||||
|
$student1returnedgrade = (int) $studentgrade['tables'][0]['tabledata'][1]['grade']['content'];
|
||||||
|
$this->assertEquals($s1grade, $student1returnedgrade);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test get_grades_table function case incorrect permissions
|
||||||
|
*/
|
||||||
|
public function test_get_grades_table_permissions() {
|
||||||
|
global $CFG, $DB;
|
||||||
|
|
||||||
|
$this->resetAfterTest(true);
|
||||||
|
|
||||||
|
$s1grade = 80;
|
||||||
|
$s2grade = 60;
|
||||||
|
|
||||||
|
list($course, $teacher, $student1, $student2) = $this->load_data($s1grade, $s2grade);
|
||||||
|
|
||||||
|
$this->setUser($student2);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$studentgrade = gradereport_user_external::get_grades_table($course->id, $student1->id);
|
||||||
|
$this->fail('Exception expected due to not perissions to view other user grades.');
|
||||||
|
} catch (moodle_exception $e) {
|
||||||
|
$this->assertEquals('nopermissiontoviewgrades', $e->errorcode);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -24,6 +24,6 @@
|
||||||
|
|
||||||
defined('MOODLE_INTERNAL') || die();
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
$plugin->version = 2014111000; // The current plugin version (Date: YYYYMMDDXX)
|
$plugin->version = 2014111001; // The current plugin version (Date: YYYYMMDDXX)
|
||||||
$plugin->requires = 2014110400; // Requires this Moodle version
|
$plugin->requires = 2014110400; // Requires this Moodle version
|
||||||
$plugin->component = 'gradereport_user'; // Full name of the plugin (used for diagnostics)
|
$plugin->component = 'gradereport_user'; // Full name of the plugin (used for diagnostics)
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
|
|
||||||
defined('MOODLE_INTERNAL') || die();
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
$version = 2015020500.00; // YYYYMMDD = weekly release date of this DEV branch.
|
$version = 2015020500.01; // YYYYMMDD = weekly release date of this DEV branch.
|
||||||
// RR = release increments - 00 in DEV branches.
|
// RR = release increments - 00 in DEV branches.
|
||||||
// .XX = incremental changes.
|
// .XX = incremental changes.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue