Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

> namespace enrol_category; /** >
* Category enrolment sync functional test. * * @package enrol_category * @category phpunit * @copyright 2012 Petr Skoda {@link http://skodak.org} * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */
< < defined('MOODLE_INTERNAL') || die(); < < class enrol_category_plugin_testcase extends advanced_testcase {
> class plugin_test extends \advanced_testcase {
protected function enable_plugin() { $enabled = enrol_get_plugins(true); $enabled['category'] = true; $enabled = array_keys($enabled); set_config('enrol_plugins_enabled', implode(',', $enabled)); } protected function disable_plugin() { $enabled = enrol_get_plugins(true); unset($enabled['category']); $enabled = array_keys($enabled); set_config('enrol_plugins_enabled', implode(',', $enabled)); } protected function enable_role_sync($roleid) {
< $syscontext = context_system::instance();
> $syscontext = \context_system::instance();
assign_capability('enrol/category:synchronised', CAP_ALLOW, $roleid, $syscontext, true); } protected function disable_role_sync($roleid) {
< $syscontext = context_system::instance();
> $syscontext = \context_system::instance();
unassign_capability('enrol/category:synchronised', $roleid, $syscontext); } /** * Test utility methods used in syn test, fail here means something * in core accesslib was changed, but it is possible that only this test * is affected, nto the plugin itself... */ public function test_utils() { global $DB; $this->resetAfterTest();
< $syscontext = context_system::instance();
> $syscontext = \context_system::instance();
$this->assertFalse(enrol_is_enabled('category')); $this->enable_plugin(); $this->assertTrue(enrol_is_enabled('category')); $roles = get_roles_with_capability('enrol/category:synchronised', CAP_ALLOW, $syscontext); $this->assertEmpty($roles); $studentrole = $DB->get_record('role', array('shortname'=>'student')); $this->assertNotEmpty($studentrole); $this->enable_role_sync($studentrole->id); $roles = get_roles_with_capability('enrol/category:synchronised', CAP_ALLOW, $syscontext); $this->assertEquals(1, count($roles)); $this->assertEquals($studentrole, reset($roles)); $this->disable_role_sync($studentrole->id); $roles = get_roles_with_capability('enrol/category:synchronised', CAP_ALLOW, $syscontext); $this->assertEmpty($roles); } public function test_handler_sync() { global $DB, $CFG; require_once($CFG->dirroot.'/enrol/category/locallib.php'); $this->resetAfterTest(); // Setup a few courses and categories. $studentrole = $DB->get_record('role', array('shortname'=>'student')); $this->assertNotEmpty($studentrole); $teacherrole = $DB->get_record('role', array('shortname'=>'teacher')); $this->assertNotEmpty($teacherrole); $managerrole = $DB->get_record('role', array('shortname'=>'manager')); $this->assertNotEmpty($managerrole); $cat1 = $this->getDataGenerator()->create_category(); $cat2 = $this->getDataGenerator()->create_category(); $cat3 = $this->getDataGenerator()->create_category(array('parent'=>$cat2->id)); $course1 = $this->getDataGenerator()->create_course(array('category'=>$cat1->id)); $course2 = $this->getDataGenerator()->create_course(array('category'=>$cat2->id)); $course3 = $this->getDataGenerator()->create_course(array('category'=>$cat3->id)); $course4 = $this->getDataGenerator()->create_course(array('category'=>$cat3->id)); $user1 = $this->getDataGenerator()->create_user(); $user2 = $this->getDataGenerator()->create_user(); $user3 = $this->getDataGenerator()->create_user(); $user4 = $this->getDataGenerator()->create_user(); $this->enable_role_sync($studentrole->id); $this->enable_role_sync($teacherrole->id); $this->enable_plugin(); $this->assertEquals(0, $DB->count_records('role_assignments', array())); $this->assertEquals(0, $DB->count_records('user_enrolments', array())); // Test assign event.
< role_assign($managerrole->id, $user1->id, context_coursecat::instance($cat1->id)); < role_assign($managerrole->id, $user3->id, context_course::instance($course1->id)); < role_assign($managerrole->id, $user3->id, context_course::instance($course2->id));
> role_assign($managerrole->id, $user1->id, \context_coursecat::instance($cat1->id)); > role_assign($managerrole->id, $user3->id, \context_course::instance($course1->id)); > role_assign($managerrole->id, $user3->id, \context_course::instance($course2->id));
$this->assertEquals(0, $DB->count_records('user_enrolments', array()));
< role_assign($studentrole->id, $user1->id, context_coursecat::instance($cat2->id)); < $this->assertTrue(is_enrolled(context_course::instance($course2->id), $user1->id)); < $this->assertTrue(is_enrolled(context_course::instance($course3->id), $user1->id)); < $this->assertTrue(is_enrolled(context_course::instance($course4->id), $user1->id));
> role_assign($studentrole->id, $user1->id, \context_coursecat::instance($cat2->id)); > $this->assertTrue(is_enrolled(\context_course::instance($course2->id), $user1->id)); > $this->assertTrue(is_enrolled(\context_course::instance($course3->id), $user1->id)); > $this->assertTrue(is_enrolled(\context_course::instance($course4->id), $user1->id));
$this->assertEquals(3, $DB->count_records('user_enrolments', array()));
< role_assign($managerrole->id, $user2->id, context_coursecat::instance($cat3->id));
> role_assign($managerrole->id, $user2->id, \context_coursecat::instance($cat3->id));
$this->assertEquals(3, $DB->count_records('user_enrolments', array()));
< role_assign($teacherrole->id, $user4->id, context_coursecat::instance($cat1->id)); < $this->assertTrue(is_enrolled(context_course::instance($course1->id), $user4->id));
> role_assign($teacherrole->id, $user4->id, \context_coursecat::instance($cat1->id)); > $this->assertTrue(is_enrolled(\context_course::instance($course1->id), $user4->id));
$this->assertEquals(4, $DB->count_records('user_enrolments', array())); // Test role unassigned event.
< role_unassign($teacherrole->id, $user4->id, context_coursecat::instance($cat1->id)->id); < $this->assertFalse(is_enrolled(context_course::instance($course1->id), $user4->id));
> role_unassign($teacherrole->id, $user4->id, \context_coursecat::instance($cat1->id)->id); > $this->assertFalse(is_enrolled(\context_course::instance($course1->id), $user4->id));
$this->assertEquals(3, $DB->count_records('user_enrolments', array())); // Make sure handlers are disabled when plugin disabled. $this->disable_plugin();
< role_unassign($studentrole->id, $user1->id, context_coursecat::instance($cat2->id)->id);
> role_unassign($studentrole->id, $user1->id, \context_coursecat::instance($cat2->id)->id);
$this->assertEquals(3, $DB->count_records('user_enrolments', array()));
< role_assign($studentrole->id, $user3->id, context_coursecat::instance($cat1->id));
> role_assign($studentrole->id, $user3->id, \context_coursecat::instance($cat1->id));
$this->assertEquals(3, $DB->count_records('user_enrolments', array())); } public function test_sync_course() { global $DB, $CFG; require_once($CFG->dirroot.'/enrol/category/locallib.php'); $this->resetAfterTest(); // Setup a few courses and categories. $studentrole = $DB->get_record('role', array('shortname'=>'student')); $this->assertNotEmpty($studentrole); $teacherrole = $DB->get_record('role', array('shortname'=>'teacher')); $this->assertNotEmpty($teacherrole); $managerrole = $DB->get_record('role', array('shortname'=>'manager')); $this->assertNotEmpty($managerrole); $cat1 = $this->getDataGenerator()->create_category(); $cat2 = $this->getDataGenerator()->create_category(); $cat3 = $this->getDataGenerator()->create_category(array('parent'=>$cat2->id)); $course1 = $this->getDataGenerator()->create_course(array('category'=>$cat1->id)); $course2 = $this->getDataGenerator()->create_course(array('category'=>$cat2->id)); $course3 = $this->getDataGenerator()->create_course(array('category'=>$cat3->id)); $course4 = $this->getDataGenerator()->create_course(array('category'=>$cat3->id)); $user1 = $this->getDataGenerator()->create_user(); $user2 = $this->getDataGenerator()->create_user(); $user3 = $this->getDataGenerator()->create_user(); $user4 = $this->getDataGenerator()->create_user(); $this->enable_role_sync($studentrole->id); $this->enable_role_sync($teacherrole->id); $this->enable_plugin(); $this->assertEquals(0, $DB->count_records('role_assignments', array()));
< role_assign($managerrole->id, $user1->id, context_coursecat::instance($cat1->id)); < role_assign($managerrole->id, $user3->id, context_course::instance($course1->id)); < role_assign($managerrole->id, $user3->id, context_course::instance($course2->id));
> role_assign($managerrole->id, $user1->id, \context_coursecat::instance($cat1->id)); > role_assign($managerrole->id, $user3->id, \context_course::instance($course1->id)); > role_assign($managerrole->id, $user3->id, \context_course::instance($course2->id));
$this->assertEquals(0, $DB->count_records('user_enrolments', array())); $this->disable_plugin(); // Stops the event handlers.
< role_assign($studentrole->id, $user1->id, context_coursecat::instance($cat2->id));
> role_assign($studentrole->id, $user1->id, \context_coursecat::instance($cat2->id));
$this->assertEquals(0, $DB->count_records('user_enrolments', array())); $this->enable_plugin(); enrol_category_sync_course($course2);
< $this->assertTrue(is_enrolled(context_course::instance($course2->id), $user1->id)); < $this->assertFalse(is_enrolled(context_course::instance($course3->id), $user1->id)); < $this->assertFalse(is_enrolled(context_course::instance($course4->id), $user1->id));
> $this->assertTrue(is_enrolled(\context_course::instance($course2->id), $user1->id)); > $this->assertFalse(is_enrolled(\context_course::instance($course3->id), $user1->id)); > $this->assertFalse(is_enrolled(\context_course::instance($course4->id), $user1->id));
$this->assertEquals(1, $DB->count_records('user_enrolments', array())); enrol_category_sync_course($course2); enrol_category_sync_course($course3); enrol_category_sync_course($course4);
< $this->assertFalse(is_enrolled(context_course::instance($course1->id), $user1->id)); < $this->assertTrue(is_enrolled(context_course::instance($course2->id), $user1->id)); < $this->assertTrue(is_enrolled(context_course::instance($course3->id), $user1->id)); < $this->assertTrue(is_enrolled(context_course::instance($course4->id), $user1->id));
> $this->assertFalse(is_enrolled(\context_course::instance($course1->id), $user1->id)); > $this->assertTrue(is_enrolled(\context_course::instance($course2->id), $user1->id)); > $this->assertTrue(is_enrolled(\context_course::instance($course3->id), $user1->id)); > $this->assertTrue(is_enrolled(\context_course::instance($course4->id), $user1->id));
$this->assertEquals(3, $DB->count_records('user_enrolments', array())); $this->disable_plugin(); // Stops the event handlers.
< role_assign($studentrole->id, $user2->id, context_coursecat::instance($cat1->id)); < role_assign($teacherrole->id, $user4->id, context_coursecat::instance($cat1->id)); < role_unassign($studentrole->id, $user1->id, context_coursecat::instance($cat2->id)->id);
> role_assign($studentrole->id, $user2->id, \context_coursecat::instance($cat1->id)); > role_assign($teacherrole->id, $user4->id, \context_coursecat::instance($cat1->id)); > role_unassign($studentrole->id, $user1->id, \context_coursecat::instance($cat2->id)->id);
$this->assertEquals(3, $DB->count_records('user_enrolments', array())); $this->enable_plugin(); enrol_category_sync_course($course2);
< $this->assertFalse(is_enrolled(context_course::instance($course2->id), $user1->id)); < $this->assertFalse(is_enrolled(context_course::instance($course2->id), $user2->id)); < $this->assertFalse(is_enrolled(context_course::instance($course2->id), $user4->id));
> $this->assertFalse(is_enrolled(\context_course::instance($course2->id), $user1->id)); > $this->assertFalse(is_enrolled(\context_course::instance($course2->id), $user2->id)); > $this->assertFalse(is_enrolled(\context_course::instance($course2->id), $user4->id));
enrol_category_sync_course($course1); enrol_category_sync_course($course3); enrol_category_sync_course($course4); $this->assertEquals(2, $DB->count_records('user_enrolments', array()));
< $this->assertTrue(is_enrolled(context_course::instance($course1->id), $user2->id)); < $this->assertTrue(is_enrolled(context_course::instance($course1->id), $user4->id));
> $this->assertTrue(is_enrolled(\context_course::instance($course1->id), $user2->id)); > $this->assertTrue(is_enrolled(\context_course::instance($course1->id), $user4->id));
$this->disable_role_sync($studentrole->id); enrol_category_sync_course($course1); enrol_category_sync_course($course2); enrol_category_sync_course($course3); enrol_category_sync_course($course4); $this->assertEquals(1, $DB->count_records('user_enrolments', array()));
< $this->assertTrue(is_enrolled(context_course::instance($course1->id), $user4->id));
> $this->assertTrue(is_enrolled(\context_course::instance($course1->id), $user4->id));
$this->assertEquals(1, $DB->count_records('enrol', array('enrol'=>'category'))); $this->disable_role_sync($teacherrole->id); enrol_category_sync_course($course1); enrol_category_sync_course($course2); enrol_category_sync_course($course3); enrol_category_sync_course($course4); $this->assertEquals(0, $DB->count_records('user_enrolments', array())); $this->assertEquals(0, $DB->count_records('enrol', array('enrol'=>'category'))); } public function test_sync_full() { global $DB, $CFG; require_once($CFG->dirroot.'/enrol/category/locallib.php'); $this->resetAfterTest();
< $trace = new null_progress_trace();
> $trace = new \null_progress_trace();
// Setup a few courses and categories. $studentrole = $DB->get_record('role', array('shortname'=>'student')); $this->assertNotEmpty($studentrole); $teacherrole = $DB->get_record('role', array('shortname'=>'teacher')); $this->assertNotEmpty($teacherrole); $managerrole = $DB->get_record('role', array('shortname'=>'manager')); $this->assertNotEmpty($managerrole); $cat1 = $this->getDataGenerator()->create_category(); $cat2 = $this->getDataGenerator()->create_category(); $cat3 = $this->getDataGenerator()->create_category(array('parent'=>$cat2->id)); $course1 = $this->getDataGenerator()->create_course(array('category'=>$cat1->id)); $course2 = $this->getDataGenerator()->create_course(array('category'=>$cat2->id)); $course3 = $this->getDataGenerator()->create_course(array('category'=>$cat3->id)); $course4 = $this->getDataGenerator()->create_course(array('category'=>$cat3->id)); $user1 = $this->getDataGenerator()->create_user(); $user2 = $this->getDataGenerator()->create_user(); $user3 = $this->getDataGenerator()->create_user(); $user4 = $this->getDataGenerator()->create_user(); $this->enable_role_sync($studentrole->id); $this->enable_role_sync($teacherrole->id); $this->enable_plugin(); $this->assertEquals(0, $DB->count_records('role_assignments', array()));
< role_assign($managerrole->id, $user1->id, context_coursecat::instance($cat1->id)); < role_assign($managerrole->id, $user3->id, context_course::instance($course1->id)); < role_assign($managerrole->id, $user3->id, context_course::instance($course2->id));
> role_assign($managerrole->id, $user1->id, \context_coursecat::instance($cat1->id)); > role_assign($managerrole->id, $user3->id, \context_course::instance($course1->id)); > role_assign($managerrole->id, $user3->id, \context_course::instance($course2->id));
$this->assertEquals(0, $DB->count_records('user_enrolments', array())); $result = enrol_category_sync_full($trace); $this->assertSame(0, $result); $this->disable_plugin();
< role_assign($studentrole->id, $user1->id, context_coursecat::instance($cat2->id));
> role_assign($studentrole->id, $user1->id, \context_coursecat::instance($cat2->id));
$this->enable_plugin(); $result = enrol_category_sync_full($trace); $this->assertSame(0, $result); $this->assertEquals(3, $DB->count_records('user_enrolments', array()));
< $this->assertTrue(is_enrolled(context_course::instance($course2->id), $user1->id)); < $this->assertTrue(is_enrolled(context_course::instance($course3->id), $user1->id)); < $this->assertTrue(is_enrolled(context_course::instance($course4->id), $user1->id));
> $this->assertTrue(is_enrolled(\context_course::instance($course2->id), $user1->id)); > $this->assertTrue(is_enrolled(\context_course::instance($course3->id), $user1->id)); > $this->assertTrue(is_enrolled(\context_course::instance($course4->id), $user1->id));
$this->disable_plugin();
< role_unassign($studentrole->id, $user1->id, context_coursecat::instance($cat2->id)->id); < role_assign($studentrole->id, $user2->id, context_coursecat::instance($cat1->id)); < role_assign($teacherrole->id, $user4->id, context_coursecat::instance($cat1->id)); < role_assign($teacherrole->id, $user3->id, context_coursecat::instance($cat2->id)); < role_assign($managerrole->id, $user3->id, context_course::instance($course3->id));
> role_unassign($studentrole->id, $user1->id, \context_coursecat::instance($cat2->id)->id); > role_assign($studentrole->id, $user2->id, \context_coursecat::instance($cat1->id)); > role_assign($teacherrole->id, $user4->id, \context_coursecat::instance($cat1->id)); > role_assign($teacherrole->id, $user3->id, \context_coursecat::instance($cat2->id)); > role_assign($managerrole->id, $user3->id, \context_course::instance($course3->id));
$this->enable_plugin(); $result = enrol_category_sync_full($trace); $this->assertSame(0, $result); $this->assertEquals(5, $DB->count_records('user_enrolments', array()));
< $this->assertTrue(is_enrolled(context_course::instance($course1->id), $user2->id)); < $this->assertTrue(is_enrolled(context_course::instance($course1->id), $user4->id)); < $this->assertTrue(is_enrolled(context_course::instance($course2->id), $user3->id)); < $this->assertTrue(is_enrolled(context_course::instance($course3->id), $user3->id)); < $this->assertTrue(is_enrolled(context_course::instance($course4->id), $user3->id));
> $this->assertTrue(is_enrolled(\context_course::instance($course1->id), $user2->id)); > $this->assertTrue(is_enrolled(\context_course::instance($course1->id), $user4->id)); > $this->assertTrue(is_enrolled(\context_course::instance($course2->id), $user3->id)); > $this->assertTrue(is_enrolled(\context_course::instance($course3->id), $user3->id)); > $this->assertTrue(is_enrolled(\context_course::instance($course4->id), $user3->id));
// Cleanup everything. $this->assertNotEmpty($DB->count_records('role_assignments', array())); $this->assertNotEmpty($DB->count_records('user_enrolments', array())); $this->disable_plugin(); role_unassign_all(array('roleid'=>$studentrole->id)); role_unassign_all(array('roleid'=>$managerrole->id)); role_unassign_all(array('roleid'=>$teacherrole->id)); $result = enrol_category_sync_full($trace); $this->assertSame(2, $result); $this->assertEquals(0, $DB->count_records('role_assignments', array())); $this->assertNotEmpty($DB->count_records('user_enrolments', array())); $this->disable_role_sync($studentrole->id); $this->disable_role_sync($teacherrole->id); $this->enable_plugin(); $result = enrol_category_sync_full($trace); $this->assertSame(0, $result); $this->assertEquals(0, $DB->count_records('role_assignments', array())); $this->assertEquals(0, $DB->count_records('user_enrolments', array())); $this->assertEquals(0, $DB->count_records('enrol', array('enrol'=>'category'))); } }