]> git.mjollnir.org Git - moodle.git/commitdiff
web service MDL-12886 Add unit tests for Group web service functions.
authorjerome <jerome>
Mon, 9 Mar 2009 02:19:38 +0000 (02:19 +0000)
committerjerome <jerome>
Mon, 9 Mar 2009 02:19:38 +0000 (02:19 +0000)
group/external.php
group/lib.php
group/simpletest/testexternal.php [new file with mode: 0644]

index c7f324dd407fb076bf3ea09af2901c427fc9e89c..0faf5b7099d35b0f1f8ca686a60ba801209c4367 100644 (file)
@@ -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');
+        }
+    }
 
 }
 
index c3320b4ec1e8da86348ef43147bcb773341838e7..ce13188022416d2decb1bdfaa9afd942b0d38375 100644 (file)
 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 (file)
index 0000000..5697fbd
--- /dev/null
@@ -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);
+    }
+*/
+}
+?>
\ No newline at end of file