From: Jerome Mouneyrac Date: Tue, 4 Sep 2012 04:26:21 +0000 (+0800) Subject: MDL-34967 PHPunit test: enrol/externallib.php and enrol/manual/externallib.php X-Git-Tag: v2.4.0-beta~487^2 X-Git-Url: http://git.moodle.org/gw?p=moodle.git;a=commitdiff_plain;h=566596abd75e3c61a8f74bae77cf9297c5c552b2;hp=-c;ds=sidebyside MDL-34967 PHPunit test: enrol/externallib.php and enrol/manual/externallib.php --- 566596abd75e3c61a8f74bae77cf9297c5c552b2 diff --git a/enrol/manual/tests/externallib_test.php b/enrol/manual/tests/externallib_test.php new file mode 100644 index 00000000000..823568bffff --- /dev/null +++ b/enrol/manual/tests/externallib_test.php @@ -0,0 +1,73 @@ +. + +/** + * Enrol manual external PHPunit tests + * + * @package enrol_manual + * @category external + * @copyright 2012 Jerome Mouneyrac + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @since Moodle 2.4 + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; + +require_once($CFG->dirroot . '/webservice/tests/helpers.php'); +require_once($CFG->dirroot . '/enrol/manual/externallib.php'); + +class enrol_manual_external_testcase extends externallib_advanced_testcase { + + /** + * Test get_enrolled_users + */ + public function test_enrol_users() { + global $USER, $CFG; + + $this->resetAfterTest(true); + + $course = self::getDataGenerator()->create_course(); + $user1 = self::getDataGenerator()->create_user(); + $user2 = self::getDataGenerator()->create_user(); + + // Set the required capabilities by the external function. + $context = context_course::instance($course->id); + $roleid = $this->assignUserCapability('enrol/manual:enrol', $context->id); + $this->assignUserCapability('moodle/course:view', $context->id, $roleid); + + // Add manager role to $USER. + // So $USER is allowed to assign 'manager', 'editingteacher', 'teacher' and 'student'. + role_assign(1, $USER->id, context_system::instance()->id); + + // Call the external function. + enrol_manual_external::enrol_users(array( + array('roleid' => 3, 'userid' => $user1->id, 'courseid' => $course->id), + array('roleid' => 3, 'userid' => $user2->id, 'courseid' => $course->id) + )); + + // Check we retrieve the good total number of enrolled users. + require_once($CFG->dirroot . '/enrol/externallib.php'); + $enrolledusers = core_enrol_external::get_enrolled_users($course->id); + $this->assertEquals(2, count($enrolledusers)); + + // Call without required capability. + $this->unassignUserCapability('enrol/manual:enrol', $context->id, $roleid); + $this->setExpectedException('moodle_exception'); + $categories = enrol_manual_external::enrol_users($course->id); + } +} \ No newline at end of file diff --git a/enrol/tests/externallib_test.php b/enrol/tests/externallib_test.php new file mode 100644 index 00000000000..7fb95006796 --- /dev/null +++ b/enrol/tests/externallib_test.php @@ -0,0 +1,224 @@ +. + +/** + * Enrol/Role external PHPunit tests + * + * @package core_enrol + * @category external + * @copyright 2012 Jerome Mouneyrac + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @since Moodle 2.4 + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; + +require_once($CFG->dirroot . '/webservice/tests/helpers.php'); +require_once($CFG->dirroot . '/enrol/externallib.php'); + +/** + * Enrol external PHPunit tests + * + * @package core_enrol + * @category external + * @copyright 2012 Jerome Mouneyrac + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @since Moodle 2.4 + */ +class core_enrol_external_testcase extends externallib_advanced_testcase { + + /** + * Test get_enrolled_users + */ + public function test_get_enrolled_users() { + global $USER; + + $this->resetAfterTest(true); + + $course = self::getDataGenerator()->create_course(); + $user1 = self::getDataGenerator()->create_user(); + $user2 = self::getDataGenerator()->create_user(); + + // Set the required capabilities by the external function. + $context = context_course::instance($course->id); + $roleid = $this->assignUserCapability('moodle/course:viewparticipants', $context->id); + $this->assignUserCapability('moodle/user:viewdetails', $context->id, $roleid); + + // Enrol the users in the course. + // We use the manual plugin. + $enrol = enrol_get_plugin('manual'); + $enrolinstances = enrol_get_instances($course->id, true); + foreach ($enrolinstances as $courseenrolinstance) { + if ($courseenrolinstance->enrol == "manual") { + $instance = $courseenrolinstance; + break; + } + } + $enrol->enrol_user($instance, $user1->id, $roleid); + $enrol->enrol_user($instance, $user2->id, $roleid); + $enrol->enrol_user($instance, $USER->id, $roleid); + + // Call the external function. + $enrolledusers = core_enrol_external::get_enrolled_users($course->id); + + // Check we retrieve the good total number of enrolled users. + $this->assertEquals(3, count($enrolledusers)); + + // Call without required capability. + $this->unassignUserCapability('moodle/course:viewparticipants', $context->id, $roleid); + $this->setExpectedException('moodle_exception'); + $categories = core_enrol_external::get_enrolled_users($course->id); + } + + /** + * Test get_users_courses + */ + public function test_get_users_courses() { + global $USER; + + $this->resetAfterTest(true); + + $course1 = self::getDataGenerator()->create_course(); + $course2 = self::getDataGenerator()->create_course(); + $courses = array($course1, $course2); + + // Enrol $USER in the courses. + // We use the manual plugin. + $enrol = enrol_get_plugin('manual'); + $roleid = null; + foreach ($courses as $course) { + $context = context_course::instance($course->id); + $roleid = $this->assignUserCapability('moodle/course:viewparticipants', + $context->id, $roleid); + + $enrolinstances = enrol_get_instances($course->id, true); + foreach ($enrolinstances as $courseenrolinstance) { + if ($courseenrolinstance->enrol == "manual") { + $instance = $courseenrolinstance; + break; + } + } + $enrol->enrol_user($instance, $USER->id, $roleid); + } + + // Call the external function. + $enrolledincourses = core_enrol_external::get_users_courses($USER->id); + + // Check we retrieve the good total number of enrolled users. + $this->assertEquals(2, count($enrolledincourses)); + } +} + +/** + * Role external PHPunit tests + * + * @package core_enrol + * @category external + * @copyright 2012 Jerome Mouneyrac + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @since Moodle 2.4 + */ +class core_role_external_testcase extends externallib_advanced_testcase { + + /** + * Tests set up + */ + protected function setUp() { + global $CFG; + require_once($CFG->dirroot . '/enrol/externallib.php'); + } + + /** + * Test assign_roles + */ + public function test_assign_roles() { + global $USER; + + $this->resetAfterTest(true); + + $course = self::getDataGenerator()->create_course(); + + // Set the required capabilities by the external function. + $context = context_course::instance($course->id); + $roleid = $this->assignUserCapability('moodle/role:assign', $context->id); + $this->assignUserCapability('moodle/course:view', $context->id, $roleid); + + // Add manager role to $USER. + // So $USER is allowed to assign 'manager', 'editingteacher', 'teacher' and 'student'. + role_assign(1, $USER->id, context_system::instance()->id); + + // Check the teacher role has not been assigned to $USER. + $users = get_role_users(3, $context); + $this->assertEquals(count($users), 0); + + // Call the external function. Assign teacher role to $USER. + core_role_external::assign_roles(array( + array('roleid' => 3, 'userid' => $USER->id, 'contextid' => $context->id))); + + // Check the role has been assigned. + $users = get_role_users(3, $context); + $this->assertEquals(count($users), 1); + + // Call without required capability. + $this->unassignUserCapability('moodle/role:assign', $context->id, $roleid); + $this->setExpectedException('moodle_exception'); + $categories = core_role_external::assign_roles( + array('roleid' => 3, 'userid' => $USER->id, 'contextid' => $context->id)); + } + + /** + * Test unassign_roles + */ + public function test_unassign_roles() { + global $USER; + + $this->resetAfterTest(true); + + $course = self::getDataGenerator()->create_course(); + + // Set the required capabilities by the external function. + $context = context_course::instance($course->id); + $roleid = $this->assignUserCapability('moodle/role:assign', $context->id); + $this->assignUserCapability('moodle/course:view', $context->id, $roleid); + + // Add manager role to $USER. + // So $USER is allowed to assign 'manager', 'editingteacher', 'teacher' and 'student'. + role_assign(1, $USER->id, context_system::instance()->id); + + // Add teacher role to $USER on course context. + role_assign(3, $USER->id, $context->id); + + // Check the teacher role has been assigned to $USER on course context. + $users = get_role_users(3, $context); + $this->assertEquals(count($users), 1); + + // Call the external function. Assign teacher role to $USER. + core_role_external::unassign_roles(array( + array('roleid' => 3, 'userid' => $USER->id, 'contextid' => $context->id))); + + // Check the role has been unassigned on course context. + $users = get_role_users(3, $context); + $this->assertEquals(count($users), 0); + + // Call without required capability. + $this->unassignUserCapability('moodle/role:assign', $context->id, $roleid); + $this->setExpectedException('moodle_exception'); + $categories = core_role_external::unassign_roles( + array('roleid' => 3, 'userid' => $USER->id, 'contextid' => $context->id)); + } +}