From 2061e59c455b777358fc051d2f2cd73c94505b73 Mon Sep 17 00:00:00 2001 From: jerome Date: Mon, 9 Mar 2009 02:19:38 +0000 Subject: [PATCH] web service MDL-12886 Add unit tests for Group web service functions. --- group/external.php | 204 ++++++++++++++++++++----- group/lib.php | 17 ++- group/simpletest/testexternal.php | 241 ++++++++++++++++++++++++++++++ 3 files changed, 425 insertions(+), 37 deletions(-) create mode 100644 group/simpletest/testexternal.php diff --git a/group/external.php b/group/external.php index c7f324dd40..0faf5b7099 100644 --- a/group/external.php +++ b/group/external.php @@ -6,6 +6,7 @@ * @author Jordi Piguillem * @author David Castro * @author Ferran Recio + * @author Jerome Mouneyrac */ 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))) { $group = new stdClass; - $group->courseid = $params['courseid']; - $group->name = $params['groupname']; + $group->courseid = $params['courseid']; + $group->name = $params['groupname']; - // @TODO: groups_create_group() does not check courseid - return groups_create_group($group, false); + // @TODO: groups_create_group() does not check courseid + return groups_create_group($group, false); } else { 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 * @subparam integer $params->groupid * @return object $return @@ -52,20 +114,20 @@ final class group_external { * @subreturn string $return->group->name * @subreturn string $return->group->enrolmentkey */ - static function tmp_get_group($params){ + static function tmp_get_group($params){ - // @TODO: any capability to check? - $group = groups_get_group($params['groupid']); + // @TODO: any capability to check? + $group = groups_get_group($params['groupid']); - $ret = new StdClass(); - $ret->id = $group->id; - $ret->courseid = $group->courseid; - $ret->name = $group->name; - $ret->enrolmentkey = $group->enrolmentkey; + $ret = new StdClass(); + $ret->id = $group->id; + $ret->courseid = $group->courseid; + $ret->name = $group->name; + $ret->enrolmentkey = $group->enrolmentkey; - return $ret; + return $ret; - } + } /** @@ -74,17 +136,39 @@ final class group_external { * @subparam integer $params->groupid * @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 - return groups_delete_group($params['groupid']); - } - else { + // @TODO groups_add_member() does not check userid + return groups_delete_group($params['groupid']); + } + else { 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 * @return boolean result */ - static function tmp_get_groupmember($params){ - } + static function tmp_get_groupmember($params){ + } /** * Add a member to a group @@ -103,17 +187,42 @@ final class group_external { * @subparam integer $params->userid * @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 - return groups_add_member($params['groupid'], $params['userid']); - } - else { + // @TODO groups_add_member() does not check userid + return groups_add_member($params['groupid'], $params['userid']); + } + else { 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 * @return boolean result */ - static function tmp_delete_groupmember($params){ - if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) { + static function tmp_delete_groupmember($params){ + if (has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_SYSTEM))) { - return groups_remove_member($params['groupid'], $params['userid']); - } else { + return groups_remove_member($params['groupid'], $params['userid']); + } else { 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'); + } + } } diff --git a/group/lib.php b/group/lib.php index c3320b4ec1..ce13188022 100644 --- a/group/lib.php +++ b/group/lib.php @@ -23,6 +23,10 @@ function groups_add_member($groupid, $userid) { global $DB; + if (! $DB->record_exists('user', array('id'=>$userid))) { + throw new moodle_exception('useriddoesntexist'); + } + if (!groups_group_exists($groupid)) { return false; } @@ -59,6 +63,10 @@ function groups_add_member($groupid, $userid) { function groups_remove_member($groupid, $userid) { global $DB; + if (! $DB->record_exists('user', array('id'=>$userid))) { + throw new moodle_exception('useriddoesntexist'); + } + if (!groups_group_exists($groupid)) { return false; } @@ -90,6 +98,13 @@ function groups_remove_member($groupid, $userid) { function groups_create_group($data, $editform=false) { global $CFG, $DB; 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->timemodified = $data->timecreated; @@ -191,7 +206,7 @@ function groups_delete_group($grouporid) { } else { $groupid = $grouporid; if (!$group = $DB->get_record('groups', array('id'=>$groupid))) { - return false; + throw new moodle_exception('groupiddoesntexistcannotdelete');; } } diff --git a/group/simpletest/testexternal.php b/group/simpletest/testexternal.php new file mode 100644 index 0000000000..5697fbdd63 --- /dev/null +++ b/group/simpletest/testexternal.php @@ -0,0 +1,241 @@ + 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); + } +*/ +} +?> \ No newline at end of file -- 2.39.5