2 // This file is part of Moodle - http://moodle.org/
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.
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();
21 require_once($CFG->dirroot
. '/webservice/tests/helpers.php');
22 require_once($CFG->dirroot
. '/enrol/externallib.php');
25 * Enrol external PHPunit tests
29 * @copyright 2012 Jerome Mouneyrac
30 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
33 class core_enrol_externallib_testcase
extends externallib_advanced_testcase
{
36 * Test get_enrolled_users
38 public function test_get_enrolled_users() {
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
);
73 * Test get_users_courses
75 public function test_get_users_courses() {
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.
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 () {
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);
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')));
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() {
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',
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
,
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']);