Merge branch 'MDL-42338' of git://github.com/rwijaya/moodle
[moodle.git] / enrol / tests / externallib_test.php
blob073448e87f726d697b171216b1a28b0a381a9b92
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
17 defined('MOODLE_INTERNAL') || die();
19 global $CFG;
21 require_once($CFG->dirroot . '/webservice/tests/helpers.php');
22 require_once($CFG->dirroot . '/enrol/externallib.php');
24 /**
25 * Enrol external PHPunit tests
27 * @package core_enrol
28 * @category external
29 * @copyright 2012 Jerome Mouneyrac
30 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
31 * @since Moodle 2.4
33 class core_enrol_externallib_testcase extends externallib_advanced_testcase {
35 /**
36 * Test get_enrolled_users
38 public function test_get_enrolled_users() {
39 global $USER;
41 $this->resetAfterTest(true);
43 $course = self::getDataGenerator()->create_course();
44 $user1 = self::getDataGenerator()->create_user();
45 $user2 = self::getDataGenerator()->create_user();
47 // Set the required capabilities by the external function.
48 $context = context_course::instance($course->id);
49 $roleid = $this->assignUserCapability('moodle/course:viewparticipants', $context->id);
50 $this->assignUserCapability('moodle/user:viewdetails', $context->id, $roleid);
52 // Enrol the users in the course.
53 $this->getDataGenerator()->enrol_user($user1->id, $course->id, $roleid, 'manual');
54 $this->getDataGenerator()->enrol_user($user2->id, $course->id, $roleid, 'manual');
55 $this->getDataGenerator()->enrol_user($USER->id, $course->id, $roleid, 'manual');
57 // Call the external function.
58 $enrolledusers = core_enrol_external::get_enrolled_users($course->id);
60 // We need to execute the return values cleaning process to simulate the web service server.
61 $enrolledusers = external_api::clean_returnvalue(core_enrol_external::get_enrolled_users_returns(), $enrolledusers);
63 // Check we retrieve the good total number of enrolled users.
64 $this->assertEquals(3, count($enrolledusers));
66 // Call without required capability.
67 $this->unassignUserCapability('moodle/course:viewparticipants', $context->id, $roleid);
68 $this->setExpectedException('moodle_exception');
69 $categories = core_enrol_external::get_enrolled_users($course->id);
72 /**
73 * Test get_users_courses
75 public function test_get_users_courses() {
76 global $USER;
78 $this->resetAfterTest(true);
80 $course1 = self::getDataGenerator()->create_course();
81 $course2 = self::getDataGenerator()->create_course();
82 $courses = array($course1, $course2);
84 // Enrol $USER in the courses.
85 // We use the manual plugin.
86 $roleid = null;
87 foreach ($courses as $course) {
88 $context = context_course::instance($course->id);
89 $roleid = $this->assignUserCapability('moodle/course:viewparticipants',
90 $context->id, $roleid);
92 $this->getDataGenerator()->enrol_user($USER->id, $course->id, $roleid, 'manual');
95 // Call the external function.
96 $enrolledincourses = core_enrol_external::get_users_courses($USER->id);
98 // We need to execute the return values cleaning process to simulate the web service server.
99 $enrolledincourses = external_api::clean_returnvalue(core_enrol_external::get_users_courses_returns(), $enrolledincourses);
101 // Check we retrieve the good total number of enrolled users.
102 $this->assertEquals(2, count($enrolledincourses));
106 * Test get_enrolled_users_with_capability
108 public function test_get_enrolled_users_with_capability () {
109 global $DB, $USER;
111 $this->resetAfterTest(true);
113 $coursedata['idnumber'] = 'idnumbercourse1';
114 $coursedata['fullname'] = 'Lightwork Course 1';
115 $coursedata['summary'] = 'Lightwork Course 1 description';
116 $coursedata['summaryformat'] = FORMAT_MOODLE;
117 $course1 = self::getDataGenerator()->create_course($coursedata);
119 // Create a manual enrolment record.
120 $manual_enrol_data['enrol'] = 'manual';
121 $manual_enrol_data['status'] = 0;
122 $manual_enrol_data['courseid'] = $course1->id;
123 $enrolid = $DB->insert_record('enrol', $manual_enrol_data);
125 // Create the user and give them capabilities in the course context.
126 $context = context_course::instance($course1->id);
127 $roleid = $this->assignUserCapability('moodle/course:viewparticipants', $context->id, 3);
129 // Create a student.
130 $student1 = self::getDataGenerator()->create_user();
132 // Enrol both the user and the student in the course.
133 $user_enrolment_data['status'] = 0;
134 $user_enrolment_data['enrolid'] = $enrolid;
135 $user_enrolment_data['userid'] = $USER->id;
136 $DB->insert_record('user_enrolments', $user_enrolment_data);
138 $user_enrolment_data['status'] = 0;
139 $user_enrolment_data['enrolid'] = $enrolid;
140 $user_enrolment_data['userid'] = $student1->id;
141 $DB->insert_record('user_enrolments', $user_enrolment_data);
143 $params = array("coursecapabilities" =>array
144 ('courseid' => $course1->id, 'capabilities' => array('moodle/course:viewparticipants')));
145 $options = array();
146 $result = core_enrol_external::get_enrolled_users_with_capability($params, $options);
148 // We need to execute the return values cleaning process to simulate the web service server.
149 $result = external_api::clean_returnvalue(core_enrol_external::get_enrolled_users_with_capability_returns(), $result);
151 // Check an array containing the expected user for the course capability is returned.
152 $expecteduserlist = $result[0];
153 $this->assertEquals($course1->id, $expecteduserlist['courseid']);
154 $this->assertEquals('moodle/course:viewparticipants', $expecteduserlist['capability']);
155 $this->assertEquals(1, count($expecteduserlist['users']));
160 * Test get_course_enrolment_methods
162 public function test_get_course_enrolment_methods() {
163 global $DB;
165 $this->resetAfterTest(true);
167 // Get enrolment plugins.
168 $selfplugin = enrol_get_plugin('self');
169 $this->assertNotEmpty($selfplugin);
170 $manualplugin = enrol_get_plugin('manual');
171 $this->assertNotEmpty($manualplugin);
173 $studentrole = $DB->get_record('role', array('shortname'=>'student'));
174 $this->assertNotEmpty($studentrole);
176 $course1 = self::getDataGenerator()->create_course();
177 $course2 = self::getDataGenerator()->create_course();
179 // Add enrolment methods for course.
180 $instanceid1 = $selfplugin->add_instance($course1, array('status' => ENROL_INSTANCE_ENABLED,
181 'name' => 'Test instance 1',
182 'customint6' => 1,
183 'roleid' => $studentrole->id));
184 $instanceid2 = $selfplugin->add_instance($course1, array('status' => ENROL_INSTANCE_DISABLED,
185 'name' => 'Test instance 2',
186 'roleid' => $studentrole->id));
188 $instanceid3 = $manualplugin->add_instance($course1, array('status' => ENROL_INSTANCE_ENABLED,
189 'name' => 'Test instance 3'));
191 $enrolmentmethods = $DB->get_records('enrol', array('courseid' => $course1->id, 'status' => ENROL_INSTANCE_ENABLED));
192 $this->assertCount(2, $enrolmentmethods);
194 // Check if information is returned.
195 $enrolmentmethods = core_enrol_external::get_course_enrolment_methods($course1->id);
196 // Enrolment information is currently returned by self enrolment plugin, so count == 1.
197 // This should be changed as we implement get_enrol_info() for other enrolment plugins.
198 $this->assertCount(1, $enrolmentmethods);
200 $enrolmentmethod = $enrolmentmethods[0];
201 $this->assertEquals($course1->id, $enrolmentmethod['courseid']);
202 $this->assertEquals('self', $enrolmentmethod['type']);
203 $this->assertTrue($enrolmentmethod['status']);
204 $this->assertFalse(isset($enrolmentmethod['wsfunction']));
206 $instanceid4 = $selfplugin->add_instance($course2, array('status' => ENROL_INSTANCE_ENABLED,
207 'name' => 'Test instance 4',
208 'roleid' => $studentrole->id,
209 'customint6' => 1,
210 'password' => 'test'));
211 $enrolmentmethods = core_enrol_external::get_course_enrolment_methods($course2->id);
212 $this->assertCount(1, $enrolmentmethods);
214 $enrolmentmethod = $enrolmentmethods[0];
215 $this->assertEquals($course2->id, $enrolmentmethod['courseid']);
216 $this->assertEquals('self', $enrolmentmethod['type']);
217 $this->assertTrue($enrolmentmethod['status']);
218 $this->assertEquals('enrol_self_get_instance_info', $enrolmentmethod['wsfunction']);