|
Moodle
2.2.1
http://www.collinsharper.com
|
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 }