diff --git a/enrol/meta/tests/plugin_test.php b/enrol/meta/tests/plugin_test.php index c9efef159e8..772c8d08c20 100644 --- a/enrol/meta/tests/plugin_test.php +++ b/enrol/meta/tests/plugin_test.php @@ -532,6 +532,68 @@ class enrol_meta_plugin_testcase extends advanced_testcase { $this->assertFalse(is_enrolled(context_course::instance($course3->id), $user4, '', true)); } + /** + * Enrol users from another course into a course where one of the members is already enrolled + * and is a member of the same group. + */ + public function test_add_to_group_with_member() { + global $CFG, $DB; + + require_once($CFG->dirroot.'/group/lib.php'); + + $this->resetAfterTest(true); + + $metalplugin = enrol_get_plugin('meta'); + + $user1 = $this->getDataGenerator()->create_user(); + $user2 = $this->getDataGenerator()->create_user(); + + $course1 = $this->getDataGenerator()->create_course(); + $course2 = $this->getDataGenerator()->create_course(); + $manualenrol1 = $DB->get_record('enrol', array('courseid' => $course1->id, 'enrol' => 'manual'), '*', MUST_EXIST); + $manualenrol2 = $DB->get_record('enrol', array('courseid' => $course2->id, 'enrol' => 'manual'), '*', MUST_EXIST); + + $student = $DB->get_record('role', array('shortname' => 'student')); + + $groupid = groups_create_group((object)array('name' => 'Grp', 'courseid' => $course2->id)); + + $this->enable_plugin(); + set_config('unenrolaction', ENROL_EXT_REMOVED_UNENROL, 'enrol_meta'); + + // Manually enrol user1 to course2 and add him to group. + // Manually enrol user2 to course2 but do not add him to the group. + enrol_get_plugin('manual')->enrol_user($manualenrol2, $user1->id, $student->id); + groups_add_member($groupid, $user1->id); + enrol_get_plugin('manual')->enrol_user($manualenrol2, $user2->id, $student->id); + $this->assertTrue(groups_is_member($groupid, $user1->id)); + $this->assertFalse(groups_is_member($groupid, $user2->id)); + + // Add instance of meta enrolment in course2 linking to course1 and enrol both users in course1. + $metalplugin->add_instance($course2, array('customint1' => $course1->id, 'customint2' => $groupid)); + + enrol_get_plugin('manual')->enrol_user($manualenrol1, $user1->id, $student->id); + enrol_get_plugin('manual')->enrol_user($manualenrol1, $user2->id, $student->id); + + // Both users now should be members of the group. + $this->assertTrue(groups_is_member($groupid, $user1->id)); + $this->assertTrue(groups_is_member($groupid, $user2->id)); + + // Ununerol both users from course1. + enrol_get_plugin('manual')->unenrol_user($manualenrol1, $user1->id); + enrol_get_plugin('manual')->unenrol_user($manualenrol1, $user2->id); + + // User1 should still be member of the group because he was added there manually. User2 should no longer be there. + $this->assertTrue(groups_is_member($groupid, $user1->id)); + $this->assertFalse(groups_is_member($groupid, $user2->id)); + + // Assert that everything is the same after sync. + enrol_meta_sync(); + + $this->assertTrue(groups_is_member($groupid, $user1->id)); + $this->assertFalse(groups_is_member($groupid, $user2->id)); + + } + /** * Test user_enrolment_created event. */