Moodle  2.2.1
http://www.collinsharper.com
C:/xampp/htdocs/moodle/webservice/simpletest/testwebservice.php
Go to the documentation of this file.
00001 <?php
00002 
00003 // This file is part of Moodle - http://moodle.org/
00004 //
00005 // Moodle is free software: you can redistribute it and/or modify
00006 // it under the terms of the GNU General Public License as published by
00007 // the Free Software Foundation, either version 3 of the License, or
00008 // (at your option) any later version.
00009 //
00010 // Moodle is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 // GNU General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU General Public License
00016 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
00017 
00025 if (!defined('MOODLE_INTERNAL')) {
00027     die('Direct access to this script is forbidden.');
00028 }
00029 
00048 class webservice_test extends UnitTestCase {
00049 
00050     public $testtoken;
00051     public $testrest;
00052     public $testxmlrpc;
00053     public $testsoap;
00054     public $timerrest;
00055     public $timerxmlrpc;
00056     public $timersoap;
00057     public $readonlytests;
00058     public $writetests;
00059 
00060     function setUp() {
00061         //token to test
00062         $this->testtoken = 'acabec9d20933913f14309785324f579';
00063 
00064         //protocols to test
00065         $this->testrest = false; //Does not work till XML => PHP is implemented (MDL-22965)
00066         $this->testxmlrpc = false;
00067         $this->testsoap = false;
00068 
00070         $this->readonlytests = array(
00071             'moodle_group_get_groups' => false,
00072             'moodle_course_get_courses' => false,
00073             'moodle_user_get_users_by_id' => false,
00074             'moodle_enrol_get_enrolled_users' => false,
00075             'moodle_group_get_course_groups' => false,
00076             'moodle_group_get_groupmembers' => false,
00077             'moodle_webservice_get_siteinfo' => false,
00078             'core_course_get_contents' => false
00079         );
00080 
00082         $this->writetests = array(
00083             'moodle_user_create_users' => false,
00084             'moodle_course_create_courses' => false,
00085             'moodle_user_delete_users' => false,
00086             'moodle_user_update_users' => false,
00087             'moodle_role_assign' => false,
00088             'moodle_role_unassign' => false,
00089             'moodle_group_add_groupmembers' => false,
00090             'moodle_group_delete_groupmembers' => false,
00091             'moodle_group_create_groups' => false,
00092             'moodle_group_delete_groups' => false,
00093             'moodle_enrol_manual_enrol_users' => false,
00094             'moodle_message_send_messages' => false,
00095             'moodle_notes_create_notes' => false
00096         );
00097 
00098         //performance testing: number of time the web service are run
00099         $this->iteration = 1;
00100 
00101         //DO NOT CHANGE
00102         //reset the timers
00103         $this->timerrest = 0;
00104         $this->timerxmlrpc = 0;
00105         $this->timersoap = 0;
00106     }
00107 
00108     function testRun() {
00109         global $CFG;
00110 
00111         if (!$this->testrest and !$this->testxmlrpc and !$this->testsoap) {
00112             print_r("Web service unit tests are not run as not setup.
00113                 (see /webservice/simpletest/testwebservice.php)");
00114         }
00115 
00116         if (!empty($this->testtoken)) {
00117 
00118             //Does not work till XML => PHP is implemented (MDL-22965)
00119             if ($this->testrest) {
00120 
00121                 $this->timerrest = time();
00122 
00123                 require_once($CFG->dirroot . "/webservice/rest/lib.php");
00124                 $restclient = new webservice_rest_client($CFG->wwwroot
00125                                 . '/webservice/rest/server.php', $this->testtoken);
00126 
00127                 for ($i = 1; $i <= $this->iteration; $i = $i + 1) {
00128                     foreach ($this->readonlytests as $functioname => $run) {
00129                         if ($run) {
00130                             //$this->{$functioname}($restclient);
00131                         }
00132                     }
00133                     foreach ($this->writetests as $functioname => $run) {
00134                         if ($run) {
00135                             //$this->{$functioname}($restclient);
00136                         }
00137                     }
00138                 }
00139 
00140                 $this->timerrest = time() - $this->timerrest;
00141                 //here you could call a log function to display the timer
00142                 //example:
00143                 //error_log('REST time: ');
00144                 //error_log(print_r($this->timerrest));
00145             }
00146 
00147             if ($this->testxmlrpc) {
00148 
00149                 $this->timerxmlrpc = time();
00150 
00151                 require_once($CFG->dirroot . "/webservice/xmlrpc/lib.php");
00152                 $xmlrpcclient = new webservice_xmlrpc_client($CFG->wwwroot
00153                                 . '/webservice/xmlrpc/server.php', $this->testtoken);
00154 
00155                 for ($i = 1; $i <= $this->iteration; $i = $i + 1) {
00156                     foreach ($this->readonlytests as $functioname => $run) {
00157                         if ($run) {
00158                             $this->{$functioname}($xmlrpcclient);
00159                         }
00160                     }
00161                     foreach ($this->writetests as $functioname => $run) {
00162                         if ($run) {
00163                             $this->{$functioname}($xmlrpcclient);
00164                         }
00165                     }
00166                 }
00167 
00168                 $this->timerxmlrpc = time() - $this->timerxmlrpc;
00169                 //here you could call a log function to display the timer
00170                 //example:
00171                 //error_log('XML-RPC time: ');
00172                 //error_log(print_r($this->timerxmlrpc));
00173             }
00174 
00175             if ($this->testsoap) {
00176 
00177                 $this->timersoap = time();
00178 
00179                 require_once($CFG->dirroot . "/webservice/soap/lib.php");
00180                 $soapclient = new webservice_soap_client($CFG->wwwroot
00181                                 . '/webservice/soap/server.php', $this->testtoken,
00182                         array("features" => SOAP_WAIT_ONE_WAY_CALLS)); //force SOAP synchronous mode
00183                                                                      //when function return null
00184                 $soapclient->setWsdlCache(false);
00185 
00186                 for ($i = 1; $i <= $this->iteration; $i = $i + 1) {
00187                     foreach ($this->readonlytests as $functioname => $run) {
00188                         if ($run) {
00189                             $this->{$functioname}($soapclient);
00190                         }
00191                     }
00192                     foreach ($this->writetests as $functioname => $run) {
00193                         if ($run) {
00194                             $this->{$functioname}($soapclient);
00195                         }
00196                     }
00197                 }
00198 
00199                 $this->timersoap = time() - $this->timersoap;
00200                 //here you could call a log function to display the timer
00201                 //example:
00202                 //error_log('SOAP time: ');
00203                 //error_log(print_r($this->timersoap));
00204             }
00205         }
00206     }
00207 
00209 
00210     function moodle_group_get_groups($client) {
00211         global $DB;
00212         $dbgroups = $DB->get_records('groups');
00213         $groupids = array();
00214         foreach ($dbgroups as $dbgroup) {
00215             $groupids[] = $dbgroup->id;
00216         }
00217         $function = 'moodle_group_get_groups';
00218 
00219         $params = array('groupids' => $groupids);
00220         $groups = $client->call($function, $params);
00221         $this->assertEqual(count($groups), count($groupids));
00222     }
00223 
00224     function moodle_webservice_get_siteinfo($client) {
00225         global $SITE, $CFG;
00226 
00227         $function = 'moodle_webservice_get_siteinfo';
00228 
00229         $params = array();
00230         $info = $client->call($function, $params);
00231 
00232         $this->assertEqual($info['sitename'], $SITE->fullname);
00233         $this->assertEqual($info['siteurl'],  $CFG->wwwroot);
00234     }
00235 
00236     function moodle_user_get_users_by_id($client) {
00237         global $DB;
00238         $dbusers = $DB->get_records('user', array('deleted' => 0));
00239         $userids = array();
00240         foreach ($dbusers as $dbuser) {
00241             $userids[] = $dbuser->id;
00242         }
00243         $function = 'moodle_user_get_users_by_id';
00244 
00245         $params = array('userids' => $userids);
00246         $users = $client->call($function, $params);
00247 
00248         $this->assertEqual(count($users), count($userids));
00249     }
00250 
00251     function core_course_get_contents($client) {
00252         global $DB, $CFG;
00253         $dbcourses = $DB->get_records('course');
00254         $function = 'core_course_get_contents';
00255 
00256         $coursecontents = array();
00257 
00258         foreach ($dbcourses as $dbcourse) {
00259             $params = array('courseid' => $dbcourse->id);
00260 
00261             if (file_exists($CFG->dirroot . '/' . '/course/format/' . $dbcourse->format . '/lib.php')) {
00262                 $coursecontents = $client->call($function, $params);
00263             }
00264 
00265             //Display the content of $coursecontents in your php log and check if you obtain
00266             //what you are expecting
00267             //error_log(print_r($coursecontents, true));
00268         }
00269     }
00270 
00277     function moodle_enrol_manual_enrol_users($client) {
00278         global $DB, $CFG;
00279 
00280         require_once($CFG->dirroot . "/user/lib.php");
00281         require_once($CFG->dirroot . "/user/profile/lib.php");
00282         require_once($CFG->dirroot . "/lib/enrollib.php");
00283 
00284         //Delete some previous test data
00285         if ($user = $DB->get_record('user', array('username' => 'veryimprobabletestusername2'))) {
00286             $DB->delete_records('user', array('id' => $user->id));
00287         }
00288         if ($role = $DB->get_record('role', array('shortname' => 'role1thatshouldnotexist'))) {
00289             set_role_contextlevels($role->id, array(CONTEXT_COURSE));
00290             delete_role($role->id);
00291         }
00292 
00293         //create a user
00294         $user = new stdClass();
00295         $user->username = 'veryimprobabletestusername2';
00296         $user->password = 'testpassword2';
00297         $user->firstname = 'testfirstname2';
00298         $user->lastname = 'testlastname2';
00299         $user->email = 'testemail1@moodle.com';
00300         $user->id = user_create_user($user);
00301 
00302         $roleid = create_role('role1thatshouldnotexist', 'role1thatshouldnotexist', '');
00303         set_role_contextlevels($roleid, array(CONTEXT_COURSE));
00304 
00305         $enrolments = array();
00306         $courses = $DB->get_records('course');
00307 
00308         foreach ($courses as $course) {
00309             if ($course->id > 1) {
00310                 $enrolments[] = array('roleid' => $roleid,
00311                     'userid' => $user->id, 'courseid' => $course->id);
00312                 $enrolledcourses[] = $course;
00313             }
00314         }
00315 
00316         //web service call
00317         $function = 'moodle_enrol_manual_enrol_users';
00318         $wsparams = array('enrolments' => $enrolments);
00319         $enrolmentsresult = $client->call($function, $wsparams);
00320 
00321         //get instance that can unenrol
00322         $enrols = enrol_get_plugins(true);
00323         $enrolinstances = enrol_get_instances($course->id, true);
00324         $unenrolled = false;
00325         foreach ($enrolinstances as $instance) {
00326             if (!$unenrolled and $enrols[$instance->enrol]->allow_unenrol($instance)) {
00327                 $unenrolinstance = $instance;
00328                 $unenrolled = true;
00329             }
00330         }
00331 
00332         //test and unenrol the user
00333         $enrolledusercourses = enrol_get_users_courses($user->id);
00334         foreach ($enrolledcourses as $course) {
00335             //test
00336             $this->assertEqual(true, isset($enrolledusercourses[$course->id]));
00337 
00338             //unenrol the user
00339             $enrols[$unenrolinstance->enrol]->unenrol_user($unenrolinstance, $user->id, $roleid);
00340         }
00341 
00342         //delete user
00343         $DB->delete_records('user', array('id' => $user->id));
00344 
00345         //delete the context level
00346         set_role_contextlevels($roleid, array(CONTEXT_COURSE));
00347 
00348         //delete role
00349         delete_role($roleid);
00350     }
00351 
00352 
00353     function moodle_enrol_get_enrolled_users($client) {
00354         global $DB;
00355 
00356         //function settings
00357         $withcapability = '';
00358         $groupid = null;
00359         $onlyactive = false;
00360 
00361         $dbcourses = $DB->get_records('course');
00362         $function = 'moodle_enrol_get_enrolled_users';
00363 
00364         foreach ($dbcourses as $dbcourse) {
00365 
00366             $params = array();
00367 
00368             $coursecontext = get_context_instance(CONTEXT_COURSE, $dbcourse->id);
00369 
00370             list($sql, $params) = get_enrolled_sql($coursecontext, $withcapability, $groupid, $onlyactive);
00371             $sql = "SELECT DISTINCT ue.userid, e.courseid
00372                       FROM {user_enrolments} ue
00373                       JOIN {enrol} e ON (e.id = ue.enrolid)
00374                      WHERE e.courseid = :courseid AND ue.userid IN ($sql)";
00375 
00376             $params['courseid'] = $dbcourse->id;
00377 
00378             $enrolledusers = $DB->get_records_sql($sql, $params);
00379 
00380             $wsparams = array('courseid' => $dbcourse->id, 'withcapability' => $withcapability,
00381                 'groupid' => $groupid, 'onlyactive' => $onlyactive);
00382             $resultusers = $client->call($function, $wsparams);
00383 
00384             $this->assertEqual(count($resultusers), count($enrolledusers));
00385         }
00386     }
00387 
00388     function moodle_course_get_courses($client) {
00389         global $DB;
00390 
00391         $function = 'moodle_course_get_courses';
00392 
00393         //retrieve all courses from db
00394         $dbcourses = $DB->get_records('course');
00395         $courseids = array();
00396         foreach ($dbcourses as $dbcourse) {
00397             $courseids[] = $dbcourse->id;
00398         }
00399 
00400         //retrieve all courses by id
00401         $params = array('options' => array('ids' => $courseids));
00402         $courses = $client->call($function, $params);
00403 
00404         //check it is the same course count
00405         $this->assertEqual(count($courses), count($courseids));
00406 
00407         //check all course values are identic
00408         foreach ($courses as $course) {
00409             $this->assertEqual($course['fullname'],
00410                     $dbcourses[$course['id']]->fullname);
00411             $this->assertEqual($course['shortname'],
00412                     $dbcourses[$course['id']]->shortname);
00413             $this->assertEqual($course['categoryid'],
00414                     $dbcourses[$course['id']]->category);
00415             $this->assertEqual($course['categorysortorder'],
00416                     $dbcourses[$course['id']]->sortorder);
00417             $this->assertEqual($course['idnumber'],
00418                     $dbcourses[$course['id']]->idnumber);
00419             $this->assertEqual($course['summary'],
00420                     $dbcourses[$course['id']]->summary);
00421             $this->assertEqual($course['summaryformat'],
00422                     $dbcourses[$course['id']]->summaryformat);
00423             $this->assertEqual($course['format'],
00424                     $dbcourses[$course['id']]->format);
00425             $this->assertEqual($course['showgrades'],
00426                     $dbcourses[$course['id']]->showgrades);
00427             $this->assertEqual($course['newsitems'],
00428                     $dbcourses[$course['id']]->newsitems);
00429             $this->assertEqual($course['startdate'],
00430                     $dbcourses[$course['id']]->startdate);
00431             $this->assertEqual($course['numsections'],
00432                     $dbcourses[$course['id']]->numsections);
00433             $this->assertEqual($course['maxbytes'],
00434                     $dbcourses[$course['id']]->maxbytes);
00435             $this->assertEqual($course['visible'],
00436                     $dbcourses[$course['id']]->visible);
00437             $this->assertEqual($course['hiddensections'],
00438                     $dbcourses[$course['id']]->hiddensections);
00439             $this->assertEqual($course['groupmode'],
00440                     $dbcourses[$course['id']]->groupmode);
00441             $this->assertEqual($course['groupmodeforce'],
00442                     $dbcourses[$course['id']]->groupmodeforce);
00443             $this->assertEqual($course['defaultgroupingid'],
00444                     $dbcourses[$course['id']]->defaultgroupingid);
00445             $this->assertEqual($course['lang'],
00446                     $dbcourses[$course['id']]->lang);
00447             $this->assertEqual($course['timecreated'],
00448                     $dbcourses[$course['id']]->timecreated);
00449             $this->assertEqual($course['timemodified'],
00450                     $dbcourses[$course['id']]->timemodified);
00451             if (key_exists('enablecompletion', $course)) {
00452                 $this->assertEqual($course['enablecompletion'],
00453                         $dbcourses[$course['id']]->enablecompletion);
00454             }
00455             if (key_exists('completionstartonenrol', $course)) {
00456                 $this->assertEqual($course['completionstartonenrol'],
00457                         $dbcourses[$course['id']]->completionstartonenrol);
00458             }
00459             if (key_exists('completionnotify', $course)) {
00460                 $this->assertEqual($course['completionnotify'],
00461                         $dbcourses[$course['id']]->completionnotify);
00462             }
00463             $this->assertEqual($course['forcetheme'],
00464                     $dbcourses[$course['id']]->theme);
00465         }
00466     }
00467 
00468     function moodle_course_create_courses($client) {
00469         global $DB, $CFG;
00470 
00472         $courseconfig = get_config('moodlecourse');
00473 
00474         $themeobjects = get_list_of_themes();
00475         $theme = key($themeobjects);
00476         $categoryid = $DB->get_record('course_categories', array(), '*', IGNORE_MULTIPLE)->id;
00477         $categoryid = empty($categoryid) ? 0 : $categoryid;
00478 
00479         $course1 = new stdClass();
00480         $course1->fullname = 'Test Data create course 1';
00481         $course1->shortname = 'testdatacourse1';
00482         $course1->categoryid = $categoryid;
00483         $course1->idnumber = '328327982372342343234';
00484         $course1->summary = 'This is a summary';
00485         $course1->summaryformat = FORMAT_HTML;
00486         $course1->format = $courseconfig->format;
00487         $course1->showgrades = $courseconfig->showgrades;
00488         $course1->showreports = $courseconfig->showreports;
00489         $course1->newsitems = $courseconfig->newsitems;
00490         $course1->startdate = time();
00491         $course1->numsections = $courseconfig->numsections;
00492         $course1->maxbytes = $courseconfig->maxbytes;
00493         $course1->visible = $courseconfig->visible;
00494         $course1->hiddensections = $courseconfig->hiddensections;
00495         $course1->groupmode = $courseconfig->groupmode;
00496         $course1->groupmodeforce = $courseconfig->groupmodeforce;
00497         $course1->defaultgroupingid = 0;
00498         if (!empty($courseconfig->lang)) {
00499             $course1->lang = $courseconfig->lang;
00500         }
00501         $course1->enablecompletion = $courseconfig->enablecompletion;
00502         $course1->completionstartonenrol = $courseconfig->completionstartonenrol;
00503         $course1->completionnotify = 0;
00504         $course1->forcetheme = $theme;
00505 
00506         $course2 = new stdClass();
00507         $course2->fullname = 'Test Data create course 2';
00508         $course2->shortname = 'testdatacourse2';
00509         $course2->categoryid = $categoryid;
00510 
00511         $courses = array($course1, $course2);
00512 
00513         //do not run the test if course1 or course2 already exists
00514         $existingcourses = $DB->get_records_list('course', 'fullname',
00515                         array($course1->fullname, $course2->fullname));
00516         if (!empty($existingcourses)) {
00517             throw new moodle_exception('testdatacoursesalreadyexist');
00518         }
00519 
00520         $function = 'moodle_course_create_courses';
00521         $params = array('courses' => $courses);
00522         $resultcourses = $client->call($function, $params);
00523         $this->assertEqual(count($courses), count($resultcourses));
00524 
00525         //retrieve user1 from the DB and check values
00526         $dbcourse1 = $DB->get_record('course', array('fullname' => $course1->fullname));
00527         $this->assertEqual($dbcourse1->fullname, $course1->fullname);
00528         $this->assertEqual($dbcourse1->shortname, $course1->shortname);
00529         $this->assertEqual($dbcourse1->category, $course1->categoryid);
00530         $this->assertEqual($dbcourse1->idnumber, $course1->idnumber);
00531         $this->assertEqual($dbcourse1->summary, $course1->summary);
00532         $this->assertEqual($dbcourse1->summaryformat, $course1->summaryformat);
00533         $this->assertEqual($dbcourse1->format, $course1->format);
00534         $this->assertEqual($dbcourse1->showgrades, $course1->showgrades);
00535         $this->assertEqual($dbcourse1->showreports, $course1->showreports);
00536         $this->assertEqual($dbcourse1->newsitems, $course1->newsitems);
00537         $this->assertEqual($dbcourse1->startdate, $course1->startdate);
00538         $this->assertEqual($dbcourse1->numsections, $course1->numsections);
00539         $this->assertEqual($dbcourse1->maxbytes, $course1->maxbytes);
00540         $this->assertEqual($dbcourse1->visible, $course1->visible);
00541         $this->assertEqual($dbcourse1->hiddensections, $course1->hiddensections);
00542         $this->assertEqual($dbcourse1->groupmode, $course1->groupmode);
00543         $this->assertEqual($dbcourse1->groupmodeforce, $course1->groupmodeforce);
00544         $this->assertEqual($dbcourse1->defaultgroupingid, $course1->defaultgroupingid);
00545         if (!empty($courseconfig->lang)) {
00546             $this->assertEqual($dbcourse1->lang, $course1->lang);
00547         }
00548         if (completion_info::is_enabled_for_site()) {
00549             $this->assertEqual($dbcourse1->enablecompletion, $course1->enablecompletion);
00550             $this->assertEqual($dbcourse1->completionstartonenrol, $course1->completionstartonenrol);
00551         }
00552         $this->assertEqual($dbcourse1->completionnotify, $course1->completionnotify);
00553         if (!empty($CFG->allowcoursethemes)) {
00554             $this->assertEqual($dbcourse1->theme, $course1->forcetheme);
00555         }
00556 
00557         //retrieve user2 from the DB and check values
00558         $dbcourse2 = $DB->get_record('course', array('fullname' => $course2->fullname));
00559         $this->assertEqual($dbcourse2->fullname, $course2->fullname);
00560         $this->assertEqual($dbcourse2->shortname, $course2->shortname);
00561         $this->assertEqual($dbcourse2->category, $course2->categoryid);
00562         $this->assertEqual($dbcourse2->summaryformat, FORMAT_MOODLE);
00563         $this->assertEqual($dbcourse2->format, $courseconfig->format);
00564         $this->assertEqual($dbcourse2->showgrades, $courseconfig->showgrades);
00565         $this->assertEqual($dbcourse2->showreports, $courseconfig->showreports);
00566         $this->assertEqual($dbcourse2->newsitems, $courseconfig->newsitems);
00567         $this->assertEqual($dbcourse2->numsections, $courseconfig->numsections);
00568         $this->assertEqual($dbcourse2->maxbytes, $courseconfig->maxbytes);
00569         $this->assertEqual($dbcourse2->visible, $courseconfig->visible);
00570         $this->assertEqual($dbcourse2->hiddensections, $courseconfig->hiddensections);
00571         $this->assertEqual($dbcourse2->groupmode, $courseconfig->groupmode);
00572         $this->assertEqual($dbcourse2->groupmodeforce, $courseconfig->groupmodeforce);
00573         $this->assertEqual($dbcourse2->defaultgroupingid, 0);
00574 
00575         //delete users from DB
00576         $DB->delete_records_list('course', 'id',
00577                 array($dbcourse1->id, $dbcourse2->id));
00578     }
00579 
00580     function moodle_user_create_users($client) {
00581         global $DB, $CFG;
00582 
00583         //Test data
00584         //a full user: user1
00585         $user1 = new stdClass();
00586         $user1->username = 'testusername1';
00587         $user1->password = 'testpassword1';
00588         $user1->firstname = 'testfirstname1';
00589         $user1->lastname = 'testlastname1';
00590         $user1->email = 'testemail1@moodle.com';
00591         $user1->auth = 'manual';
00592         $user1->idnumber = 'testidnumber1';
00593         $user1->lang = 'en';
00594         $user1->theme = 'standard';
00595         $user1->timezone = '-12.5';
00596         $user1->mailformat = 0;
00597         $user1->description = 'Hello World!';
00598         $user1->city = 'testcity1';
00599         $user1->country = 'au';
00600         $preferencename1 = 'preference1';
00601         $preferencename2 = 'preference2';
00602         $user1->preferences = array(
00603             array('type' => $preferencename1, 'value' => 'preferencevalue1'),
00604             array('type' => $preferencename2, 'value' => 'preferencevalue2'));
00605         $customfieldname1 = 'testdatacustom1';
00606         $customfieldname2 = 'testdatacustom2';
00607         $user1->customfields = array(
00608             array('type' => $customfieldname1, 'value' => 'customvalue'),
00609             array('type' => $customfieldname2, 'value' => 'customvalue2'));
00610         //a small user: user2
00611         $user2 = new stdClass();
00612         $user2->username = 'testusername2';
00613         $user2->password = 'testpassword2';
00614         $user2->firstname = 'testfirstname2';
00615         $user2->lastname = 'testlastname2';
00616         $user2->email = 'testemail1@moodle.com';
00617         $user2->timezone = 'Pacific/Port_Moresby';
00618 
00619         $users = array($user1, $user2);
00620 
00621         //do not run the test if user1 or user2 already exists
00622         $existingusers = $DB->get_records_list('user', 'username',
00623                         array($user1->username, $user2->username));
00624         if (!empty($existingusers)) {
00625             throw new moodle_exception('testdatausersalreadyexist');
00626         }
00627 
00628         //do not run the test if data test custom fields already exists
00629         $existingcustomfields = $DB->get_records_list('user_info_field', 'shortname',
00630                         array($customfieldname1, $customfieldname2));
00631         if (!empty($existingcustomfields)) {
00632             throw new moodle_exception('testdatacustomfieldsalreadyexist');
00633         }
00634 
00635         //create the custom fields
00636         $customfield = new stdClass();
00637         $customfield->shortname = $customfieldname1;
00638         $customfield->name = $customfieldname1;
00639         $customfield->datatype = 'text';
00640         $DB->insert_record('user_info_field', $customfield);
00641         $customfield = new stdClass();
00642         $customfield->shortname = $customfieldname2;
00643         $customfield->name = $customfieldname2;
00644         $customfield->datatype = 'text';
00645         $DB->insert_record('user_info_field', $customfield);
00646 
00647         $function = 'moodle_user_create_users';
00648         $params = array('users' => $users);
00649         $resultusers = $client->call($function, $params);
00650         $this->assertEqual(count($users), count($resultusers));
00651 
00652         //retrieve user1 from the DB and check values
00653         $dbuser1 = $DB->get_record('user', array('username' => $user1->username));
00654         $this->assertEqual($dbuser1->firstname, $user1->firstname);
00655         $this->assertEqual($dbuser1->password,
00656                 hash_internal_user_password($user1->password));
00657         $this->assertEqual($dbuser1->lastname, $user1->lastname);
00658         $this->assertEqual($dbuser1->email, $user1->email);
00659         $this->assertEqual($dbuser1->auth, $user1->auth);
00660         $this->assertEqual($dbuser1->idnumber, $user1->idnumber);
00661         $this->assertEqual($dbuser1->lang, $user1->lang);
00662         $this->assertEqual($dbuser1->theme, $user1->theme);
00663         $this->assertEqual($dbuser1->timezone, $user1->timezone);
00664         $this->assertEqual($dbuser1->mailformat, $user1->mailformat);
00665         $this->assertEqual($dbuser1->description, $user1->description);
00666         $this->assertEqual($dbuser1->city, $user1->city);
00667         $this->assertEqual($dbuser1->country, $user1->country);
00668         $user1preference1 = get_user_preferences($user1->preferences[0]['type'],
00669                         null, $dbuser1->id);
00670         $this->assertEqual($user1->preferences[0]['value'], $user1preference1);
00671         $user1preference2 = get_user_preferences($user1->preferences[1]['type'],
00672                         null, $dbuser1->id);
00673         $this->assertEqual($user1->preferences[1]['value'], $user1preference2);
00674         require_once($CFG->dirroot . "/user/profile/lib.php");
00675         $customfields = profile_user_record($dbuser1->id);
00676 
00677         $customfields = (array) $customfields;
00678         $customfieldname1 = $user1->customfields[0]['type'];
00679         $customfieldname2 = $user1->customfields[1]['type'];
00680         $this->assertEqual($customfields[$customfieldname1],
00681                 $user1->customfields[0]['value']);
00682         $this->assertEqual($customfields[$customfieldname2],
00683                 $user1->customfields[1]['value']);
00684 
00685 
00686         //retrieve user2 from the DB and check values
00687         $dbuser2 = $DB->get_record('user', array('username' => $user2->username));
00688         $this->assertEqual($dbuser2->firstname, $user2->firstname);
00689         $this->assertEqual($dbuser2->password,
00690                 hash_internal_user_password($user2->password));
00691         $this->assertEqual($dbuser2->lastname, $user2->lastname);
00692         $this->assertEqual($dbuser2->email, $user2->email);
00693         $this->assertEqual($dbuser2->timezone, $user2->timezone);
00694 
00695         //unset preferences
00696         $DB->delete_records('user_preferences', array('userid' => $dbuser1->id));
00697 
00698         //clear custom fields data
00699         $DB->delete_records('user_info_data', array('userid' => $dbuser1->id));
00700 
00701         //delete custom fields
00702         $DB->delete_records_list('user_info_field', 'shortname',
00703                 array($customfieldname1, $customfieldname2));
00704 
00705         //delete users from DB
00706         $DB->delete_records_list('user', 'id',
00707                 array($dbuser1->id, $dbuser2->id));
00708     }
00709 
00710     function moodle_user_delete_users($client) {
00711         global $DB, $CFG;
00712 
00713         //Set test data
00714         //a full user: user1
00715         $user1 = new stdClass();
00716         $user1->username = 'veryimprobabletestusername1';
00717         $user1->password = 'testpassword1';
00718         $user1->firstname = 'testfirstname1';
00719         $user1->lastname = 'testlastname1';
00720         $user1->email = 'testemail1@moodle.com';
00721         $user1->auth = 'manual';
00722         $user1->idnumber = 'testidnumber1';
00723         $user1->lang = 'en';
00724         $user1->theme = 'standard';
00725         $user1->timezone = 99;
00726         $user1->mailformat = 0;
00727         $user1->description = 'Hello World!';
00728         $user1->city = 'testcity1';
00729         $user1->country = 'au';
00730         $preferencename1 = 'preference1';
00731         $preferencename2 = 'preference2';
00732         $user1->preferences = array(
00733             array('type' => $preferencename1, 'value' => 'preferencevalue1'),
00734             array('type' => $preferencename2, 'value' => 'preferencevalue2'));
00735         $customfieldname1 = 'testdatacustom1';
00736         $customfieldname2 = 'testdatacustom2';
00737         $user1->customfields = array(
00738             array('type' => $customfieldname1, 'value' => 'customvalue'),
00739             array('type' => $customfieldname2, 'value' => 'customvalue2'));
00740         //a small user: user2
00741         $user2 = new stdClass();
00742         $user2->username = 'veryimprobabletestusername2';
00743         $user2->password = 'testpassword2';
00744         $user2->firstname = 'testfirstname2';
00745         $user2->lastname = 'testlastname2';
00746         $user2->email = 'testemail1@moodle.com';
00747         $users = array($user1, $user2);
00748 
00749         //can run this test only if test usernames don't exist
00750         $searchusers = $DB->get_records_list('user', 'username',
00751                 array($user1->username, $user1->username));
00752         if (count($searchusers) == 0) {
00753             //create two users
00754             require_once($CFG->dirroot."/user/lib.php");
00755             require_once($CFG->dirroot."/user/profile/lib.php");
00756             $user1->id = user_create_user($user1);
00757             // custom fields
00758             if(!empty($user1->customfields)) {
00759                 foreach($user1->customfields as $customfield) {
00760                     $user1->{"profile_field_".$customfield['type']} = $customfield['value'];
00761                 }
00762                 profile_save_data((object) $user1);
00763             }
00764             //preferences
00765             if (!empty($user1->preferences)) {
00766                 foreach($user1->preferences as $preference) {
00767                     set_user_preference($preference['type'], $preference['value'],$user1->id);
00768                 }
00769             }
00770             $user2->id = user_create_user($user2);
00771 
00772             //create the custom fields
00773             $customfield = new stdClass();
00774             $customfield->shortname = $customfieldname1;
00775             $customfield->name = $customfieldname1;
00776             $customfield->datatype = 'text';
00777             $DB->insert_record('user_info_field', $customfield);
00778             $customfield = new stdClass();
00779             $customfield->shortname = $customfieldname2;
00780             $customfield->name = $customfieldname2;
00781             $customfield->datatype = 'text';
00782             $DB->insert_record('user_info_field', $customfield);
00783 
00784             //search for them => TEST they exists
00785             $searchusers = $DB->get_records_list('user', 'username',
00786                     array($user1->username, $user2->username));
00787             $this->assertEqual(count($users), count($searchusers));
00788 
00789             //delete the users by webservice
00790             $function = 'moodle_user_delete_users';
00791             $params = array('users' => array($user1->id, $user2->id));
00792             $client->call($function, $params);
00793 
00794             //search for them => TESTS they don't exists
00795             $searchusers = $DB->get_records_list('user', 'username',
00796                     array($user1->username, $user2->username));
00797            
00798             $this->assertTrue(empty($searchusers));
00799 
00800             //unset preferences
00801             $DB->delete_records('user_preferences', array('userid' => $user1->id));
00802 
00803             //clear custom fields data
00804             $DB->delete_records('user_info_data', array('userid' => $user1->id));
00805 
00806             //delete custom fields
00807             $DB->delete_records_list('user_info_field', 'shortname',
00808                     array($customfieldname1, $customfieldname2));
00809 
00810             //delete users from DB
00811             $DB->delete_records_list('user', 'id',
00812                     array($user1->id, $user2->id));
00813         }
00814     }
00815 
00816     function moodle_user_update_users($client) {
00817         global $DB, $CFG;
00818 
00819         //Set test data
00820         //a full user: user1
00821         $user1 = new stdClass();
00822         $user1->username = 'veryimprobabletestusername1';
00823         $user1->password = 'testpassword1';
00824         $user1->firstname = 'testfirstname1';
00825         $user1->lastname = 'testlastname1';
00826         $user1->email = 'testemail1@moodle.com';
00827         $user1->auth = 'manual';
00828         $user1->idnumber = 'testidnumber1';
00829         $user1->lang = 'en';
00830         $user1->theme = 'standard';
00831         $user1->timezone = 99;
00832         $user1->mailformat = 0;
00833         $user1->description = 'Hello World!';
00834         $user1->city = 'testcity1';
00835         $user1->country = 'au';
00836         $preferencename1 = 'preference1';
00837         $preferencename2 = 'preference2';
00838         $user1->preferences = array(
00839             array('type' => $preferencename1, 'value' => 'preferencevalue1'),
00840             array('type' => $preferencename2, 'value' => 'preferencevalue2'));
00841         $customfieldname1 = 'testdatacustom1';
00842         $customfieldname2 = 'testdatacustom2';
00843         $user1->customfields = array(
00844             array('type' => $customfieldname1, 'value' => 'customvalue'),
00845             array('type' => $customfieldname2, 'value' => 'customvalue2'));
00846         //a small user: user2
00847         $user2 = new stdClass();
00848         $user2->username = 'veryimprobabletestusername2';
00849         $user2->password = 'testpassword2';
00850         $user2->firstname = 'testfirstname2';
00851         $user2->lastname = 'testlastname2';
00852         $user2->email = 'testemail1@moodle.com';
00853         $users = array($user1, $user2);
00854 
00855         //can run this test only if test usernames don't exist
00856         $searchusers = $DB->get_records_list('user', 'username',
00857                 array($user1->username, $user1->username));
00858         if (count($searchusers) == 0) {
00859             //create two users
00860             require_once($CFG->dirroot."/user/lib.php");
00861             require_once($CFG->dirroot."/user/profile/lib.php");
00862             $user1->id = user_create_user($user1);
00863             //unset field created by user_create_user
00864             unset($user1->timemodified);
00865             unset($user1->timecreated);
00866 
00867             // custom fields
00868             if(!empty($user1->customfields)) {
00869                 $customuser1 = new stdClass();
00870                 $customuser1->id = $user1->id;
00871                 foreach($user1->customfields as $customfield) {
00872                     $customuser1->{"profile_field_".$customfield['type']} = $customfield['value'];
00873                 }
00874                 profile_save_data((object) $customuser1);
00875             }
00876             //preferences
00877             if (!empty($user1->preferences)) {
00878                 foreach($user1->preferences as $preference) {
00879                     set_user_preference($preference['type'], $preference['value'],$user1->id);
00880                 }
00881             }
00882             $user2->id = user_create_user($user2);
00883             unset($user2->timemodified);
00884             unset($user2->timecreated);
00885 
00886              //create the custom fields
00887             $customfield = new stdClass();
00888             $customfield->shortname = $customfieldname1;
00889             $customfield->name = $customfieldname1;
00890             $customfield->datatype = 'text';
00891             $DB->insert_record('user_info_field', $customfield);
00892             $customfield = new stdClass();
00893             $customfield->shortname = $customfieldname2;
00894             $customfield->name = $customfieldname2;
00895             $customfield->datatype = 'text';
00896             $DB->insert_record('user_info_field', $customfield);
00897             
00898             //search for them => TEST they exists
00899             $searchusers = $DB->get_records_list('user', 'username',
00900                     array($user1->username, $user2->username));
00901             $this->assertEqual(count($users), count($searchusers));
00902 
00903             //update the test data
00904             $user1->username = 'veryimprobabletestusername1_updated';
00905             $user1->password = 'testpassword1_updated';
00906             $user1->firstname = 'testfirstname1_updated';
00907             $user1->lastname = 'testlastname1_updated';
00908             $user1->email = 'testemail1_updated@moodle.com';
00909             $user1->auth = 'manual';
00910             $user1->idnumber = 'testidnumber1_updated';
00911             $user1->lang = 'en';
00912             $user1->theme = 'standard';
00913             $user1->timezone = 98;
00914             $user1->mailformat = 1;
00915             $user1->description = 'Hello World!_updated';
00916             $user1->city = 'testcity1_updated';
00917             $user1->country = 'au';
00918             $preferencename1 = 'preference1';
00919             $preferencename2 = 'preference2';
00920             $user1->preferences = array(
00921             array('type' => $preferencename1, 'value' => 'preferencevalue1_updated'),
00922             array('type' => $preferencename2, 'value' => 'preferencevalue2_updated'));
00923             $customfieldname1 = 'testdatacustom1';
00924             $customfieldname2 = 'testdatacustom2';
00925             $user1->customfields = array(
00926             array('type' => $customfieldname1, 'value' => 'customvalue_updated'),
00927             array('type' => $customfieldname2, 'value' => 'customvalue2_updated'));
00928             $user2->username = 'veryimprobabletestusername2_updated';
00929             $user2->password = 'testpassword2_updated';
00930             $user2->firstname = 'testfirstname2_updated';
00931             $user2->lastname = 'testlastname2_updated';
00932             $user2->email = 'testemail1_updated@moodle.com';
00933             $users = array($user1, $user2);
00934             
00935             //update the users by web service
00936             $function = 'moodle_user_update_users';
00937             $params = array('users' => $users);
00938             $client->call($function, $params);
00939 
00940             //compare DB user with the test data
00941             $dbuser1 = $DB->get_record('user', array('username' => $user1->username));
00942             $this->assertEqual($dbuser1->firstname, $user1->firstname);
00943             $this->assertEqual($dbuser1->password,
00944                     hash_internal_user_password($user1->password));
00945             $this->assertEqual($dbuser1->lastname, $user1->lastname);
00946             $this->assertEqual($dbuser1->email, $user1->email);
00947             $this->assertEqual($dbuser1->auth, $user1->auth);
00948             $this->assertEqual($dbuser1->idnumber, $user1->idnumber);
00949             $this->assertEqual($dbuser1->lang, $user1->lang);
00950             $this->assertEqual($dbuser1->theme, $user1->theme);
00951             $this->assertEqual($dbuser1->timezone, $user1->timezone);
00952             $this->assertEqual($dbuser1->mailformat, $user1->mailformat);
00953             $this->assertEqual($dbuser1->description, $user1->description);
00954             $this->assertEqual($dbuser1->city, $user1->city);
00955             $this->assertEqual($dbuser1->country, $user1->country);
00956             $user1preference1 = get_user_preferences($user1->preferences[0]['type'],
00957                             null, $dbuser1->id);
00958             $this->assertEqual($user1->preferences[0]['value'], $user1preference1);
00959             $user1preference2 = get_user_preferences($user1->preferences[1]['type'],
00960                             null, $dbuser1->id);
00961             $this->assertEqual($user1->preferences[1]['value'], $user1preference2);
00962             require_once($CFG->dirroot . "/user/profile/lib.php");
00963             $customfields = profile_user_record($dbuser1->id);
00964 
00965             $customfields = (array) $customfields;
00966             $customfieldname1 = $user1->customfields[0]['type'];
00967             $customfieldname2 = $user1->customfields[1]['type'];
00968             $this->assertEqual($customfields[$customfieldname1],
00969                     $user1->customfields[0]['value']);
00970             $this->assertEqual($customfields[$customfieldname2],
00971                     $user1->customfields[1]['value']);
00972 
00973             $dbuser2 = $DB->get_record('user', array('username' => $user2->username));
00974             $this->assertEqual($dbuser2->firstname, $user2->firstname);
00975             $this->assertEqual($dbuser2->password,
00976                     hash_internal_user_password($user2->password));
00977             $this->assertEqual($dbuser2->lastname, $user2->lastname);
00978             $this->assertEqual($dbuser2->email, $user2->email);
00979 
00980             //unset preferences
00981             $DB->delete_records('user_preferences', array('userid' => $dbuser1->id));
00982 
00983             //clear custom fields data
00984             $DB->delete_records('user_info_data', array('userid' => $dbuser1->id));
00985 
00986             //delete custom fields
00987             $DB->delete_records_list('user_info_field', 'shortname',
00988                     array($customfieldname1, $customfieldname2));
00989 
00990             //delete users from DB
00991             $DB->delete_records_list('user', 'id',
00992                     array($dbuser1->id, $dbuser2->id));
00993 
00994         }
00995     }
00996 
00997     function moodle_role_assign($client) {
00998         global $DB, $CFG;
00999 
01000         $searchusers = $DB->get_records_list('user', 'username',
01001                 array('veryimprobabletestusername2'));
01002         $searchroles = $DB->get_records_list('role', 'shortname',
01003                 array('role1thatshouldnotexist', 'role2thatshouldnotexist'));
01004 
01005         if (empty($searchusers) and empty($searchroles)) {
01006 
01007             //create a temp user
01008             $user = new stdClass();
01009             $user->username = 'veryimprobabletestusername2';
01010             $user->password = 'testpassword2';
01011             $user->firstname = 'testfirstname2';
01012             $user->lastname = 'testlastname2';
01013             $user->email = 'testemail1@moodle.com';
01014             require_once($CFG->dirroot."/user/lib.php");
01015             $user->id = user_create_user($user);
01016 
01017             //create two roles
01018             $role1->id = create_role('role1thatshouldnotexist', 'role1thatshouldnotexist', '');
01019             $role2->id = create_role('role2thatshouldnotexist', 'role2thatshouldnotexist', '');
01020 
01021             //assign user to role by webservice
01022             $context = get_system_context();
01023             $assignments = array(
01024                 array('roleid' => $role1->id, 'userid' => $user->id, 'contextid' => $context->id),
01025                 array('roleid' => $role2->id, 'userid' => $user->id, 'contextid' => $context->id)
01026             );
01027 
01028             $function = 'moodle_role_assign';
01029             $params = array('assignments' => $assignments);
01030             $client->call($function, $params);
01031 
01032             //check that the assignment work
01033             $roles = get_user_roles($context, $user->id, false);
01034             foreach ($roles as $role) {
01035                 $this->assertTrue(($role->roleid == $role1->id) or ($role->roleid == $role2->id) );
01036             }
01037 
01038             //unassign roles from user
01039             role_unassign($role1->id, $user->id, $context->id, '', NULL);
01040             role_unassign($role2->id, $user->id, $context->id, '', NULL);
01041 
01042             //delete user from DB
01043             $DB->delete_records('user', array('id' => $user->id));
01044 
01045             //delete the two role from DB
01046             delete_role($role1->id);
01047             delete_role($role2->id);
01048         }
01049     }
01050 
01051     function moodle_role_unassign($client) {
01052         global $DB, $CFG;
01053 
01054         $searchusers = $DB->get_records_list('user', 'username',
01055                 array('veryimprobabletestusername2'));
01056         $searchroles = $DB->get_records_list('role', 'shortname',
01057                 array('role1thatshouldnotexist', 'role2thatshouldnotexist'));
01058 
01059         if (empty($searchusers) and empty($searchroles)) {
01060 
01061             //create a temp user
01062             $user = new stdClass();
01063             $user->username = 'veryimprobabletestusername2';
01064             $user->password = 'testpassword2';
01065             $user->firstname = 'testfirstname2';
01066             $user->lastname = 'testlastname2';
01067             $user->email = 'testemail1@moodle.com';
01068             require_once($CFG->dirroot."/user/lib.php");
01069             $user->id = user_create_user($user);
01070 
01071             //create two roles
01072             $role1->id = create_role('role1thatshouldnotexist', 'role1thatshouldnotexist', '');
01073             $role2->id = create_role('role2thatshouldnotexist', 'role2thatshouldnotexist', '');
01074         
01075             //assign roles from user
01076             $context = get_system_context();
01077             role_assign($role1->id, $user->id, $context->id);
01078             role_assign($role2->id, $user->id, $context->id);
01079 
01080             //check that the local assignment work
01081             $roles = get_user_roles($context, $user->id, false);
01082             foreach ($roles as $role) {
01083                 $this->assertTrue(($role->roleid == $role1->id) or ($role->roleid == $role2->id) );
01084             }
01085 
01086             //unassign user to role by webservice          
01087             $assignments = array(
01088                 array('roleid' => $role1->id, 'userid' => $user->id, 'contextid' => $context->id),
01089                 array('roleid' => $role2->id, 'userid' => $user->id, 'contextid' => $context->id)
01090             );
01091             $function = 'moodle_role_unassign';
01092             $params = array('assignments' => $assignments);
01093             $client->call($function, $params);
01094 
01095             //check that the web service unassignment work
01096             $roles = get_user_roles($context, $user->id, false);
01097             $this->assertTrue(empty($roles));
01098 
01099             //delete user from DB
01100             $DB->delete_records('user', array('id' => $user->id));
01101 
01102             //delete the two role from DB
01103             delete_role($role1->id);
01104             delete_role($role2->id);
01105         }
01106 
01107     }
01108 
01116     function moodle_group_get_course_groups($client) {
01117         global $DB;
01118 
01119         $courses = $DB->get_records('course');
01120         foreach($courses as $course) {
01121             $coursegroups = groups_get_all_groups($course->id);
01122             $function = 'moodle_group_get_course_groups';
01123             $params = array('courseid' => $course->id);
01124             $groups = $client->call($function, $params);
01125             $this->assertEqual(count($groups), count($coursegroups));
01126         }
01127     }
01128 
01129 
01136     function moodle_group_get_groupmembers($client) {
01137         global $DB;
01138 
01139         $groups = $DB->get_records('groups');
01140         $groupids = array();
01141         foreach ($groups as $group) {
01142             $groupids[] = $group->id;
01143         }
01144         $function = 'moodle_group_get_groupmembers';
01145         $params = array('groupids' => $groupids);
01146         $groupsmembers = $client->call($function, $params);
01147 
01148         foreach($groupsmembers as $groupmembers) {
01149             $dbgroupmembers = groups_get_members($groupmembers['groupid']);
01150             unset($groups[$groupmembers['groupid']]);
01151             $this->assertEqual(count($dbgroupmembers), count($groupmembers['userids']));
01152         }
01153 
01154         //check that all existing groups have been returned by the web service function
01155         $this->assertTrue(empty($groups));
01156        
01157         
01158     }
01159 
01160     function moodle_group_add_groupmembers($client) {
01161         global $DB, $CFG;
01162 
01163         //create category
01164         $category = new stdClass();
01165         $category->name = 'tmpcategoryfortest123';
01166         $category->id = $DB->insert_record('course_categories', $category);
01167 
01168         //create a course
01169         $course = new stdClass();
01170         $course->fullname = 'tmpcoursefortest123';
01171         $course->shortname = 'tmpcoursefortest123';
01172         $course->idnumber = 'tmpcoursefortest123';
01173         $course->category = $category->id;
01174         $course->id = $DB->insert_record('course', $course);
01175 
01176         //create a role
01177         $role1->id = create_role('role1thatshouldnotexist', 'role1thatshouldnotexist', '');
01178 
01179         //create a user
01180         $user = new stdClass();
01181         $user->username = 'veryimprobabletestusername2';
01182         $user->password = 'testpassword2';
01183         $user->firstname = 'testfirstname2';
01184         $user->lastname = 'testlastname2';
01185         $user->email = 'testemail1@moodle.com';
01186         $user->mnethostid = $CFG->mnet_localhost_id;
01187         require_once($CFG->dirroot."/user/lib.php");
01188         $user->id = user_create_user($user);
01189 
01190         //create course context
01191         $context = get_context_instance(CONTEXT_COURSE, $course->id, MUST_EXIST);
01192 
01193         //enrol the user in the course with the created role
01194         role_assign($role1->id, $user->id, $context->id);
01195         $enrol = new stdClass();
01196         $enrol->courseid = $course->id;
01197         $enrol->roleid = $role1->id;
01198         $enrol->id = $DB->insert_record('enrol', $enrol);
01199         $enrolment = new stdClass();
01200         $enrolment->userid = $user->id;
01201         $enrolment->enrolid = $enrol->id;
01202         $enrolment->id = $DB->insert_record('user_enrolments', $enrolment);
01203 
01204         //create a group in the course
01205         $group = new stdClass();
01206         $group->courseid = $course->id;
01207         $group->name = 'tmpgroufortest123';
01208         $group->id = $DB->insert_record('groups', $group);
01209 
01210         //WEBSERVICE CALL
01211         $function = 'moodle_group_add_groupmembers';
01212         $params = array('members' => array(array('groupid' => $group->id, 'userid' => $user->id)));
01213         $groupsmembers = $client->call($function, $params);
01214 
01215         //CHECK TEST RESULT
01216         require_once($CFG->libdir . '/grouplib.php');
01217         $groupmembers = groups_get_members($group->id);
01218         $this->assertEqual(count($groupmembers), 1);
01219         $this->assertEqual($groupmembers[$user->id]->id, $user->id);
01220 
01221         //remove the members from the group
01222         require_once($CFG->dirroot . "/group/lib.php");
01223         groups_remove_member($group->id, $user->id);
01224 
01225         //delete the group
01226         $DB->delete_records('groups', array('id' => $group->id));
01227 
01228         //unenrol the user
01229         $DB->delete_records('user_enrolments', array('id' => $enrolment->id));
01230         $DB->delete_records('enrol', array('id' => $enrol->id));
01231         role_unassign($role1->id, $user->id, $context->id);
01232 
01233         //delete course context
01234         delete_context(CONTEXT_COURSE, $course->id);
01235 
01236         //delete the user
01237         $DB->delete_records('user', array('id' => $user->id));
01238 
01239         //delete the role
01240         delete_role($role1->id);
01241 
01242         //delete the course
01243         $DB->delete_records('course', array('id' => $course->id));
01244 
01245         //delete the category
01246         $DB->delete_records('course_categories', array('id' => $category->id));
01247         
01248     }
01249 
01250     function moodle_group_delete_groupmembers($client) {
01251         global $DB, $CFG;
01252 
01253         //create category
01254         $category = new stdClass();
01255         $category->name = 'tmpcategoryfortest123';
01256         $category->id = $DB->insert_record('course_categories', $category);
01257 
01258         //create a course
01259         $course = new stdClass();
01260         $course->fullname = 'tmpcoursefortest123';
01261         $course->shortname = 'tmpcoursefortest123';
01262         $course->idnumber = 'tmpcoursefortest123';
01263         $course->category = $category->id;
01264         $course->id = $DB->insert_record('course', $course);
01265 
01266         //create a role
01267         $role1->id = create_role('role1thatshouldnotexist', 'role1thatshouldnotexist', '');
01268 
01269         //create a user
01270         $user = new stdClass();
01271         $user->username = 'veryimprobabletestusername2';
01272         $user->password = 'testpassword2';
01273         $user->firstname = 'testfirstname2';
01274         $user->lastname = 'testlastname2';
01275         $user->email = 'testemail1@moodle.com';
01276         $user->mnethostid = $CFG->mnet_localhost_id;
01277         require_once($CFG->dirroot."/user/lib.php");
01278         $user->id = user_create_user($user);
01279 
01280         //create course context
01281         $context = get_context_instance(CONTEXT_COURSE, $course->id, MUST_EXIST);
01282 
01283         //enrol the user in the course with the created role
01284         role_assign($role1->id, $user->id, $context->id);
01285         $enrol = new stdClass();
01286         $enrol->courseid = $course->id;
01287         $enrol->roleid = $role1->id;
01288         $enrol->id = $DB->insert_record('enrol', $enrol);
01289         $enrolment = new stdClass();
01290         $enrolment->userid = $user->id;
01291         $enrolment->enrolid = $enrol->id;
01292         $enrolment->id = $DB->insert_record('user_enrolments', $enrolment);
01293 
01294         //create a group in the course
01295         $group = new stdClass();
01296         $group->courseid = $course->id;
01297         $group->name = 'tmpgroufortest123';
01298         $group->id = $DB->insert_record('groups', $group);
01299 
01300         //add group member
01301         require_once($CFG->dirroot . "/group/lib.php");
01302         groups_add_member($group->id, $user->id);
01303         $groupmembers = groups_get_members($group->id);
01304         $this->assertEqual(count($groupmembers), 1);
01305 
01306         //WEB SERVICE CALL - remove the members from the group
01307         $function = 'moodle_group_delete_groupmembers';
01308         $params = array('members' => array(array('groupid' => $group->id, 'userid' => $user->id)));
01309         $client->call($function, $params);
01310 
01311         require_once($CFG->libdir . '/grouplib.php');
01312         $groupmembers = groups_get_members($group->id);
01313         $this->assertEqual(count($groupmembers), 0);
01314 
01315         //delete the group
01316         $DB->delete_records('groups', array('id' => $group->id));
01317 
01318         //unenrol the user
01319         $DB->delete_records('user_enrolments', array('id' => $enrolment->id));
01320         $DB->delete_records('enrol', array('id' => $enrol->id));
01321         role_unassign($role1->id, $user->id, $context->id);
01322 
01323         //delete course context
01324         delete_context(CONTEXT_COURSE, $course->id);
01325 
01326         //delete the user
01327         $DB->delete_records('user', array('id' => $user->id));
01328 
01329         //delete the role
01330         delete_role($role1->id);
01331 
01332         //delete the course
01333         $DB->delete_records('course', array('id' => $course->id));
01334 
01335         //delete the category
01336         $DB->delete_records('course_categories', array('id' => $category->id));
01337 
01338     }
01339 
01340     function moodle_group_create_groups($client) {
01341         global $DB, $CFG;
01342 
01343         //create category
01344         $category = new stdClass();
01345         $category->name = 'tmpcategoryfortest123';
01346         $category->id = $DB->insert_record('course_categories', $category);
01347 
01348         //create a course
01349         $course = new stdClass();
01350         $course->fullname = 'tmpcoursefortest123';
01351         $course->shortname = 'tmpcoursefortest123';
01352         $course->idnumber = 'tmpcoursefortest123';
01353         $course->category = $category->id;
01354         $course->id = $DB->insert_record('course', $course);
01355 
01356         //create a role
01357         $role1->id = create_role('role1thatshouldnotexist', 'role1thatshouldnotexist', '');
01358 
01359         //create a user
01360         $user = new stdClass();
01361         $user->username = 'veryimprobabletestusername2';
01362         $user->password = 'testpassword2';
01363         $user->firstname = 'testfirstname2';
01364         $user->lastname = 'testlastname2';
01365         $user->email = 'testemail1@moodle.com';
01366         $user->mnethostid = $CFG->mnet_localhost_id;
01367         require_once($CFG->dirroot."/user/lib.php");
01368         $user->id = user_create_user($user);
01369 
01370         //create course context
01371         $context = get_context_instance(CONTEXT_COURSE, $course->id, MUST_EXIST);
01372 
01373         //enrol the user in the course with the created role
01374         role_assign($role1->id, $user->id, $context->id);
01375         $enrol = new stdClass();
01376         $enrol->courseid = $course->id;
01377         $enrol->roleid = $role1->id;
01378         $enrol->id = $DB->insert_record('enrol', $enrol);
01379         $enrolment = new stdClass();
01380         $enrolment->userid = $user->id;
01381         $enrolment->enrolid = $enrol->id;
01382         $enrolment->id = $DB->insert_record('user_enrolments', $enrolment);
01383 
01384         require_once($CFG->dirroot . "/group/lib.php");
01385         $groups = groups_get_all_groups($course->id);
01386         $this->assertEqual(count($groups), 0);
01387 
01388         //WEBSERVICE CALL - create a group in the course
01389         $group = new stdClass();
01390         $group->courseid = $course->id;
01391         $group->name = 'tmpgroufortest123';
01392         $group->enrolmentkey = '';
01393         $group->description = '';
01394         $group2 = new stdClass();
01395         $group2->courseid = $course->id;
01396         $group2->name = 'tmpgroufortest1233';
01397         $group2->enrolmentkey = '';
01398         $group2->description = '';
01399         $paramgroups = array($group, $group2);
01400         $function = 'moodle_group_create_groups';
01401         $params = array('groups' => $paramgroups);
01402         $createdgroups = $client->call($function, $params);
01403 
01404         $groups = groups_get_all_groups($course->id);
01405         $this->assertEqual(count($groups), count($paramgroups));
01406 
01407         //delete the group
01408         foreach ($groups as $dbgroup) {
01409             $DB->delete_records('groups', array('id' => $dbgroup->id));
01410         }
01411 
01412         //unenrol the user
01413         $DB->delete_records('user_enrolments', array('id' => $enrolment->id));
01414         $DB->delete_records('enrol', array('id' => $enrol->id));
01415         role_unassign($role1->id, $user->id, $context->id);
01416 
01417         //delete course context
01418         delete_context(CONTEXT_COURSE, $course->id);
01419 
01420         //delete the user
01421         $DB->delete_records('user', array('id' => $user->id));
01422 
01423         //delete the role
01424         delete_role($role1->id);
01425 
01426         //delete the course
01427         $DB->delete_records('course', array('id' => $course->id));
01428 
01429         //delete the category
01430         $DB->delete_records('course_categories', array('id' => $category->id));
01431 
01432     }
01433 
01434     function moodle_group_delete_groups($client) {
01435         global $DB, $CFG;
01436 
01437         //create category
01438         $category = new stdClass();
01439         $category->name = 'tmpcategoryfortest123';
01440         $category->id = $DB->insert_record('course_categories', $category);
01441 
01442         //create a course
01443         $course = new stdClass();
01444         $course->fullname = 'tmpcoursefortest123';
01445         $course->shortname = 'tmpcoursefortest123';
01446         $course->idnumber = 'tmpcoursefortest123';
01447         $course->category = $category->id;
01448         $course->id = $DB->insert_record('course', $course);
01449 
01450         //create a role
01451         $role1->id = create_role('role1thatshouldnotexist', 'role1thatshouldnotexist', '');
01452 
01453         //create a user
01454         $user = new stdClass();
01455         $user->username = 'veryimprobabletestusername2';
01456         $user->password = 'testpassword2';
01457         $user->firstname = 'testfirstname2';
01458         $user->lastname = 'testlastname2';
01459         $user->email = 'testemail1@moodle.com';
01460         $user->mnethostid = $CFG->mnet_localhost_id;
01461         require_once($CFG->dirroot."/user/lib.php");
01462         $user->id = user_create_user($user);
01463 
01464         //create course context
01465         $context = get_context_instance(CONTEXT_COURSE, $course->id, MUST_EXIST);
01466 
01467         //enrol the user in the course with the created role
01468         role_assign($role1->id, $user->id, $context->id);
01469         $enrol = new stdClass();
01470         $enrol->courseid = $course->id;
01471         $enrol->roleid = $role1->id;
01472         $enrol->id = $DB->insert_record('enrol', $enrol);
01473         $enrolment = new stdClass();
01474         $enrolment->userid = $user->id;
01475         $enrolment->enrolid = $enrol->id;
01476         $enrolment->id = $DB->insert_record('user_enrolments', $enrolment);
01477 
01478         //create a group in the course
01479         $group = new stdClass();
01480         $group->courseid = $course->id;
01481         $group->name = 'tmpgroufortest123';
01482         $group->enrolmentkey = '';
01483         $group->description = '';
01484         $group->id = $DB->insert_record('groups', $group);
01485         $group2 = new stdClass();
01486         $group2->courseid = $course->id;
01487         $group2->name = 'tmpgroufortest1233';
01488         $group2->enrolmentkey = '';
01489         $group2->description = '';
01490         $group2->id = $DB->insert_record('groups', $group2);
01491         $paramgroups = array($group, $group2);
01492 
01493         require_once($CFG->dirroot . "/group/lib.php");
01494         $groups = groups_get_all_groups($course->id);
01495         $this->assertEqual(2, count($groups));
01496 
01497         //WEBSERVICE CALL -  delete the group
01498         $function = 'moodle_group_delete_groups';
01499         $params = array('groupids' => array($group->id, $group2->id));
01500         $client->call($function, $params);
01501 
01502         $groups = groups_get_all_groups($course->id);
01503         $this->assertEqual(0, count($groups));
01504 
01505         //unenrol the user
01506         $DB->delete_records('user_enrolments', array('id' => $enrolment->id));
01507         $DB->delete_records('enrol', array('id' => $enrol->id));
01508         role_unassign($role1->id, $user->id, $context->id);
01509 
01510         //delete course context
01511         delete_context(CONTEXT_COURSE, $course->id);
01512 
01513         //delete the user
01514         $DB->delete_records('user', array('id' => $user->id));
01515 
01516         //delete the role
01517         delete_role($role1->id);
01518 
01519         //delete the course
01520         $DB->delete_records('course', array('id' => $course->id));
01521 
01522         //delete the category
01523         $DB->delete_records('course_categories', array('id' => $category->id));
01524     }
01525 
01526     function moodle_message_send_messages($client) {
01527         global $DB;
01528         $function = 'moodle_message_send_messages';
01529         $message = array();
01530         $message['text'] = 'this is a message with a link http://www.google.com';
01531         $message['touserid'] = 2;  //replace by a existing user id
01532         $message['clientmsgid'] = 'message_1';
01533         $message2 = array();
01534         $message2['text'] = 'this is a message with an image
01535             http://moodle.org/pluginfile.php/51/mod_forum/post/713724/moodle2-logo.png';
01536         $message2['touserid'] = 2;  //replace by a existing user id
01537         $message2['clientmsgid'] = 'message_2';
01538         $params = array('messages' => array($message, $message2));
01539         $success = $client->call($function, $params);
01540         $this->assertEqual(count($success), 2);
01541     }
01542 
01543      function moodle_notes_create_notes($client) {
01544         global $DB, $CFG;
01545 
01546         $note1 = array();
01547         $note1['userid'] = 2; //about who is the note
01548         $note1['publishstate'] = 'personal'; //can be course, site, personal
01549         $note1['courseid'] = 2; //in Moodle a notes is always created into a course, even a site note.
01550         $note1['text'] = 'This is a personal note about the user';
01551         $note1['clientnoteid'] = 'note_1';
01552 
01553         $note2 = array();
01554         $note2['userid'] = 40000; //mostl likely going to fail
01555         $note2['publishstate'] = 'course';
01556         $note2['courseid'] = 2;
01557         $note2['text'] = 'This is a teacher note about the user';
01558         $note2['clientnoteid'] = 'note_2';
01559 
01560         $note3 = array();
01561         $note3['userid'] = 2;
01562         $note3['publishstate'] = 'site';
01563         $note3['courseid'] = 30000; //most likely going to fail
01564         $note3['text'] = 'This is a teacher site-wide note about the user';
01565         $note3['clientnoteid'] = 'note_3';
01566 
01567         $function = 'moodle_notes_create_notes';
01568         $params = array('notes' => array($note1, $note2, $note3));
01569         $notes = $client->call($function, $params);
01570 
01571         $this->assertEqual(3, count($notes)); //1 info is a success, 2 others should be failed
01572     }
01573 
01574 }
 All Data Structures Namespaces Files Functions Variables Enumerations