diff --git a/enrol/cohort/tests/cohortlib_test.php b/enrol/cohort/tests/cohortlib_test.php index 3744c7c4929..080f0dd84a4 100644 --- a/enrol/cohort/tests/cohortlib_test.php +++ b/enrol/cohort/tests/cohortlib_test.php @@ -83,4 +83,56 @@ class enrol_cohort_lib_testcase extends advanced_testcase { $this->assertEquals($cohort->name . ' cohort (3)', $groupinfo->name); } + + /** + * Test for getting user enrolment actions. + */ + public function test_get_user_enrolment_actions() { + global $CFG, $PAGE; + $this->resetAfterTest(); + + // Set page URL to prevent debugging messages. + $PAGE->set_url('/enrol/editinstance.php'); + + $pluginname = 'cohort'; + + // Only enable the cohort enrol plugin. + $CFG->enrol_plugins_enabled = $pluginname; + + $generator = $this->getDataGenerator(); + + // Get the enrol plugin. + $plugin = enrol_get_plugin($pluginname); + + // Create a course. + $course = $generator->create_course(); + // Enable this enrol plugin for the course. + $plugin->add_instance($course); + + // Create a student. + $student = $generator->create_user(); + // Enrol the student to the course. + $generator->enrol_user($student->id, $course->id, 'student', $pluginname); + + // Teachers don't have enrol/cohort:unenrol capability by default. Login as admin for simplicity. + $this->setAdminUser(); + require_once($CFG->dirroot . '/enrol/locallib.php'); + $manager = new course_enrolment_manager($PAGE, $course); + + $userenrolments = $manager->get_user_enrolments($student->id); + $this->assertCount(1, $userenrolments); + + $ue = reset($userenrolments); + $actions = $plugin->get_user_enrolment_actions($manager, $ue); + // Cohort-sync has no enrol actions for active students. + $this->assertCount(0, $actions); + + // Enrol actions for a suspended student. + // Suspend the student. + $ue->status = ENROL_USER_SUSPENDED; + + $actions = $plugin->get_user_enrolment_actions($manager, $ue); + // Cohort-sync has enrol actions for suspended students -- unenrol. + $this->assertCount(1, $actions); + } } diff --git a/enrol/database/tests/lib_test.php b/enrol/database/tests/lib_test.php new file mode 100644 index 00000000000..ee80a91f250 --- /dev/null +++ b/enrol/database/tests/lib_test.php @@ -0,0 +1,86 @@ +. + +/** + * Database enrolment tests. + * + * @package enrol_database + * @copyright 2017 Jun Pataleta + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + + +/** + * Database enrolment tests. + * + * @package enrol_database + * @copyright 2017 Jun Pataleta + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class enrol_database_lib_testcase extends advanced_testcase { + /** + * Test for getting user enrolment actions. + */ + public function test_get_user_enrolment_actions() { + global $CFG, $PAGE; + $this->resetAfterTest(); + + // Set page URL to prevent debugging messages. + $PAGE->set_url('/enrol/editinstance.php'); + + $pluginname = 'database'; + + // Only enable the database enrol plugin. + $CFG->enrol_plugins_enabled = $pluginname; + + $generator = $this->getDataGenerator(); + + // Get the enrol plugin. + $plugin = enrol_get_plugin($pluginname); + + // Create a course. + $course = $generator->create_course(); + // Enable this enrol plugin for the course. + $plugin->add_instance($course); + + // Create a student. + $student = $generator->create_user(); + // Enrol the student to the course. + $generator->enrol_user($student->id, $course->id, 'student', $pluginname); + + // Teachers don't have enrol/database:unenrol capability by default. Login as admin for simplicity. + $this->setAdminUser(); + require_once($CFG->dirroot . '/enrol/locallib.php'); + $manager = new course_enrolment_manager($PAGE, $course); + $userenrolments = $manager->get_user_enrolments($student->id); + $this->assertCount(1, $userenrolments); + + $ue = reset($userenrolments); + $actions = $plugin->get_user_enrolment_actions($manager, $ue); + // Database enrol has 0 enrol actions for active users. + $this->assertCount(0, $actions); + + // Enrol actions for a suspended student. + // Suspend the student. + $ue->status = ENROL_USER_SUSPENDED; + + $actions = $plugin->get_user_enrolment_actions($manager, $ue); + // Database enrol has enrol actions for suspended students -- unenrol. + $this->assertCount(1, $actions); + } +} diff --git a/enrol/flatfile/tests/flatfile_test.php b/enrol/flatfile/tests/flatfile_test.php index 0ab21c9fa11..8f48e3751a3 100644 --- a/enrol/flatfile/tests/flatfile_test.php +++ b/enrol/flatfile/tests/flatfile_test.php @@ -498,4 +498,49 @@ class enrol_flatfile_testcase extends advanced_testcase { $this->assertEquals(1, $DB->count_records('role_assignments', array('roleid' => $studentrole->id))); } + + /** + * Test for getting user enrolment actions. + */ + public function test_get_user_enrolment_actions() { + global $CFG, $PAGE; + $this->resetAfterTest(); + + // Set page URL to prevent debugging messages. + $PAGE->set_url('/enrol/editinstance.php'); + + $pluginname = 'flatfile'; + + // Only enable the flatfile enrol plugin. + $CFG->enrol_plugins_enabled = $pluginname; + + $generator = $this->getDataGenerator(); + + // Get the enrol plugin. + $plugin = enrol_get_plugin($pluginname); + + // Create a course. + $course = $generator->create_course(); + // Enable this enrol plugin for the course. + $plugin->add_instance($course); + + // Create a student. + $student = $generator->create_user(); + // Enrol the student to the course. + $generator->enrol_user($student->id, $course->id, 'student', $pluginname); + + // Teachers don't have enrol/flatfile:manage and enrol/flatfile:unenrol capabilities by default. + // Login as admin for simplicity. + $this->setAdminUser(); + + require_once($CFG->dirroot . '/enrol/locallib.php'); + $manager = new course_enrolment_manager($PAGE, $course); + $userenrolments = $manager->get_user_enrolments($student->id); + $this->assertCount(1, $userenrolments); + + $ue = reset($userenrolments); + $actions = $plugin->get_user_enrolment_actions($manager, $ue); + // Flatfile enrolment has 2 enrol actions for active users -- edit and unenrol. + $this->assertCount(2, $actions); + } } diff --git a/enrol/lti/tests/lib_test.php b/enrol/lti/tests/lib_test.php index 823be1a444d..3e478660c9b 100644 --- a/enrol/lti/tests/lib_test.php +++ b/enrol/lti/tests/lib_test.php @@ -117,4 +117,53 @@ class enrol_lti_testcase extends advanced_testcase { $this->assertFalse($DB->record_exists('enrol_lti_tools', [ 'id' => $tool->id ])); $this->assertFalse($DB->record_exists('enrol', [ 'id' => $instance->id ])); } + + /** + * Test for getting user enrolment actions. + */ + public function test_get_user_enrolment_actions() { + global $CFG, $DB, $PAGE; + $this->resetAfterTest(); + + // Set page URL to prevent debugging messages. + $PAGE->set_url('/enrol/editinstance.php'); + + $pluginname = 'lti'; + + // Only enable the lti enrol plugin. + $CFG->enrol_plugins_enabled = $pluginname; + + $generator = $this->getDataGenerator(); + + // Get the enrol plugin. + $plugin = enrol_get_plugin($pluginname); + + // Create a course. + $course = $generator->create_course(); + $context = context_course::instance($course->id); + $teacherroleid = $DB->get_field('role', 'id', ['shortname' => 'editingteacher'], MUST_EXIST); + $studentroleid = $DB->get_field('role', 'id', ['shortname' => 'student'], MUST_EXIST); + + // Enable this enrol plugin for the course. + $fields = ['contextid' => $context->id, 'roleinstructor' => $teacherroleid, 'rolelearner' => $studentroleid]; + $plugin->add_instance($course, $fields); + + // Create a student. + $student = $generator->create_user(); + // Enrol the student to the course. + $generator->enrol_user($student->id, $course->id, 'student', $pluginname); + + // Teachers don't have enrol/lti:unenrol capability by default. Login as admin for simplicity. + $this->setAdminUser(); + + require_once($CFG->dirroot . '/enrol/locallib.php'); + $manager = new course_enrolment_manager($PAGE, $course); + $userenrolments = $manager->get_user_enrolments($student->id); + $this->assertCount(1, $userenrolments); + + $ue = reset($userenrolments); + $actions = $plugin->get_user_enrolment_actions($manager, $ue); + // LTI enrolment has 1 enrol actions for active users -- unenrol. + $this->assertCount(1, $actions); + } } diff --git a/enrol/manual/tests/lib_test.php b/enrol/manual/tests/lib_test.php index 4f4c6d203a5..9233c40d87c 100644 --- a/enrol/manual/tests/lib_test.php +++ b/enrol/manual/tests/lib_test.php @@ -493,4 +493,51 @@ class enrol_manual_lib_testcase extends advanced_testcase { $manualplugin->send_expiry_notifications($trace); $this->assertEquals(6, $sink->count()); } + + /** + * Test for getting user enrolment actions. + */ + public function test_get_user_enrolment_actions() { + global $CFG, $PAGE; + $this->resetAfterTest(); + + // Set page URL to prevent debugging messages. + $PAGE->set_url('/enrol/editinstance.php'); + + $pluginname = 'manual'; + + // Only enable the manual enrol plugin. + $CFG->enrol_plugins_enabled = $pluginname; + + $generator = $this->getDataGenerator(); + + // Get the enrol plugin. + $plugin = enrol_get_plugin($pluginname); + + // Create a course. + $course = $generator->create_course(); + // Enable this enrol plugin for the course. + $plugin->add_instance($course); + + // Create a teacher. + $teacher = $generator->create_user(); + // Enrol the teacher to the course. + $generator->enrol_user($teacher->id, $course->id, 'editingteacher', $pluginname); + // Create a student. + $student = $generator->create_user(); + // Enrol the student to the course. + $generator->enrol_user($student->id, $course->id, 'student', $pluginname); + + // Login as the teacher. + $this->setUser($teacher); + require_once($CFG->dirroot . '/enrol/locallib.php'); + $manager = new course_enrolment_manager($PAGE, $course); + $userenrolments = $manager->get_user_enrolments($student->id); + $this->assertCount(1, $userenrolments); + + $ue = reset($userenrolments); + $actions = $plugin->get_user_enrolment_actions($manager, $ue); + // Manual enrol has 2 enrol actions -- edit and unenrol. + $this->assertCount(2, $actions); + } } diff --git a/enrol/meta/tests/plugin_test.php b/enrol/meta/tests/plugin_test.php index 5f292e5b6db..c51ba228463 100644 --- a/enrol/meta/tests/plugin_test.php +++ b/enrol/meta/tests/plugin_test.php @@ -870,4 +870,56 @@ class enrol_meta_plugin_testcase extends advanced_testcase { $this->assertEquals($expectedenrolments, $enrolments); $sink->close(); } + + /** + * Test for getting user enrolment actions. + */ + public function test_get_user_enrolment_actions() { + global $CFG, $PAGE; + $this->resetAfterTest(); + + // Set page URL to prevent debugging messages. + $PAGE->set_url('/enrol/editinstance.php'); + + $pluginname = 'meta'; + + // Only enable the meta enrol plugin. + $CFG->enrol_plugins_enabled = $pluginname; + + $generator = $this->getDataGenerator(); + + // Get the enrol plugin. + $plugin = enrol_get_plugin($pluginname); + + // Create a course. + $course = $generator->create_course(); + // Enable this enrol plugin for the course. + $plugin->add_instance($course); + + // Create a student. + $student = $generator->create_user(); + // Enrol the student to the course. + $generator->enrol_user($student->id, $course->id, 'student', $pluginname); + + // Teachers don't have enrol/meta:unenrol capability by default. Login as admin for simplicity. + $this->setAdminUser(); + require_once($CFG->dirroot . '/enrol/locallib.php'); + $manager = new course_enrolment_manager($PAGE, $course); + + $userenrolments = $manager->get_user_enrolments($student->id); + $this->assertCount(1, $userenrolments); + + $ue = reset($userenrolments); + $actions = $plugin->get_user_enrolment_actions($manager, $ue); + // Meta-link enrolment has no enrol actions for active students. + $this->assertCount(0, $actions); + + // Enrol actions for a suspended student. + // Suspend the student. + $ue->status = ENROL_USER_SUSPENDED; + + $actions = $plugin->get_user_enrolment_actions($manager, $ue); + // Meta-link enrolment has enrol actions for suspended students -- unenrol. + $this->assertCount(1, $actions); + } } diff --git a/enrol/paypal/tests/paypal_test.php b/enrol/paypal/tests/paypal_test.php index d31b75b6708..0fcefe58f71 100644 --- a/enrol/paypal/tests/paypal_test.php +++ b/enrol/paypal/tests/paypal_test.php @@ -168,4 +168,60 @@ class enrol_paypal_testcase extends advanced_testcase { $this->assertEquals(4, $DB->count_records('role_assignments', array('roleid'=>$studentrole->id))); $this->assertEquals(1, $DB->count_records('role_assignments', array('roleid'=>$teacherrole->id))); } + + /** + * Test for getting user enrolment actions. + */ + public function test_get_user_enrolment_actions() { + global $CFG, $PAGE; + $this->resetAfterTest(); + + // Set page URL to prevent debugging messages. + $PAGE->set_url('/enrol/editinstance.php'); + + $pluginname = 'paypal'; + + // Only enable the paypal enrol plugin. + $CFG->enrol_plugins_enabled = $pluginname; + + $generator = $this->getDataGenerator(); + + // Get the enrol plugin. + $plugin = enrol_get_plugin($pluginname); + + // Create a course. + $course = $generator->create_course(); + // Enable this enrol plugin for the course. + $plugin->add_instance($course); + + // Create a student. + $student = $generator->create_user(); + // Enrol the student to the course. + $generator->enrol_user($student->id, $course->id, 'student', $pluginname); + + require_once($CFG->dirroot . '/enrol/locallib.php'); + $manager = new course_enrolment_manager($PAGE, $course); + $userenrolments = $manager->get_user_enrolments($student->id); + $this->assertCount(1, $userenrolments); + + $ue = reset($userenrolments); + + // Login as admin to see all enrol actions. + $this->setAdminUser(); + $actions = $plugin->get_user_enrolment_actions($manager, $ue); + + // Paypal enrolment has 2 enrol actions for active users when logged in as admin: edit and unenrol. + $this->assertCount(2, $actions); + + // Enrol actions when viewing as a teacher. + // Create a teacher. + $teacher = $generator->create_user(); + // Enrol the teacher to the course. + $generator->enrol_user($teacher->id, $course->id, 'editingteacher', $pluginname); + // Login as the teacher. + $this->setUser($teacher); + $actions = $plugin->get_user_enrolment_actions($manager, $ue); + // Teachers don't have the enrol/paypal:unenrol capability by default, but have enrol/paypal:manage. + $this->assertCount(1, $actions); + } } diff --git a/enrol/self/tests/self_test.php b/enrol/self/tests/self_test.php index dd8c247001f..1cf5509e0f4 100644 --- a/enrol/self/tests/self_test.php +++ b/enrol/self/tests/self_test.php @@ -726,4 +726,51 @@ class enrol_self_testcase extends advanced_testcase { $contact = $selfplugin->get_welcome_email_contact(ENROL_SEND_EMAIL_FROM_NOREPLY, $context); $this->assertEquals($noreplyuser, $contact); } + + /** + * Test for getting user enrolment actions. + */ + public function test_get_user_enrolment_actions() { + global $CFG, $DB, $PAGE; + $this->resetAfterTest(); + + // Set page URL to prevent debugging messages. + $PAGE->set_url('/enrol/editinstance.php'); + + $pluginname = 'self'; + + // Only enable the self enrol plugin. + $CFG->enrol_plugins_enabled = $pluginname; + + $generator = $this->getDataGenerator(); + + // Get the enrol plugin. + $plugin = enrol_get_plugin($pluginname); + + // Create a course. + $course = $generator->create_course(); + + // Create a teacher. + $teacher = $generator->create_user(); + // Enrol the teacher to the course. + $enrolresult = $generator->enrol_user($teacher->id, $course->id, 'editingteacher', $pluginname); + $this->assertTrue($enrolresult); + // Create a student. + $student = $generator->create_user(); + // Enrol the student to the course. + $enrolresult = $generator->enrol_user($student->id, $course->id, 'student', $pluginname); + $this->assertTrue($enrolresult); + + // Login as the teacher. + $this->setUser($teacher); + require_once($CFG->dirroot . '/enrol/locallib.php'); + $manager = new course_enrolment_manager($PAGE, $course); + $userenrolments = $manager->get_user_enrolments($student->id); + $this->assertCount(1, $userenrolments); + + $ue = reset($userenrolments); + $actions = $plugin->get_user_enrolment_actions($manager, $ue); + // Self enrol has 2 enrol actions -- edit and unenrol. + $this->assertCount(2, $actions); + } }