/** * Test workshop::check_group_membership() functionality. */ public function test_check_group_membership() { global $DB, $CFG; $this->resetAfterTest(); $courseid = $this->course->id; $generator = $this->getDataGenerator(); // Make test groups. $group1 = $generator->create_group(array('courseid' => $courseid)); $group2 = $generator->create_group(array('courseid' => $courseid)); $group3 = $generator->create_group(array('courseid' => $courseid)); // Revoke the accessallgroups from non-editing teachers (tutors). $roleids = $DB->get_records_menu('role', null, '', 'shortname, id'); unassign_capability('moodle/site:accessallgroups', $roleids['teacher']); // Create test use accounts. $teacher1 = $generator->create_user(); $tutor1 = $generator->create_user(); $tutor2 = $generator->create_user(); $student1 = $generator->create_user(); $student2 = $generator->create_user(); $student3 = $generator->create_user(); // Enrol the teacher (has the access all groups permission). $generator->enrol_user($teacher1->id, $courseid, $roleids['editingteacher']); // Enrol tutors (can not access all groups). $generator->enrol_user($tutor1->id, $courseid, $roleids['teacher']); $generator->enrol_user($tutor2->id, $courseid, $roleids['teacher']); // Enrol students. $generator->enrol_user($student1->id, $courseid, $roleids['student']); $generator->enrol_user($student2->id, $courseid, $roleids['student']); $generator->enrol_user($student3->id, $courseid, $roleids['student']); // Add users in groups. groups_add_member($group1, $tutor1); groups_add_member($group2, $tutor2); groups_add_member($group1, $student1); groups_add_member($group2, $student2); groups_add_member($group3, $student3); // Workshop with no groups. $workshopitem1 = $this->getDataGenerator()->create_module('workshop', ['course' => $courseid, 'groupmode' => NOGROUPS]); $cm = get_coursemodule_from_instance('workshop', $workshopitem1->id, $courseid, false, MUST_EXIST); $workshop1 = new testable_workshop($workshopitem1, $cm, $this->course); $this->setUser($teacher1); $this->assertTrue($workshop1->check_group_membership($student1->id)); $this->assertTrue($workshop1->check_group_membership($student2->id)); $this->assertTrue($workshop1->check_group_membership($student3->id)); $this->setUser($tutor1); $this->assertTrue($workshop1->check_group_membership($student1->id)); $this->assertTrue($workshop1->check_group_membership($student2->id)); $this->assertTrue($workshop1->check_group_membership($student3->id)); // Workshop in visible groups mode. $workshopitem2 = $this->getDataGenerator()->create_module('workshop', ['course' => $courseid, 'groupmode' => VISIBLEGROUPS]); $cm = get_coursemodule_from_instance('workshop', $workshopitem2->id, $courseid, false, MUST_EXIST); $workshop2 = new testable_workshop($workshopitem2, $cm, $this->course); $this->setUser($teacher1); $this->assertTrue($workshop2->check_group_membership($student1->id)); $this->assertTrue($workshop2->check_group_membership($student2->id)); $this->assertTrue($workshop2->check_group_membership($student3->id)); $this->setUser($tutor1); $this->assertTrue($workshop2->check_group_membership($student1->id)); $this->assertTrue($workshop2->check_group_membership($student2->id)); $this->assertTrue($workshop2->check_group_membership($student3->id)); // Workshop in separate groups mode. $workshopitem3 = $this->getDataGenerator()->create_module('workshop', ['course' => $courseid, 'groupmode' => SEPARATEGROUPS]); $cm = get_coursemodule_from_instance('workshop', $workshopitem3->id, $courseid, false, MUST_EXIST); $workshop3 = new testable_workshop($workshopitem3, $cm, $this->course); $this->setUser($teacher1); $this->assertTrue($workshop3->check_group_membership($student1->id)); $this->assertTrue($workshop3->check_group_membership($student2->id)); $this->assertTrue($workshop3->check_group_membership($student3->id)); $this->setUser($tutor1); $this->assertTrue($workshop3->check_group_membership($student1->id)); $this->assertFalse($workshop3->check_group_membership($student2->id)); $this->assertFalse($workshop3->check_group_membership($student3->id)); $this->setUser($tutor2); $this->assertFalse($workshop3->check_group_membership($student1->id)); $this->assertTrue($workshop3->check_group_membership($student2->id)); $this->assertFalse($workshop3->check_group_membership($student3->id)); }