web service MDL-12886 Add unit tests for Group web service functions.

This commit is contained in:
jerome 2009-03-09 02:19:38 +00:00
parent 3b8b9b6a8b
commit 2061e59c45
3 changed files with 425 additions and 37 deletions

View File

@ -6,6 +6,7 @@
* @author Jordi Piguillem * @author Jordi Piguillem
* @author David Castro * @author David Castro
* @author Ferran Recio * @author Ferran Recio
* @author Jerome Mouneyrac
*/ */
require_once(dirname(dirname(__FILE__)) . '/group/lib.php'); require_once(dirname(dirname(__FILE__)) . '/group/lib.php');
@ -31,11 +32,11 @@ final class group_external {
if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) { if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
$group = new stdClass; $group = new stdClass;
$group->courseid = $params['courseid']; $group->courseid = $params['courseid'];
$group->name = $params['groupname']; $group->name = $params['groupname'];
// @TODO: groups_create_group() does not check courseid // @TODO: groups_create_group() does not check courseid
return groups_create_group($group, false); return groups_create_group($group, false);
} }
else { else {
throw new moodle_exception('wscouldnotcreategroup'); throw new moodle_exception('wscouldnotcreategroup');
@ -43,7 +44,68 @@ final class group_external {
} }
/** /**
* Get a group member * Create some groups
* @param array|struct $params
* @subparam string $params:group->groupname
* @subparam integer $params:group->courseid
* @return array $return
* @subparam integer $return:groupid
*/
static function tmp_create_groups($params) {
global $USER;
$groupids = array();
if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
foreach ($params as $groupparam) {
$group = new stdClass;
$group->courseid = clean_param($groupparam['courseid'], PARAM_INTEGER);
$group->name = clean_param($groupparam['groupname'], PARAM_ALPHANUMEXT);
$groupids[] = groups_create_group($group, false);
}
return $groupids;
}
else {
throw new moodle_exception('wscouldnotcreategroupnopermission');
}
}
/**
* Get some groups
* @param array|struct $params
* @subparam integer $params:groupid
* @return object $return
* @subreturn integer $return:group->id
* @subreturn integer $return:group->courseid
* @subreturn string $return:group->name
* @subreturn string $return:group->enrolmentkey
*/
static function tmp_get_groups($params){
if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
foreach ($params as $groupid) {
$group = groups_get_group(clean_param($groupid, PARAM_INTEGER));
$ret = new StdClass();
$ret->id = $group->id;
$ret->courseid = $group->courseid;
$ret->name = $group->name;
$ret->enrolmentkey = $group->enrolmentkey;
$groups[] = $ret;
}
return $groups;
}
else {
throw new moodle_exception('wscouldnotgetgroupnopermission');
}
}
/**
* Get a group
* @param array|struct $params * @param array|struct $params
* @subparam integer $params->groupid * @subparam integer $params->groupid
* @return object $return * @return object $return
@ -52,20 +114,20 @@ final class group_external {
* @subreturn string $return->group->name * @subreturn string $return->group->name
* @subreturn string $return->group->enrolmentkey * @subreturn string $return->group->enrolmentkey
*/ */
static function tmp_get_group($params){ static function tmp_get_group($params){
// @TODO: any capability to check? // @TODO: any capability to check?
$group = groups_get_group($params['groupid']); $group = groups_get_group($params['groupid']);
$ret = new StdClass(); $ret = new StdClass();
$ret->id = $group->id; $ret->id = $group->id;
$ret->courseid = $group->courseid; $ret->courseid = $group->courseid;
$ret->name = $group->name; $ret->name = $group->name;
$ret->enrolmentkey = $group->enrolmentkey; $ret->enrolmentkey = $group->enrolmentkey;
return $ret; return $ret;
} }
/** /**
@ -74,17 +136,39 @@ final class group_external {
* @subparam integer $params->groupid * @subparam integer $params->groupid
* @return boolean result * @return boolean result
*/ */
static function tmp_delete_group($params){ static function tmp_delete_group($params){
if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) { if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
// @TODO groups_add_member() does not check userid // @TODO groups_add_member() does not check userid
return groups_delete_group($params['groupid']); return groups_delete_group($params['groupid']);
} }
else { else {
throw new moodle_exception('wscouldnotdeletegroup'); throw new moodle_exception('wscouldnotdeletegroup');
} }
} }
/**
* Delete some groups
* @param array|struct $params
* @subparam integer $params:groupid
* @return boolean result
*/
static function tmp_delete_groups($params){
if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
$deletionsuccessfull = true;
foreach ($params as $groupid) {
if (!groups_delete_group(clean_param($groupid, PARAM_INTEGER))) {
$deletionsuccessfull = false;
}
}
return $deletionsuccessfull;
}
else {
throw new moodle_exception('wscouldnotdeletegroupnopermission');
}
}
/** /**
* *
@ -93,8 +177,8 @@ final class group_external {
* @subparam integer $params->userid * @subparam integer $params->userid
* @return boolean result * @return boolean result
*/ */
static function tmp_get_groupmember($params){ static function tmp_get_groupmember($params){
} }
/** /**
* Add a member to a group * Add a member to a group
@ -103,17 +187,42 @@ final class group_external {
* @subparam integer $params->userid * @subparam integer $params->userid
* @return boolean result * @return boolean result
*/ */
static function tmp_add_groupmember($params){ static function tmp_add_groupmember($params){
if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) { if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
// @TODO groups_add_member() does not check userid // @TODO groups_add_member() does not check userid
return groups_add_member($params['groupid'], $params['userid']); return groups_add_member($params['groupid'], $params['userid']);
} }
else { else {
throw new moodle_exception('wscouldnotaddgroupmember'); throw new moodle_exception('wscouldnotaddgroupmember');
} }
} }
/**
* Add some members to some groups
* @param array|struct $params
* @subparam integer $params:member->groupid
* @subparam integer $params:member->userid
* @return boolean result
*/
static function tmp_add_groupmembers($params){
if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
$addmembersuccessfull = true;
foreach($params as $member) {
$groupid = clean_param($member['groupid'], PARAM_INTEGER);
$userid = clean_param($member['userid'], PARAM_INTEGER);
if (!groups_add_member($groupid, $userid)) {
$addmembersuccessfull = false;
}
}
return $addmembersuccessfull;
}
else {
throw new moodle_exception('wscouldnotaddgroupmembernopermission');
}
}
/** /**
* *
@ -122,14 +231,37 @@ final class group_external {
* @subparam integer $params->userid * @subparam integer $params->userid
* @return boolean result * @return boolean result
*/ */
static function tmp_delete_groupmember($params){ static function tmp_delete_groupmember($params){
if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) { if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
return groups_remove_member($params['groupid'], $params['userid']); return groups_remove_member($params['groupid'], $params['userid']);
} else { } else {
throw new moodle_exception('wscouldnotremovegroupmember'); throw new moodle_exception('wscouldnotremovegroupmember');
} }
} }
/**
* Delete some members from some groups
* @param array|struct $params
* @subparam integer $params:member->groupid
* @subparam integer $params:member->userid
* @return boolean result
*/
static function tmp_delete_groupmembers($params){
if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) {
$addmembersuccessfull = true;
foreach($params as $member) {
$groupid = clean_param($member['groupid'], PARAM_INTEGER);
$userid = clean_param($member['userid'], PARAM_INTEGER);
if (!groups_remove_member($groupid, $userid)) {
$addmembersuccessfull = false;
}
}
return $addmembersuccessfull;
} else {
throw new moodle_exception('wscouldnotremovegroupmembernopermission');
}
}
} }

View File

@ -23,6 +23,10 @@
function groups_add_member($groupid, $userid) { function groups_add_member($groupid, $userid) {
global $DB; global $DB;
if (! $DB->record_exists('user', array('id'=>$userid))) {
throw new moodle_exception('useriddoesntexist');
}
if (!groups_group_exists($groupid)) { if (!groups_group_exists($groupid)) {
return false; return false;
} }
@ -59,6 +63,10 @@ function groups_add_member($groupid, $userid) {
function groups_remove_member($groupid, $userid) { function groups_remove_member($groupid, $userid) {
global $DB; global $DB;
if (! $DB->record_exists('user', array('id'=>$userid))) {
throw new moodle_exception('useriddoesntexist');
}
if (!groups_group_exists($groupid)) { if (!groups_group_exists($groupid)) {
return false; return false;
} }
@ -90,6 +98,13 @@ function groups_remove_member($groupid, $userid) {
function groups_create_group($data, $editform=false) { function groups_create_group($data, $editform=false) {
global $CFG, $DB; global $CFG, $DB;
require_once("$CFG->libdir/gdlib.php"); require_once("$CFG->libdir/gdlib.php");
//check that courseid exists
$course = $DB->get_record('course',array('id' => $data->courseid));
if (empty($course)) {
throw new moodle_exception('coursedoesntexistcannotcreategroup');
}
$data->timecreated = time(); $data->timecreated = time();
$data->timemodified = $data->timecreated; $data->timemodified = $data->timecreated;
@ -191,7 +206,7 @@ function groups_delete_group($grouporid) {
} else { } else {
$groupid = $grouporid; $groupid = $grouporid;
if (!$group = $DB->get_record('groups', array('id'=>$groupid))) { if (!$group = $DB->get_record('groups', array('id'=>$groupid))) {
return false; throw new moodle_exception('groupiddoesntexistcannotdelete');;
} }
} }

View File

@ -0,0 +1,241 @@
<?php
/**
* Moodle - Modular Object-Oriented Dynamic Learning Environment
* http://moodle.com
*
* LICENSE
*
* This program 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 2 of the License, or
* (at your option) any later version.
*
* This program 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:
*
* http://www.gnu.org/copyleft/gpl.html
*
* @category Moodle
* @package group
* @copyright Copyright (c) 1999 onwards Martin Dougiamas http://dougiamas.com
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL License
*/
/**
* Unit tests for (some of) user/external.php.
* WARNING: DO NOT RUN THIS TEST ON A PRODUCTION SITE
* => DO NOT UNCOMMENT THESE TEST FUNCTIONS EXCEPT IF YOU ARE DEVELOPER
* => NONE OF THESE TEST FUNCTIONS SHOULD BE UNCOMMENT BY DEFAULT
* => THESE TEST FUNCTIONS ARE DEPENDENT BETWEEEN EACH OTHER
* => THE FUNCTION ORDER MUST NOT BE CHANGED
*
*
* THIS TEST NEEDS TO BE RUN AS ADMIN!!!
* @author Jerome Mouneyrac
*/
require_once($CFG->dirroot . '/group/external.php');
require_once(dirname(dirname(dirname(__FILE__))) . '/user/lib.php');
class group_external_test extends UnitTestCase {
/*
var $realDB;
var $group;
var $group2;
var $userid1;
var $userid2;
var $userid3;
var $userid4;
var $course;
var $categoryid;
function setUp() {
global $DB;
/// create a category
$tempcat = new object();
$tempcat->name = 'categoryForTestGroup';
$this->categoryid = $DB->insert_record('course_categories', $tempcat);
/// create a course
$course->category = $this->categoryid;
$course->summary = 'Test course for Group';
$course->format = 'weeks';
$course->numsections = '10';
$course->startdate = mktime();
$course->name = "Test course for Group";
$course->fullname = "Test course for Group";
$course->shortname = "TestCourseForGroup";
$course = create_course($course);
$this->course = $course;
/// create two students
$user = new stdClass();
$user->username = 'mockuserfortestingXX';
$user->firstname = 'mockuserfortestingX_firstname';
$user->lastname = 'mockuserfortestingX_lastname';
$user->email = 'mockuserfortestingX@moodle.com';
$user->password = 'mockuserfortestingX_password';
$this->userid1 = tmp_create_user($user);
$user->username = 'mockuserfortestingXY';
$user->firstname = 'mockuserfortestingY_firstname';
$user->lastname = 'mockuserfortestingY_lastname';
$user->email = 'mockuserfortestingY@moodle.com';
$user->password = 'mockuserfortestingY_password';
$this->userid2 = tmp_create_user($user);
//create some more test users (not add yet to any group)
$user = new stdClass();
$user->username = 'mockuserfortestingZ';
$user->firstname = 'mockuserfortestingZ_firstname';
$user->lastname = 'mockuserfortestingZ_lastname';
$user->email = 'mockuserfortestingZ@moodle.com';
$user->password = 'mockuserfortestingZ_password';
$this->userid3 = tmp_create_user($user);
$user = new stdClass();
$user->username = 'mockuserfortestingZ2';
$user->firstname = 'mockuserfortestingZ2_firstname';
$user->lastname = 'mockuserfortestingZ2_lastname';
$user->email = 'mockuserfortestingZ2@moodle.com';
$user->password = 'mockuserfortestingZ2_password';
$this->userid4 = tmp_create_user($user);
/// create a group with these two students
$this->group = new stdClass();
$this->group->courseid = $this->course->id;
$this->group->name = "Unit Test group";
$this->group->id = groups_create_group( $this->group, false);
/// create a group with one of these students
$this->group2 = new stdClass();
$this->group2->courseid = $this->course->id;
$this->group2->name = "Unit Test group 2";
$this->group2->id = groups_create_group( $this->group2, false);
//add the two students as member of the group
groups_add_member($this->group->id, $this->userid1);
groups_add_member($this->group->id, $this->userid2);
groups_add_member($this->group2->id, $this->userid1);
}
function tearDown() {
global $DB;
/// delete the course
delete_course($this->course, false);
/// delete the category
$DB->delete_records('course_categories',array('id' => $this->categoryid));
/// delete the two students
$user = $DB->get_record('user', array('username'=>'mockuserfortestingXX', 'mnethostid'=>1));
delete_user($user);
$user = $DB->get_record('user', array('username'=>'mockuserfortestingXY', 'mnethostid'=>1));
delete_user($user);
/// delete other test users
$user = $DB->get_record('user', array('username'=>'mockuserfortestingZ', 'mnethostid'=>1));
delete_user($user);
$user = $DB->get_record('user', array('username'=>'mockuserfortestingZ2', 'mnethostid'=>1));
delete_user($user);
}
function testTmp_create_groups() {
/// create two different groups
$params = array();
$group = array('groupname' => 'Create Unit Test Group 1', 'courseid' => $this->course->id);
$params[] = $group;
$group = array('groupname' => 'Create Unit Test Group 2', 'courseid' => $this->course->id);
$params[] = $group;
$groupids = group_external::tmp_create_groups($params);
$this->assertEqual(sizeof($groupids), 2);
$this->assertIsA($groupids[key($groupids)], "integer");
$this->assertNotNull($groupids[key($groupids)]);
/// create a course with a not existing course id
$params = array();
$group = array('groupname' => 'Create Unit Test Group 3', 'courseid' => 6544656);
$params[] = $group;
$this->expectException(new moodle_exception('coursedoesntexistcannotcreategroup'));
$groupids = group_external::tmp_create_groups($params);
}
function testTmp_get_groups() {
/// retrieve the two groups
$params = array($this->group->id, $this->group2->id);
$groups = group_external::tmp_get_groups($params);
$this->assertEqual(sizeof($groups), 2);
$group = $groups[key($groups)];
next($groups);
$group2 = $groups[key($groups)];
$this->assertEqual($group->id, $this->group->id);
$this->assertEqual($group->courseid, $this->group->courseid);
$this->assertEqual($group->name, $this->group->name);
$this->assertEqual($group2->id, $this->group2->id);
$this->assertEqual($group2->courseid, $this->group2->courseid);
$this->assertEqual($group2->name, $this->group2->name);
}
function testTmp_add_group_members() {
//add the two members without group
$params = array(array("groupid" => $this->group->id, "userid" => $this->userid3), array("groupid" => $this->group->id, "userid" => $this->userid4));
$result = group_external::tmp_add_groupmembers($params);
$this->assertEqual($result, true);
//add them a new time
$params = array(array("groupid" => $this->group->id, "userid" => $this->userid3), array("groupid" => $this->group->id, "userid" => $this->userid4));
$result = group_external::tmp_add_groupmembers($params);
$this->assertEqual($result, true);
//One of the userid doesn't exist
$params = array(array("groupid" => $this->group->id, "userid" => 654685), array("groupid" => $this->group->id, "userid" => $this->userid4));
$this->expectException(new moodle_exception('useriddoesntexist'));
$result = group_external::tmp_add_groupmembers($params);
}
function testTmp_add_group_members2() {
//the group id doesn't exist
$params = array(array("groupid" => 6465465, "userid" => $this->userid3), array("groupid" => $this->group->id, "userid" => $this->userid4));
$result = group_external::tmp_add_groupmembers($params);
$this->assertEqual($result, false);
}
function testTmp_delete_group_members() {
//One of the userid doesn't exist
$params = array(array("groupid" => $this->group->id, "userid" => 654685), array("groupid" => $this->group->id, "userid" => $this->userid2));
$this->expectException(new moodle_exception('useriddoesntexist'));
$result = group_external::tmp_delete_groupmembers($params);
}
function testTmp_delete_group_members2() {
//the group id doesn't exist
$params = array(array("groupid" => 6465465, "userid" => $this->userid1), array("groupid" => $this->group->id, "userid" => $this->userid2));
$result = group_external::tmp_delete_groupmembers($params);
$this->assertEqual($result, false);
}
function testTmp_delete_group_members3() {
//delete members from group
$params = array(array("groupid" => $this->group->id, "userid" => $this->userid1), array("groupid" => $this->group->id, "userid" => $this->userid2));
$result = group_external::tmp_delete_groupmembers($params);
$this->assertEqual($result, true);
}
function testTmp_delete_groups() {
$params = array($this->group->id, $this->group2->id);
$result = group_external::tmp_delete_groups($params);
$this->assertEqual($result, true);
//Exception: delete same groups
$params = array($this->group->id, $this->group2->id);
$this->expectException(new moodle_exception('groupiddoesntexistcannotdelete'));
$result = group_external::tmp_delete_groups($params);
}
*/
}
?>