| 1 | efrain | 1 | <?php
 | 
        
           |  |  | 2 | // This file is part of Moodle - http://moodle.org/
 | 
        
           |  |  | 3 | //
 | 
        
           |  |  | 4 | // Moodle is free software: you can redistribute it and/or modify
 | 
        
           |  |  | 5 | // it under the terms of the GNU General Public License as published by
 | 
        
           |  |  | 6 | // the Free Software Foundation, either version 3 of the License, or
 | 
        
           |  |  | 7 | // (at your option) any later version.
 | 
        
           |  |  | 8 | //
 | 
        
           |  |  | 9 | // Moodle is distributed in the hope that it will be useful,
 | 
        
           |  |  | 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
        
           |  |  | 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
        
           |  |  | 12 | // GNU General Public License for more details.
 | 
        
           |  |  | 13 | //
 | 
        
           |  |  | 14 | // You should have received a copy of the GNU General Public License
 | 
        
           |  |  | 15 | // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
 | 
        
           |  |  | 16 |   | 
        
           |  |  | 17 | /**
 | 
        
           |  |  | 18 |  * Privacy provider tests.
 | 
        
           |  |  | 19 |  *
 | 
        
           |  |  | 20 |  * @package    core_group
 | 
        
           |  |  | 21 |  * @category   test
 | 
        
           |  |  | 22 |  * @copyright  2018 Shamim Rezaie <shamim@moodle.com>
 | 
        
           |  |  | 23 |  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 | 
        
           |  |  | 24 |  */
 | 
        
           |  |  | 25 | namespace core_group\privacy;
 | 
        
           |  |  | 26 |   | 
        
           |  |  | 27 | defined('MOODLE_INTERNAL') || die();
 | 
        
           |  |  | 28 |   | 
        
           |  |  | 29 | use core_privacy\tests\provider_testcase;
 | 
        
           |  |  | 30 | use core_privacy\local\metadata\collection;
 | 
        
           |  |  | 31 | use core_group\privacy\provider;
 | 
        
           |  |  | 32 | use core_privacy\local\request\writer;
 | 
        
           |  |  | 33 |   | 
        
           |  |  | 34 | /**
 | 
        
           |  |  | 35 |  * Privacy provider test for core_group.
 | 
        
           |  |  | 36 |  *
 | 
        
           |  |  | 37 |  * @copyright  2018 Shamim Rezaie <shamim@moodle.com>
 | 
        
           |  |  | 38 |  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 | 
        
           |  |  | 39 |  */
 | 
        
           | 1441 | ariadna | 40 | final class provider_test extends provider_testcase {
 | 
        
           | 1 | efrain | 41 |   | 
        
           |  |  | 42 |     /**
 | 
        
           |  |  | 43 |      * Test for provider::get_metadata().
 | 
        
           |  |  | 44 |      */
 | 
        
           | 11 | efrain | 45 |     public function test_get_metadata(): void {
 | 
        
           | 1 | efrain | 46 |         $collection = new collection('core_group');
 | 
        
           |  |  | 47 |         $newcollection = provider::get_metadata($collection);
 | 
        
           |  |  | 48 |         $itemcollection = $newcollection->get_collection();
 | 
        
           |  |  | 49 |         $this->assertCount(2, $itemcollection);
 | 
        
           |  |  | 50 |   | 
        
           |  |  | 51 |         $table = array_shift($itemcollection);
 | 
        
           |  |  | 52 |         $this->assertEquals('groups_members', $table->get_name());
 | 
        
           |  |  | 53 |         $this->assertEquals('privacy:metadata:groups', $table->get_summary());
 | 
        
           |  |  | 54 |   | 
        
           |  |  | 55 |         $privacyfields = $table->get_privacy_fields();
 | 
        
           |  |  | 56 |         $this->assertArrayHasKey('groupid', $privacyfields);
 | 
        
           |  |  | 57 |         $this->assertArrayHasKey('userid', $privacyfields);
 | 
        
           |  |  | 58 |         $this->assertArrayHasKey('timeadded', $privacyfields);
 | 
        
           |  |  | 59 |   | 
        
           |  |  | 60 |         $table = array_shift($itemcollection);
 | 
        
           |  |  | 61 |         $this->assertEquals('core_message', $table->get_name());
 | 
        
           |  |  | 62 |         $this->assertEquals('privacy:metadata:core_message', $table->get_summary());
 | 
        
           |  |  | 63 |     }
 | 
        
           |  |  | 64 |   | 
        
           |  |  | 65 |     /**
 | 
        
           |  |  | 66 |      * Test for provider::export_groups() to export manual group memberships.
 | 
        
           |  |  | 67 |      */
 | 
        
           | 11 | efrain | 68 |     public function test_export_groups(): void {
 | 
        
           | 1 | efrain | 69 |         $this->resetAfterTest();
 | 
        
           |  |  | 70 |   | 
        
           |  |  | 71 |         $course = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 72 |         $user1 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 73 |         $user2 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 74 |         $group1 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
 | 
        
           |  |  | 75 |         $group2 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
 | 
        
           |  |  | 76 |         $group3 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
 | 
        
           |  |  | 77 |         $group4 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
 | 
        
           |  |  | 78 |         $this->getDataGenerator()->enrol_user($user1->id, $course->id);
 | 
        
           |  |  | 79 |         $this->getDataGenerator()->enrol_user($user2->id, $course->id);
 | 
        
           |  |  | 80 |   | 
        
           |  |  | 81 |         // Add user1 to group1 and group2.
 | 
        
           |  |  | 82 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group1->id, 'userid' => $user1->id));
 | 
        
           |  |  | 83 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2->id, 'userid' => $user1->id));
 | 
        
           |  |  | 84 |   | 
        
           |  |  | 85 |         // Add user2 to group2 and group3.
 | 
        
           |  |  | 86 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2->id, 'userid' => $user2->id));
 | 
        
           |  |  | 87 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group3->id, 'userid' => $user2->id));
 | 
        
           |  |  | 88 |   | 
        
           |  |  | 89 |         $context = \context_course::instance($course->id);
 | 
        
           |  |  | 90 |   | 
        
           |  |  | 91 |         // Retrieve groups for user1.
 | 
        
           |  |  | 92 |         $this->setUser($user1);
 | 
        
           |  |  | 93 |         /** @var \core_privacy\tests\request\content_writer $writer */
 | 
        
           |  |  | 94 |         $writer = writer::with_context($context);
 | 
        
           |  |  | 95 |         provider::export_groups($context, '');
 | 
        
           |  |  | 96 |   | 
        
           |  |  | 97 |         $data = $writer->get_data([get_string('groups', 'core_group')]);
 | 
        
           |  |  | 98 |         $exportedgroups = $data->groups;
 | 
        
           |  |  | 99 |   | 
        
           |  |  | 100 |         // User1 belongs to group1 and group2.
 | 
        
           |  |  | 101 |         $this->assertEqualsCanonicalizing(
 | 
        
           |  |  | 102 |                 [$group1->name, $group2->name],
 | 
        
           |  |  | 103 |                 array_column($exportedgroups, 'name'));
 | 
        
           |  |  | 104 |     }
 | 
        
           |  |  | 105 |   | 
        
           |  |  | 106 |     /**
 | 
        
           |  |  | 107 |      * Test for provider::export_groups() to export group memberships of a component.
 | 
        
           |  |  | 108 |      */
 | 
        
           | 11 | efrain | 109 |     public function test_export_groups_for_component(): void {
 | 
        
           | 1 | efrain | 110 |         $this->resetAfterTest();
 | 
        
           |  |  | 111 |   | 
        
           |  |  | 112 |         $course = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 113 |         $user1 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 114 |         $user2 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 115 |         $group1 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
 | 
        
           |  |  | 116 |         $group2 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
 | 
        
           |  |  | 117 |         $group3 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
 | 
        
           |  |  | 118 |         $group4 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
 | 
        
           |  |  | 119 |         $group5 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
 | 
        
           |  |  | 120 |         $this->getDataGenerator()->enrol_user($user1->id, $course->id, null, 'self');
 | 
        
           |  |  | 121 |         $this->getDataGenerator()->enrol_user($user2->id, $course->id, null, 'self');
 | 
        
           |  |  | 122 |   | 
        
           |  |  | 123 |         // Add user1 to group1 (via enrol_self) and group2 and group3.
 | 
        
           |  |  | 124 |         $this->getDataGenerator()->create_group_member(
 | 
        
           |  |  | 125 |                 array('groupid' => $group1->id, 'userid' => $user1->id, 'component' => 'enrol_self'));
 | 
        
           |  |  | 126 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2->id, 'userid' => $user1->id));
 | 
        
           |  |  | 127 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group3->id, 'userid' => $user1->id));
 | 
        
           |  |  | 128 |   | 
        
           |  |  | 129 |         // Add user2 to group3 (via enrol_self) and group4.
 | 
        
           |  |  | 130 |         $this->getDataGenerator()->create_group_member(
 | 
        
           |  |  | 131 |                 array('groupid' => $group3->id, 'userid' => $user2->id, 'component' => 'enrol_self'));
 | 
        
           |  |  | 132 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group4->id, 'userid' => $user2->id));
 | 
        
           |  |  | 133 |   | 
        
           |  |  | 134 |         $context = \context_course::instance($course->id);
 | 
        
           |  |  | 135 |   | 
        
           |  |  | 136 |         // Retrieve groups for user1.
 | 
        
           |  |  | 137 |         $this->setUser($user1);
 | 
        
           |  |  | 138 |         /** @var \core_privacy\tests\request\content_writer $writer */
 | 
        
           |  |  | 139 |         $writer = writer::with_context($context);
 | 
        
           |  |  | 140 |         provider::export_groups($context, 'enrol_self');
 | 
        
           |  |  | 141 |   | 
        
           |  |  | 142 |         $data = $writer->get_data([get_string('groups', 'core_group')]);
 | 
        
           |  |  | 143 |         $exportedgroups = $data->groups;
 | 
        
           |  |  | 144 |   | 
        
           |  |  | 145 |         // User1 only belongs to group1 via enrol_self.
 | 
        
           |  |  | 146 |         $this->assertCount(1, $exportedgroups);
 | 
        
           |  |  | 147 |         $exportedgroup = reset($exportedgroups);
 | 
        
           |  |  | 148 |         $this->assertEquals($group1->name, $exportedgroup->name);
 | 
        
           |  |  | 149 |     }
 | 
        
           |  |  | 150 |   | 
        
           |  |  | 151 |     /**
 | 
        
           |  |  | 152 |      * Test for provider::delete_groups_for_all_users() to delete manual group memberships.
 | 
        
           |  |  | 153 |      */
 | 
        
           | 11 | efrain | 154 |     public function test_delete_groups_for_all_users(): void {
 | 
        
           | 1 | efrain | 155 |         global $DB;
 | 
        
           |  |  | 156 |   | 
        
           |  |  | 157 |         $this->resetAfterTest();
 | 
        
           |  |  | 158 |   | 
        
           |  |  | 159 |         $course1 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 160 |         $course2 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 161 |   | 
        
           |  |  | 162 |         $group1a = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 163 |         $group1b = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 164 |         $group2a = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 165 |         $group2b = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 166 |   | 
        
           |  |  | 167 |         $user1 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 168 |         $user2 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 169 |   | 
        
           |  |  | 170 |         $this->getDataGenerator()->enrol_user($user1->id, $course1->id);
 | 
        
           |  |  | 171 |         $this->getDataGenerator()->enrol_user($user1->id, $course2->id);
 | 
        
           |  |  | 172 |         $this->getDataGenerator()->enrol_user($user2->id, $course1->id);
 | 
        
           |  |  | 173 |         $this->getDataGenerator()->enrol_user($user2->id, $course2->id);
 | 
        
           |  |  | 174 |   | 
        
           |  |  | 175 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group1a->id, 'userid' => $user1->id));
 | 
        
           |  |  | 176 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group1b->id, 'userid' => $user2->id));
 | 
        
           |  |  | 177 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2a->id, 'userid' => $user1->id));
 | 
        
           |  |  | 178 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2b->id, 'userid' => $user2->id));
 | 
        
           |  |  | 179 |   | 
        
           |  |  | 180 |         $this->assertEquals(
 | 
        
           |  |  | 181 |                 2,
 | 
        
           |  |  | 182 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 183 |                                       FROM {groups_members} gm
 | 
        
           |  |  | 184 |                                       JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 185 |                                      WHERE g.courseid = ?", [$course1->id])
 | 
        
           |  |  | 186 |         );
 | 
        
           |  |  | 187 |         $this->assertEquals(
 | 
        
           |  |  | 188 |                 2,
 | 
        
           |  |  | 189 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 190 |                                       FROM {groups_members} gm
 | 
        
           |  |  | 191 |                                       JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 192 |                                      WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 193 |         );
 | 
        
           |  |  | 194 |   | 
        
           |  |  | 195 |         $coursecontext1 = \context_course::instance($course1->id);
 | 
        
           |  |  | 196 |         provider::delete_groups_for_all_users($coursecontext1, '');
 | 
        
           |  |  | 197 |   | 
        
           |  |  | 198 |         $this->assertEquals(
 | 
        
           |  |  | 199 |             0,
 | 
        
           |  |  | 200 |             $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 201 |                                       FROM {groups_members} gm
 | 
        
           |  |  | 202 |                                       JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 203 |                                      WHERE g.courseid = ?", [$course1->id])
 | 
        
           |  |  | 204 |         );
 | 
        
           |  |  | 205 |         $this->assertEquals(
 | 
        
           |  |  | 206 |             2,
 | 
        
           |  |  | 207 |             $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 208 |                                       FROM {groups_members} gm
 | 
        
           |  |  | 209 |                                       JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 210 |                                      WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 211 |         );
 | 
        
           |  |  | 212 |     }
 | 
        
           |  |  | 213 |   | 
        
           |  |  | 214 |     /**
 | 
        
           |  |  | 215 |      * Test for provider::delete_groups_for_all_users() to delete group memberships of a component.
 | 
        
           |  |  | 216 |      */
 | 
        
           | 11 | efrain | 217 |     public function test_delete_groups_for_all_users_for_component(): void {
 | 
        
           | 1 | efrain | 218 |         global $DB;
 | 
        
           |  |  | 219 |   | 
        
           |  |  | 220 |         $this->resetAfterTest();
 | 
        
           |  |  | 221 |   | 
        
           |  |  | 222 |         $course1 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 223 |         $course2 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 224 |   | 
        
           |  |  | 225 |         $group1a = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 226 |         $group1b = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 227 |         $group2a = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 228 |         $group2b = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 229 |   | 
        
           |  |  | 230 |         $user1 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 231 |         $user2 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 232 |   | 
        
           |  |  | 233 |         $this->getDataGenerator()->enrol_user($user1->id, $course1->id, null, 'self');
 | 
        
           |  |  | 234 |         $this->getDataGenerator()->enrol_user($user1->id, $course2->id, null, 'self');
 | 
        
           |  |  | 235 |         $this->getDataGenerator()->enrol_user($user2->id, $course1->id, null, 'self');
 | 
        
           |  |  | 236 |         $this->getDataGenerator()->enrol_user($user2->id, $course2->id, null, 'self');
 | 
        
           |  |  | 237 |   | 
        
           |  |  | 238 |         $this->getDataGenerator()->create_group_member(
 | 
        
           |  |  | 239 |                 array('groupid' => $group1a->id, 'userid' => $user1->id, 'component' => 'enrol_self'));
 | 
        
           |  |  | 240 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group1b->id, 'userid' => $user2->id));
 | 
        
           |  |  | 241 |         $this->getDataGenerator()->create_group_member(
 | 
        
           |  |  | 242 |                 array('groupid' => $group2a->id, 'userid' => $user1->id, 'component' => 'enrol_self'));
 | 
        
           |  |  | 243 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2b->id, 'userid' => $user2->id));
 | 
        
           |  |  | 244 |   | 
        
           |  |  | 245 |         $this->assertEquals(
 | 
        
           |  |  | 246 |                 2,
 | 
        
           |  |  | 247 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 248 |                                       FROM {groups_members} gm
 | 
        
           |  |  | 249 |                                       JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 250 |                                      WHERE g.courseid = ?", [$course1->id])
 | 
        
           |  |  | 251 |         );
 | 
        
           |  |  | 252 |         $this->assertEquals(
 | 
        
           |  |  | 253 |                 2,
 | 
        
           |  |  | 254 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 255 |                                       FROM {groups_members} gm
 | 
        
           |  |  | 256 |                                       JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 257 |                                      WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 258 |         );
 | 
        
           |  |  | 259 |   | 
        
           |  |  | 260 |         $coursecontext1 = \context_course::instance($course1->id);
 | 
        
           |  |  | 261 |         provider::delete_groups_for_all_users($coursecontext1, 'enrol_self');
 | 
        
           |  |  | 262 |   | 
        
           |  |  | 263 |         $this->assertEquals(
 | 
        
           |  |  | 264 |             1,
 | 
        
           |  |  | 265 |             $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 266 |                                       FROM {groups_members} gm
 | 
        
           |  |  | 267 |                                       JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 268 |                                      WHERE g.courseid = ?", [$course1->id])
 | 
        
           |  |  | 269 |         );
 | 
        
           |  |  | 270 |         $this->assertEquals(
 | 
        
           |  |  | 271 |             2,
 | 
        
           |  |  | 272 |             $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 273 |                                       FROM {groups_members} gm
 | 
        
           |  |  | 274 |                                       JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 275 |                                      WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 276 |         );
 | 
        
           |  |  | 277 |     }
 | 
        
           |  |  | 278 |   | 
        
           |  |  | 279 |     /**
 | 
        
           |  |  | 280 |      * Test for provider::delete_groups_for_all_users() to check deleting from cache.
 | 
        
           |  |  | 281 |      */
 | 
        
           | 11 | efrain | 282 |     public function test_delete_groups_for_all_users_deletes_cache(): void {
 | 
        
           | 1 | efrain | 283 |         $this->resetAfterTest();
 | 
        
           |  |  | 284 |   | 
        
           |  |  | 285 |         $course = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 286 |   | 
        
           |  |  | 287 |         $group1 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
 | 
        
           |  |  | 288 |         $group2 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
 | 
        
           |  |  | 289 |   | 
        
           |  |  | 290 |         $user1 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 291 |         $user2 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 292 |   | 
        
           |  |  | 293 |         $this->getDataGenerator()->enrol_user($user1->id, $course->id);
 | 
        
           |  |  | 294 |         $this->getDataGenerator()->enrol_user($user2->id, $course->id);
 | 
        
           |  |  | 295 |   | 
        
           |  |  | 296 |         $this->getDataGenerator()->create_group_member(array('userid' => $user1->id, 'groupid' => $group1->id));
 | 
        
           |  |  | 297 |         $this->getDataGenerator()->create_group_member(array('userid' => $user1->id, 'groupid' => $group2->id));
 | 
        
           |  |  | 298 |         $this->getDataGenerator()->create_group_member(array('userid' => $user2->id, 'groupid' => $group1->id));
 | 
        
           |  |  | 299 |   | 
        
           |  |  | 300 |         $this->assertEqualsCanonicalizing([[$group1->id, $group2->id]], groups_get_user_groups($course->id, $user1->id));
 | 
        
           |  |  | 301 |         $this->assertEquals([[$group1->id]], groups_get_user_groups($course->id, $user2->id));
 | 
        
           |  |  | 302 |   | 
        
           |  |  | 303 |         $coursecontext = \context_course::instance($course->id);
 | 
        
           |  |  | 304 |         provider::delete_groups_for_all_users($coursecontext, '');
 | 
        
           |  |  | 305 |   | 
        
           |  |  | 306 |         $this->assertEquals([[]], groups_get_user_groups($course->id, $user1->id));
 | 
        
           |  |  | 307 |         $this->assertEquals([[]], groups_get_user_groups($course->id, $user2->id));
 | 
        
           |  |  | 308 |     }
 | 
        
           |  |  | 309 |   | 
        
           |  |  | 310 |     /**
 | 
        
           |  |  | 311 |      * Test for provider::delete_groups_for_user() to delete manual group memberships.
 | 
        
           |  |  | 312 |      */
 | 
        
           | 11 | efrain | 313 |     public function test_delete_groups_for_user(): void {
 | 
        
           | 1 | efrain | 314 |         global $DB;
 | 
        
           |  |  | 315 |   | 
        
           |  |  | 316 |         $this->resetAfterTest();
 | 
        
           |  |  | 317 |   | 
        
           |  |  | 318 |         $course1 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 319 |         $course2 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 320 |         $course3 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 321 |   | 
        
           |  |  | 322 |         $group1a = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 323 |         $group1b = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 324 |         $group2a = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 325 |         $group2b = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 326 |         $group3a = $this->getDataGenerator()->create_group(array('courseid' => $course3->id));
 | 
        
           |  |  | 327 |         $group3b = $this->getDataGenerator()->create_group(array('courseid' => $course3->id));
 | 
        
           |  |  | 328 |   | 
        
           |  |  | 329 |         $user1 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 330 |         $user2 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 331 |   | 
        
           |  |  | 332 |         $this->getDataGenerator()->enrol_user($user1->id, $course1->id);
 | 
        
           |  |  | 333 |         $this->getDataGenerator()->enrol_user($user1->id, $course2->id);
 | 
        
           |  |  | 334 |         $this->getDataGenerator()->enrol_user($user1->id, $course3->id);
 | 
        
           |  |  | 335 |         $this->getDataGenerator()->enrol_user($user2->id, $course1->id);
 | 
        
           |  |  | 336 |         $this->getDataGenerator()->enrol_user($user2->id, $course2->id);
 | 
        
           |  |  | 337 |         $this->getDataGenerator()->enrol_user($user2->id, $course3->id);
 | 
        
           |  |  | 338 |   | 
        
           |  |  | 339 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group1a->id, 'userid' => $user1->id));
 | 
        
           |  |  | 340 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group1b->id, 'userid' => $user2->id));
 | 
        
           |  |  | 341 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2a->id, 'userid' => $user1->id));
 | 
        
           |  |  | 342 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2b->id, 'userid' => $user2->id));
 | 
        
           |  |  | 343 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group3a->id, 'userid' => $user1->id));
 | 
        
           |  |  | 344 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group3b->id, 'userid' => $user2->id));
 | 
        
           |  |  | 345 |   | 
        
           |  |  | 346 |         $this->assertEquals(
 | 
        
           |  |  | 347 |                 2,
 | 
        
           |  |  | 348 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 349 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 350 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 351 |                                          WHERE g.courseid = ?", [$course1->id])
 | 
        
           |  |  | 352 |         );
 | 
        
           |  |  | 353 |         $this->assertEquals(
 | 
        
           |  |  | 354 |                 2,
 | 
        
           |  |  | 355 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 356 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 357 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 358 |                                          WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 359 |         );
 | 
        
           |  |  | 360 |         $this->assertEquals(
 | 
        
           |  |  | 361 |                 2,
 | 
        
           |  |  | 362 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 363 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 364 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 365 |                                          WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 366 |         );
 | 
        
           |  |  | 367 |         $this->assertEquals(
 | 
        
           |  |  | 368 |                 3,
 | 
        
           |  |  | 369 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 370 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 371 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 372 |                                          WHERE gm.userid = ?", [$user1->id])
 | 
        
           |  |  | 373 |         );
 | 
        
           |  |  | 374 |   | 
        
           |  |  | 375 |         $this->setUser($user1);
 | 
        
           |  |  | 376 |         $coursecontext1 = \context_course::instance($course1->id);
 | 
        
           |  |  | 377 |         $coursecontext2 = \context_course::instance($course2->id);
 | 
        
           |  |  | 378 |         $approvedcontextlist = new \core_privacy\tests\request\approved_contextlist($user1, 'core_group',
 | 
        
           |  |  | 379 |                 [$coursecontext1->id, $coursecontext2->id]);
 | 
        
           |  |  | 380 |         provider::delete_groups_for_user($approvedcontextlist, '');
 | 
        
           |  |  | 381 |   | 
        
           |  |  | 382 |         $this->assertEquals(
 | 
        
           |  |  | 383 |                 1,
 | 
        
           |  |  | 384 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 385 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 386 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 387 |                                          WHERE g.courseid = ?", [$course1->id])
 | 
        
           |  |  | 388 |         );
 | 
        
           |  |  | 389 |         $this->assertEquals(
 | 
        
           |  |  | 390 |                 1,
 | 
        
           |  |  | 391 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 392 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 393 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 394 |                                          WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 395 |         );
 | 
        
           |  |  | 396 |         $this->assertEquals(
 | 
        
           |  |  | 397 |                 2,
 | 
        
           |  |  | 398 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 399 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 400 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 401 |                                          WHERE g.courseid = ?", [$course3->id])
 | 
        
           |  |  | 402 |         );
 | 
        
           |  |  | 403 |         $this->assertEquals(
 | 
        
           |  |  | 404 |                 1,
 | 
        
           |  |  | 405 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 406 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 407 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 408 |                                          WHERE gm.userid = ?", [$user1->id])
 | 
        
           |  |  | 409 |         );
 | 
        
           |  |  | 410 |     }
 | 
        
           |  |  | 411 |   | 
        
           |  |  | 412 |     /**
 | 
        
           |  |  | 413 |      * Test for provider::delete_groups_for_user() to delete group memberships of a component.
 | 
        
           |  |  | 414 |      */
 | 
        
           | 11 | efrain | 415 |     public function test_delete_groups_for_user_for_component(): void {
 | 
        
           | 1 | efrain | 416 |         global $DB;
 | 
        
           |  |  | 417 |   | 
        
           |  |  | 418 |         $this->resetAfterTest();
 | 
        
           |  |  | 419 |   | 
        
           |  |  | 420 |         $course1 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 421 |         $course2 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 422 |         $course3 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 423 |   | 
        
           |  |  | 424 |         $group1a = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 425 |         $group1b = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 426 |         $group2a = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 427 |         $group2b = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 428 |         $group3a = $this->getDataGenerator()->create_group(array('courseid' => $course3->id));
 | 
        
           |  |  | 429 |         $group3b = $this->getDataGenerator()->create_group(array('courseid' => $course3->id));
 | 
        
           |  |  | 430 |   | 
        
           |  |  | 431 |         $user1 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 432 |         $user2 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 433 |   | 
        
           |  |  | 434 |         $this->getDataGenerator()->enrol_user($user1->id, $course1->id, null, 'self');
 | 
        
           |  |  | 435 |         $this->getDataGenerator()->enrol_user($user1->id, $course2->id, null, 'self');
 | 
        
           |  |  | 436 |         $this->getDataGenerator()->enrol_user($user1->id, $course3->id, null, 'self');
 | 
        
           |  |  | 437 |         $this->getDataGenerator()->enrol_user($user2->id, $course1->id, null, 'self');
 | 
        
           |  |  | 438 |         $this->getDataGenerator()->enrol_user($user2->id, $course2->id, null, 'self');
 | 
        
           |  |  | 439 |         $this->getDataGenerator()->enrol_user($user2->id, $course3->id, null, 'self');
 | 
        
           |  |  | 440 |   | 
        
           |  |  | 441 |         $this->getDataGenerator()->create_group_member(
 | 
        
           |  |  | 442 |                 array('groupid' => $group1a->id, 'userid' => $user1->id, 'component' => 'enrol_self'));
 | 
        
           |  |  | 443 |         $this->getDataGenerator()->create_group_member(
 | 
        
           |  |  | 444 |                 array('groupid' => $group1b->id, 'userid' => $user2->id, 'component' => 'enrol_self'));
 | 
        
           |  |  | 445 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2a->id, 'userid' => $user1->id));
 | 
        
           |  |  | 446 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2b->id, 'userid' => $user2->id));
 | 
        
           |  |  | 447 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group3a->id, 'userid' => $user1->id));
 | 
        
           |  |  | 448 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group3b->id, 'userid' => $user2->id));
 | 
        
           |  |  | 449 |   | 
        
           |  |  | 450 |         $this->assertEquals(
 | 
        
           |  |  | 451 |                 2,
 | 
        
           |  |  | 452 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 453 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 454 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 455 |                                          WHERE g.courseid = ?", [$course1->id])
 | 
        
           |  |  | 456 |         );
 | 
        
           |  |  | 457 |         $this->assertEquals(
 | 
        
           |  |  | 458 |                 2,
 | 
        
           |  |  | 459 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 460 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 461 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 462 |                                          WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 463 |         );
 | 
        
           |  |  | 464 |         $this->assertEquals(
 | 
        
           |  |  | 465 |                 2,
 | 
        
           |  |  | 466 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 467 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 468 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 469 |                                          WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 470 |         );
 | 
        
           |  |  | 471 |         $this->assertEquals(
 | 
        
           |  |  | 472 |                 3,
 | 
        
           |  |  | 473 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 474 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 475 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 476 |                                          WHERE gm.userid = ?", [$user1->id])
 | 
        
           |  |  | 477 |         );
 | 
        
           |  |  | 478 |   | 
        
           |  |  | 479 |         $this->setUser($user1);
 | 
        
           |  |  | 480 |         $coursecontext1 = \context_course::instance($course1->id);
 | 
        
           |  |  | 481 |         $coursecontext2 = \context_course::instance($course2->id);
 | 
        
           |  |  | 482 |         $approvedcontextlist = new \core_privacy\tests\request\approved_contextlist($user1, 'core_group',
 | 
        
           |  |  | 483 |                 [$coursecontext1->id, $coursecontext2->id]);
 | 
        
           |  |  | 484 |         provider::delete_groups_for_user($approvedcontextlist, 'enrol_self');
 | 
        
           |  |  | 485 |   | 
        
           |  |  | 486 |         $this->assertEquals(
 | 
        
           |  |  | 487 |                 1,
 | 
        
           |  |  | 488 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 489 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 490 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 491 |                                          WHERE g.courseid = ?", [$course1->id])
 | 
        
           |  |  | 492 |         );
 | 
        
           |  |  | 493 |         $this->assertEquals(
 | 
        
           |  |  | 494 |                 2,
 | 
        
           |  |  | 495 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 496 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 497 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 498 |                                          WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 499 |         );
 | 
        
           |  |  | 500 |         $this->assertEquals(
 | 
        
           |  |  | 501 |                 2,
 | 
        
           |  |  | 502 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 503 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 504 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 505 |                                          WHERE g.courseid = ?", [$course3->id])
 | 
        
           |  |  | 506 |         );
 | 
        
           |  |  | 507 |         $this->assertEquals(
 | 
        
           |  |  | 508 |                 2,
 | 
        
           |  |  | 509 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 510 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 511 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 512 |                                          WHERE gm.userid = ?", [$user1->id])
 | 
        
           |  |  | 513 |         );
 | 
        
           |  |  | 514 |     }
 | 
        
           |  |  | 515 |   | 
        
           |  |  | 516 |     /**
 | 
        
           |  |  | 517 |      * Test for provider::delete_groups_for_users() to delete group memberships of a component.
 | 
        
           |  |  | 518 |      */
 | 
        
           | 11 | efrain | 519 |     public function test_delete_groups_for_users_for_component(): void {
 | 
        
           | 1 | efrain | 520 |         global $DB;
 | 
        
           |  |  | 521 |   | 
        
           |  |  | 522 |         $this->resetAfterTest();
 | 
        
           |  |  | 523 |   | 
        
           |  |  | 524 |         $course1 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 525 |         $course2 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 526 |         $course3 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 527 |   | 
        
           |  |  | 528 |         $group1a = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 529 |         $group1b = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 530 |         $group2a = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 531 |         $group2b = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 532 |         $group3a = $this->getDataGenerator()->create_group(array('courseid' => $course3->id));
 | 
        
           |  |  | 533 |         $group3b = $this->getDataGenerator()->create_group(array('courseid' => $course3->id));
 | 
        
           |  |  | 534 |   | 
        
           |  |  | 535 |         $user1 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 536 |         $user2 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 537 |   | 
        
           |  |  | 538 |         $this->getDataGenerator()->enrol_user($user1->id, $course1->id, null, 'self');
 | 
        
           |  |  | 539 |         $this->getDataGenerator()->enrol_user($user1->id, $course2->id, null, 'self');
 | 
        
           |  |  | 540 |         $this->getDataGenerator()->enrol_user($user1->id, $course3->id, null, 'self');
 | 
        
           |  |  | 541 |         $this->getDataGenerator()->enrol_user($user2->id, $course1->id, null, 'self');
 | 
        
           |  |  | 542 |         $this->getDataGenerator()->enrol_user($user2->id, $course2->id, null, 'self');
 | 
        
           |  |  | 543 |         $this->getDataGenerator()->enrol_user($user2->id, $course3->id, null, 'self');
 | 
        
           |  |  | 544 |   | 
        
           |  |  | 545 |         $this->getDataGenerator()->create_group_member(
 | 
        
           |  |  | 546 |                 array('groupid' => $group1a->id, 'userid' => $user1->id, 'component' => 'enrol_self'));
 | 
        
           |  |  | 547 |         $this->getDataGenerator()->create_group_member(
 | 
        
           |  |  | 548 |                 array('groupid' => $group1b->id, 'userid' => $user2->id, 'component' => 'enrol_self'));
 | 
        
           |  |  | 549 |         $this->getDataGenerator()->create_group_member(
 | 
        
           |  |  | 550 |                 array('groupid' => $group2a->id, 'userid' => $user1->id, 'component' => 'enrol_self'));
 | 
        
           |  |  | 551 |         $this->getDataGenerator()->create_group_member(
 | 
        
           |  |  | 552 |                 array('groupid' => $group2b->id, 'userid' => $user2->id, 'component' => 'enrol_self'));
 | 
        
           |  |  | 553 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group3a->id, 'userid' => $user1->id));
 | 
        
           |  |  | 554 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group3b->id, 'userid' => $user2->id));
 | 
        
           |  |  | 555 |   | 
        
           |  |  | 556 |         $this->assertEquals(
 | 
        
           |  |  | 557 |                 2,
 | 
        
           |  |  | 558 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 559 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 560 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 561 |                                          WHERE g.courseid = ?", [$course1->id])
 | 
        
           |  |  | 562 |         );
 | 
        
           |  |  | 563 |         $this->assertEquals(
 | 
        
           |  |  | 564 |                 2,
 | 
        
           |  |  | 565 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 566 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 567 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 568 |                                          WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 569 |         );
 | 
        
           |  |  | 570 |         $this->assertEquals(
 | 
        
           |  |  | 571 |                 2,
 | 
        
           |  |  | 572 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 573 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 574 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 575 |                                          WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 576 |         );
 | 
        
           |  |  | 577 |         $this->assertEquals(
 | 
        
           |  |  | 578 |                 3,
 | 
        
           |  |  | 579 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 580 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 581 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 582 |                                          WHERE gm.userid = ?", [$user1->id])
 | 
        
           |  |  | 583 |         );
 | 
        
           |  |  | 584 |   | 
        
           |  |  | 585 |         // Delete user1 and user2 from groups in course1.
 | 
        
           |  |  | 586 |         $coursecontext1 = \context_course::instance($course1->id);
 | 
        
           |  |  | 587 |         $approveduserlist = new \core_privacy\local\request\approved_userlist($coursecontext1, 'core_group',
 | 
        
           |  |  | 588 |                 [$user1->id, $user2->id]);
 | 
        
           |  |  | 589 |         provider::delete_groups_for_users($approveduserlist, 'enrol_self');
 | 
        
           |  |  | 590 |   | 
        
           |  |  | 591 |         $this->assertEquals(
 | 
        
           |  |  | 592 |                 0,
 | 
        
           |  |  | 593 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 594 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 595 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 596 |                                          WHERE g.courseid = ?", [$course1->id])
 | 
        
           |  |  | 597 |         );
 | 
        
           |  |  | 598 |         $this->assertEquals(
 | 
        
           |  |  | 599 |                 2,
 | 
        
           |  |  | 600 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 601 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 602 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 603 |                                          WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 604 |         );
 | 
        
           |  |  | 605 |         $this->assertEquals(
 | 
        
           |  |  | 606 |                 2,
 | 
        
           |  |  | 607 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 608 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 609 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 610 |                                          WHERE g.courseid = ?", [$course3->id])
 | 
        
           |  |  | 611 |         );
 | 
        
           |  |  | 612 |         $this->assertEquals(
 | 
        
           |  |  | 613 |                 2,
 | 
        
           |  |  | 614 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 615 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 616 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 617 |                                          WHERE gm.userid = ?", [$user1->id])
 | 
        
           |  |  | 618 |         );
 | 
        
           |  |  | 619 |   | 
        
           |  |  | 620 |         // Delete user1 and user2 from course3.
 | 
        
           |  |  | 621 |         $coursecontext3 = \context_course::instance($course3->id);
 | 
        
           |  |  | 622 |         $approveduserlist = new \core_privacy\local\request\approved_userlist($coursecontext3, 'core_group',
 | 
        
           |  |  | 623 |                 [$user1->id, $user2->id]);
 | 
        
           |  |  | 624 |         provider::delete_groups_for_users($approveduserlist, 'enrol_self');
 | 
        
           |  |  | 625 |         $this->assertEquals(
 | 
        
           |  |  | 626 |                 0,
 | 
        
           |  |  | 627 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 628 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 629 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 630 |                                          WHERE g.courseid = ?", [$course1->id])
 | 
        
           |  |  | 631 |         );
 | 
        
           |  |  | 632 |         $this->assertEquals(
 | 
        
           |  |  | 633 |                 2,
 | 
        
           |  |  | 634 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 635 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 636 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 637 |                                          WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 638 |         );
 | 
        
           |  |  | 639 |         $this->assertEquals(
 | 
        
           |  |  | 640 |                 2,
 | 
        
           |  |  | 641 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 642 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 643 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 644 |                                          WHERE g.courseid = ?", [$course3->id])
 | 
        
           |  |  | 645 |         );
 | 
        
           |  |  | 646 |         $this->assertEquals(
 | 
        
           |  |  | 647 |                 2,
 | 
        
           |  |  | 648 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 649 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 650 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 651 |                                          WHERE gm.userid = ?", [$user1->id])
 | 
        
           |  |  | 652 |         );
 | 
        
           |  |  | 653 |     }
 | 
        
           |  |  | 654 |   | 
        
           |  |  | 655 |     /**
 | 
        
           |  |  | 656 |      * Test for provider::delete_groups_for_user() to check deleting from cache.
 | 
        
           |  |  | 657 |      */
 | 
        
           | 11 | efrain | 658 |     public function test_delete_groups_for_user_deletes_cache(): void {
 | 
        
           | 1 | efrain | 659 |         $this->resetAfterTest();
 | 
        
           |  |  | 660 |   | 
        
           |  |  | 661 |         $course = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 662 |   | 
        
           |  |  | 663 |         $group1 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
 | 
        
           |  |  | 664 |         $group2 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
 | 
        
           |  |  | 665 |   | 
        
           |  |  | 666 |         $user = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 667 |   | 
        
           |  |  | 668 |         $this->getDataGenerator()->enrol_user($user->id, $course->id);
 | 
        
           |  |  | 669 |   | 
        
           |  |  | 670 |         $this->getDataGenerator()->create_group_member(array('userid' => $user->id, 'groupid' => $group1->id));
 | 
        
           |  |  | 671 |         $this->getDataGenerator()->create_group_member(array('userid' => $user->id, 'groupid' => $group2->id));
 | 
        
           |  |  | 672 |   | 
        
           |  |  | 673 |         $this->assertEqualsCanonicalizing([[$group1->id, $group2->id]], groups_get_user_groups($course->id, $user->id));
 | 
        
           |  |  | 674 |   | 
        
           |  |  | 675 |         $this->setUser($user);
 | 
        
           |  |  | 676 |         $coursecontext = \context_course::instance($course->id);
 | 
        
           |  |  | 677 |         $approvedcontextlist = new \core_privacy\tests\request\approved_contextlist($user, 'core_group', [$coursecontext->id]);
 | 
        
           |  |  | 678 |         provider::delete_groups_for_user($approvedcontextlist, '');
 | 
        
           |  |  | 679 |   | 
        
           |  |  | 680 |         $this->assertEquals([[]], groups_get_user_groups($course->id, $user->id));
 | 
        
           |  |  | 681 |     }
 | 
        
           |  |  | 682 |   | 
        
           |  |  | 683 |     /**
 | 
        
           |  |  | 684 |      * Test for provider::get_contexts_for_userid().
 | 
        
           |  |  | 685 |      */
 | 
        
           | 11 | efrain | 686 |     public function test_get_contexts_for_userid(): void {
 | 
        
           | 1 | efrain | 687 |         $this->resetAfterTest();
 | 
        
           |  |  | 688 |   | 
        
           |  |  | 689 |         $course1 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 690 |         $course2 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 691 |         $course3 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 692 |   | 
        
           |  |  | 693 |         $group1a = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 694 |         $group1b = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 695 |         $group2a = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 696 |         $group2b = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 697 |         $group3a = $this->getDataGenerator()->create_group(array('courseid' => $course3->id));
 | 
        
           |  |  | 698 |         $group3b = $this->getDataGenerator()->create_group(array('courseid' => $course3->id));
 | 
        
           |  |  | 699 |   | 
        
           |  |  | 700 |         $user1 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 701 |         $user2 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 702 |   | 
        
           |  |  | 703 |         $this->getDataGenerator()->enrol_user($user1->id, $course1->id);
 | 
        
           |  |  | 704 |         $this->getDataGenerator()->enrol_user($user1->id, $course2->id);
 | 
        
           |  |  | 705 |         $this->getDataGenerator()->enrol_user($user1->id, $course3->id);
 | 
        
           |  |  | 706 |         $this->getDataGenerator()->enrol_user($user2->id, $course1->id);
 | 
        
           |  |  | 707 |         $this->getDataGenerator()->enrol_user($user2->id, $course2->id);
 | 
        
           |  |  | 708 |         $this->getDataGenerator()->enrol_user($user2->id, $course3->id);
 | 
        
           |  |  | 709 |   | 
        
           |  |  | 710 |         $this->getDataGenerator()->create_group_member(array('userid' => $user1->id, 'groupid' => $group1a->id));
 | 
        
           |  |  | 711 |         $this->getDataGenerator()->create_group_member(array('userid' => $user1->id, 'groupid' => $group2a->id));
 | 
        
           |  |  | 712 |         $this->getDataGenerator()->create_group_member(array('userid' => $user2->id, 'groupid' => $group1b->id));
 | 
        
           |  |  | 713 |         $this->getDataGenerator()->create_group_member(array('userid' => $user2->id, 'groupid' => $group2b->id));
 | 
        
           |  |  | 714 |         $this->getDataGenerator()->create_group_member(array('userid' => $user2->id, 'groupid' => $group3b->id));
 | 
        
           |  |  | 715 |   | 
        
           |  |  | 716 |         $coursecontext1 = \context_course::instance($course1->id);
 | 
        
           |  |  | 717 |         $coursecontext2 = \context_course::instance($course2->id);
 | 
        
           |  |  | 718 |   | 
        
           |  |  | 719 |         // User1 is member of some groups in course1 and course2 + self-conversation.
 | 
        
           |  |  | 720 |         $contextlist = provider::get_contexts_for_userid($user1->id);
 | 
        
           |  |  | 721 |         $contextids = array_values($contextlist->get_contextids());
 | 
        
           |  |  | 722 |   | 
        
           |  |  | 723 |         $this->assertCount(3, $contextlist);
 | 
        
           |  |  | 724 |         // One of the user context is the one related to self-conversation. Let's test group contexts.
 | 
        
           |  |  | 725 |         $this->assertContainsEquals($coursecontext1->id, $contextids);
 | 
        
           |  |  | 726 |         $this->assertContainsEquals($coursecontext2->id, $contextids);
 | 
        
           |  |  | 727 |     }
 | 
        
           |  |  | 728 |   | 
        
           |  |  | 729 |     /**
 | 
        
           |  |  | 730 |      * Test for provider::get_contexts_for_userid() when there are group memberships from other components.
 | 
        
           |  |  | 731 |      */
 | 
        
           | 11 | efrain | 732 |     public function test_get_contexts_for_userid_component(): void {
 | 
        
           | 1 | efrain | 733 |         $this->resetAfterTest();
 | 
        
           |  |  | 734 |   | 
        
           |  |  | 735 |         $course1 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 736 |         $course2 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 737 |   | 
        
           |  |  | 738 |         $group1 = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 739 |         $group2 = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 740 |   | 
        
           |  |  | 741 |         $user = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 742 |   | 
        
           |  |  | 743 |         $this->getDataGenerator()->enrol_user($user->id, $course1->id);
 | 
        
           |  |  | 744 |         $this->getDataGenerator()->enrol_user($user->id, $course2->id);
 | 
        
           |  |  | 745 |   | 
        
           |  |  | 746 |         $this->getDataGenerator()->create_group_member(
 | 
        
           |  |  | 747 |                 array(
 | 
        
           |  |  | 748 |                     'userid' => $user->id,
 | 
        
           |  |  | 749 |                     'groupid' => $group1->id
 | 
        
           |  |  | 750 |                 ));
 | 
        
           |  |  | 751 |         $this->getDataGenerator()->create_group_member(
 | 
        
           |  |  | 752 |                 array(
 | 
        
           |  |  | 753 |                     'userid' => $user->id,
 | 
        
           |  |  | 754 |                     'groupid' => $group2->id,
 | 
        
           |  |  | 755 |                     'component' => 'enrol_meta'
 | 
        
           |  |  | 756 |                 ));
 | 
        
           |  |  | 757 |   | 
        
           |  |  | 758 |         $coursecontext1 = \context_course::instance($course1->id);
 | 
        
           |  |  | 759 |   | 
        
           |  |  | 760 |         // User is member of some groups in course1 and course2,
 | 
        
           |  |  | 761 |         // but only the membership in course1 is directly managed by core_group.
 | 
        
           |  |  | 762 |         $contextlist = provider::get_contexts_for_userid($user->id);
 | 
        
           |  |  | 763 |         $this->assertEquals($coursecontext1->id, $contextlist->get_contextids()[0]);
 | 
        
           |  |  | 764 |     }
 | 
        
           |  |  | 765 |   | 
        
           |  |  | 766 |     /**
 | 
        
           |  |  | 767 |      * Test for provider::export_user_data().
 | 
        
           |  |  | 768 |      */
 | 
        
           | 11 | efrain | 769 |     public function test_export_user_data(): void {
 | 
        
           | 1 | efrain | 770 |         $this->resetAfterTest();
 | 
        
           |  |  | 771 |   | 
        
           |  |  | 772 |         $course = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 773 |         $user1 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 774 |         $user2 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 775 |         $group1 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
 | 
        
           |  |  | 776 |         $group2 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
 | 
        
           |  |  | 777 |         $group3 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
 | 
        
           |  |  | 778 |         $group4 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
 | 
        
           |  |  | 779 |         $this->getDataGenerator()->enrol_user($user1->id, $course->id);
 | 
        
           |  |  | 780 |         $this->getDataGenerator()->enrol_user($user2->id, $course->id);
 | 
        
           |  |  | 781 |   | 
        
           |  |  | 782 |         // Add user1 to group1 and group2.
 | 
        
           |  |  | 783 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group1->id, 'userid' => $user1->id));
 | 
        
           |  |  | 784 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2->id, 'userid' => $user1->id));
 | 
        
           |  |  | 785 |   | 
        
           |  |  | 786 |         // Add user2 to group2 and group3.
 | 
        
           |  |  | 787 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2->id, 'userid' => $user2->id));
 | 
        
           |  |  | 788 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group3->id, 'userid' => $user2->id));
 | 
        
           |  |  | 789 |   | 
        
           |  |  | 790 |         $context = \context_course::instance($course->id);
 | 
        
           |  |  | 791 |   | 
        
           |  |  | 792 |         $this->setUser($user1);
 | 
        
           |  |  | 793 |   | 
        
           |  |  | 794 |         // Export all of the data for the context.
 | 
        
           |  |  | 795 |         $this->export_context_data_for_user($user1->id, $context, 'core_group');
 | 
        
           |  |  | 796 |   | 
        
           |  |  | 797 |         /** @var \core_privacy\tests\request\content_writer $writer */
 | 
        
           |  |  | 798 |         $writer = writer::with_context($context);
 | 
        
           |  |  | 799 |         $this->assertTrue($writer->has_any_data());
 | 
        
           |  |  | 800 |   | 
        
           |  |  | 801 |         $data = $writer->get_data([get_string('groups', 'core_group')]);
 | 
        
           |  |  | 802 |         $exportedgroups = $data->groups;
 | 
        
           |  |  | 803 |   | 
        
           |  |  | 804 |         // User1 belongs to group1 and group2.
 | 
        
           |  |  | 805 |         $this->assertEqualsCanonicalizing(
 | 
        
           |  |  | 806 |                 [$group1->name, $group2->name],
 | 
        
           |  |  | 807 |                 array_column($exportedgroups, 'name'));
 | 
        
           |  |  | 808 |     }
 | 
        
           |  |  | 809 |   | 
        
           |  |  | 810 |     /**
 | 
        
           |  |  | 811 |      * Test for provider::delete_data_for_all_users_in_context().
 | 
        
           |  |  | 812 |      */
 | 
        
           | 11 | efrain | 813 |     public function test_delete_data_for_all_users_in_context(): void {
 | 
        
           | 1 | efrain | 814 |         global $DB;
 | 
        
           |  |  | 815 |   | 
        
           |  |  | 816 |         $this->resetAfterTest();
 | 
        
           |  |  | 817 |   | 
        
           |  |  | 818 |         $course1 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 819 |         $course2 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 820 |   | 
        
           |  |  | 821 |         $group1a = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 822 |         $group1b = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 823 |         $group2a = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 824 |         $group2b = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 825 |   | 
        
           |  |  | 826 |         $user1 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 827 |         $user2 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 828 |   | 
        
           |  |  | 829 |         $this->getDataGenerator()->enrol_user($user1->id, $course1->id);
 | 
        
           |  |  | 830 |         $this->getDataGenerator()->enrol_user($user1->id, $course2->id);
 | 
        
           |  |  | 831 |         $this->getDataGenerator()->enrol_user($user2->id, $course1->id);
 | 
        
           |  |  | 832 |         $this->getDataGenerator()->enrol_user($user2->id, $course2->id);
 | 
        
           |  |  | 833 |   | 
        
           |  |  | 834 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group1a->id, 'userid' => $user1->id));
 | 
        
           |  |  | 835 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group1b->id, 'userid' => $user2->id));
 | 
        
           |  |  | 836 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2a->id, 'userid' => $user1->id));
 | 
        
           |  |  | 837 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2b->id, 'userid' => $user2->id));
 | 
        
           |  |  | 838 |   | 
        
           |  |  | 839 |         $this->assertEquals(
 | 
        
           |  |  | 840 |                 2,
 | 
        
           |  |  | 841 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 842 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 843 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 844 |                                          WHERE g.courseid = ?", [$course1->id])
 | 
        
           |  |  | 845 |         );
 | 
        
           |  |  | 846 |         $this->assertEquals(
 | 
        
           |  |  | 847 |                 2,
 | 
        
           |  |  | 848 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 849 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 850 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 851 |                                          WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 852 |         );
 | 
        
           |  |  | 853 |   | 
        
           |  |  | 854 |         $coursecontext1 = \context_course::instance($course1->id);
 | 
        
           |  |  | 855 |         provider::delete_data_for_all_users_in_context($coursecontext1);
 | 
        
           |  |  | 856 |   | 
        
           |  |  | 857 |         $this->assertEquals(
 | 
        
           |  |  | 858 |                 0,
 | 
        
           |  |  | 859 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 860 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 861 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 862 |                                          WHERE g.courseid = ?", [$course1->id])
 | 
        
           |  |  | 863 |         );
 | 
        
           |  |  | 864 |         $this->assertEquals(
 | 
        
           |  |  | 865 |                 2,
 | 
        
           |  |  | 866 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 867 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 868 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 869 |                                          WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 870 |         );
 | 
        
           |  |  | 871 |     }
 | 
        
           |  |  | 872 |   | 
        
           |  |  | 873 |     /**
 | 
        
           |  |  | 874 |      * Test for provider::delete_data_for_user().
 | 
        
           |  |  | 875 |      */
 | 
        
           | 11 | efrain | 876 |     public function test_delete_data_for_user(): void {
 | 
        
           | 1 | efrain | 877 |         global $DB;
 | 
        
           |  |  | 878 |   | 
        
           |  |  | 879 |         $this->resetAfterTest();
 | 
        
           |  |  | 880 |   | 
        
           |  |  | 881 |         $course1 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 882 |         $course2 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 883 |         $course3 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 884 |   | 
        
           |  |  | 885 |         $group1a = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 886 |         $group1b = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 887 |         $group2a = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 888 |         $group2b = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 889 |         $group3a = $this->getDataGenerator()->create_group(array('courseid' => $course3->id));
 | 
        
           |  |  | 890 |         $group3b = $this->getDataGenerator()->create_group(array('courseid' => $course3->id));
 | 
        
           |  |  | 891 |   | 
        
           |  |  | 892 |         $user1 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 893 |         $user2 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 894 |   | 
        
           |  |  | 895 |         $this->getDataGenerator()->enrol_user($user1->id, $course1->id);
 | 
        
           |  |  | 896 |         $this->getDataGenerator()->enrol_user($user1->id, $course2->id);
 | 
        
           |  |  | 897 |         $this->getDataGenerator()->enrol_user($user1->id, $course3->id);
 | 
        
           |  |  | 898 |         $this->getDataGenerator()->enrol_user($user2->id, $course1->id);
 | 
        
           |  |  | 899 |         $this->getDataGenerator()->enrol_user($user2->id, $course2->id);
 | 
        
           |  |  | 900 |         $this->getDataGenerator()->enrol_user($user2->id, $course3->id);
 | 
        
           |  |  | 901 |   | 
        
           |  |  | 902 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group1a->id, 'userid' => $user1->id));
 | 
        
           |  |  | 903 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group1b->id, 'userid' => $user2->id));
 | 
        
           |  |  | 904 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2a->id, 'userid' => $user1->id));
 | 
        
           |  |  | 905 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2b->id, 'userid' => $user2->id));
 | 
        
           |  |  | 906 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group3a->id, 'userid' => $user1->id));
 | 
        
           |  |  | 907 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group3b->id, 'userid' => $user2->id));
 | 
        
           |  |  | 908 |   | 
        
           |  |  | 909 |         $this->assertEquals(
 | 
        
           |  |  | 910 |                 2,
 | 
        
           |  |  | 911 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 912 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 913 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 914 |                                          WHERE g.courseid = ?", [$course1->id])
 | 
        
           |  |  | 915 |         );
 | 
        
           |  |  | 916 |         $this->assertEquals(
 | 
        
           |  |  | 917 |                 2,
 | 
        
           |  |  | 918 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 919 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 920 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 921 |                                          WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 922 |         );
 | 
        
           |  |  | 923 |         $this->assertEquals(
 | 
        
           |  |  | 924 |                 2,
 | 
        
           |  |  | 925 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 926 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 927 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 928 |                                          WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 929 |         );
 | 
        
           |  |  | 930 |         $this->assertEquals(
 | 
        
           |  |  | 931 |                 3,
 | 
        
           |  |  | 932 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 933 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 934 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 935 |                                          WHERE gm.userid = ?", [$user1->id])
 | 
        
           |  |  | 936 |         );
 | 
        
           |  |  | 937 |   | 
        
           |  |  | 938 |         $this->setUser($user1);
 | 
        
           |  |  | 939 |         $coursecontext1 = \context_course::instance($course1->id);
 | 
        
           |  |  | 940 |         $coursecontext2 = \context_course::instance($course2->id);
 | 
        
           |  |  | 941 |         $approvedcontextlist = new \core_privacy\tests\request\approved_contextlist($user1, 'core_group',
 | 
        
           |  |  | 942 |                 [$coursecontext1->id, $coursecontext2->id]);
 | 
        
           |  |  | 943 |         provider::delete_data_for_user($approvedcontextlist);
 | 
        
           |  |  | 944 |   | 
        
           |  |  | 945 |         $this->assertEquals(
 | 
        
           |  |  | 946 |                 1,
 | 
        
           |  |  | 947 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 948 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 949 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 950 |                                          WHERE g.courseid = ?", [$course1->id])
 | 
        
           |  |  | 951 |         );
 | 
        
           |  |  | 952 |         $this->assertEquals(
 | 
        
           |  |  | 953 |                 1,
 | 
        
           |  |  | 954 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 955 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 956 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 957 |                                          WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 958 |         );
 | 
        
           |  |  | 959 |         $this->assertEquals(
 | 
        
           |  |  | 960 |                 2,
 | 
        
           |  |  | 961 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 962 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 963 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 964 |                                          WHERE g.courseid = ?", [$course3->id])
 | 
        
           |  |  | 965 |         );
 | 
        
           |  |  | 966 |         $this->assertEquals(
 | 
        
           |  |  | 967 |                 1,
 | 
        
           |  |  | 968 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 969 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 970 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 971 |                                          WHERE gm.userid = ?", [$user1->id])
 | 
        
           |  |  | 972 |         );
 | 
        
           |  |  | 973 |     }
 | 
        
           |  |  | 974 |   | 
        
           |  |  | 975 |     /**
 | 
        
           |  |  | 976 |      * Test for provider::delete_data_for_users().
 | 
        
           |  |  | 977 |      */
 | 
        
           | 11 | efrain | 978 |     public function test_delete_data_for_users(): void {
 | 
        
           | 1 | efrain | 979 |         global $DB;
 | 
        
           |  |  | 980 |   | 
        
           |  |  | 981 |         $this->resetAfterTest();
 | 
        
           |  |  | 982 |   | 
        
           |  |  | 983 |         $course1 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 984 |         $course2 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 985 |   | 
        
           |  |  | 986 |         $group1a = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 987 |         $group1b = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 988 |         $group1c = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 989 |         $group2a = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 990 |         $group2b = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 991 |         $group2c = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 992 |   | 
        
           |  |  | 993 |         $user1 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 994 |         $user2 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 995 |         $user3 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 996 |   | 
        
           |  |  | 997 |         $this->getDataGenerator()->enrol_user($user1->id, $course1->id);
 | 
        
           |  |  | 998 |         $this->getDataGenerator()->enrol_user($user1->id, $course2->id);
 | 
        
           |  |  | 999 |         $this->getDataGenerator()->enrol_user($user2->id, $course1->id);
 | 
        
           |  |  | 1000 |         $this->getDataGenerator()->enrol_user($user2->id, $course2->id);
 | 
        
           |  |  | 1001 |         $this->getDataGenerator()->enrol_user($user3->id, $course1->id);
 | 
        
           |  |  | 1002 |         $this->getDataGenerator()->enrol_user($user3->id, $course2->id);
 | 
        
           |  |  | 1003 |   | 
        
           |  |  | 1004 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group1a->id, 'userid' => $user1->id));
 | 
        
           |  |  | 1005 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group1b->id, 'userid' => $user2->id));
 | 
        
           |  |  | 1006 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group1c->id, 'userid' => $user3->id));
 | 
        
           |  |  | 1007 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2a->id, 'userid' => $user1->id));
 | 
        
           |  |  | 1008 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2b->id, 'userid' => $user2->id));
 | 
        
           |  |  | 1009 |         $this->getDataGenerator()->create_group_member(array('groupid' => $group2c->id, 'userid' => $user3->id));
 | 
        
           |  |  | 1010 |   | 
        
           |  |  | 1011 |         $this->assertEquals(
 | 
        
           |  |  | 1012 |                 3,
 | 
        
           |  |  | 1013 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 1014 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 1015 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 1016 |                                          WHERE g.courseid = ?", [$course1->id])
 | 
        
           |  |  | 1017 |         );
 | 
        
           |  |  | 1018 |         $this->assertEquals(
 | 
        
           |  |  | 1019 |                 3,
 | 
        
           |  |  | 1020 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 1021 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 1022 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 1023 |                                          WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 1024 |         );
 | 
        
           |  |  | 1025 |   | 
        
           |  |  | 1026 |         $coursecontext1 = \context_course::instance($course1->id);
 | 
        
           |  |  | 1027 |         $approveduserlist = new \core_privacy\local\request\approved_userlist($coursecontext1, 'core_group',
 | 
        
           |  |  | 1028 |                 [$user1->id, $user2->id]);
 | 
        
           |  |  | 1029 |         provider::delete_data_for_users($approveduserlist);
 | 
        
           |  |  | 1030 |   | 
        
           |  |  | 1031 |         $this->assertEquals(
 | 
        
           |  |  | 1032 |                 [$user3->id],
 | 
        
           |  |  | 1033 |                 $DB->get_fieldset_sql("SELECT gm.userid
 | 
        
           |  |  | 1034 |                                          FROM {groups_members} gm
 | 
        
           |  |  | 1035 |                                          JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 1036 |                                         WHERE g.courseid = ?", [$course1->id])
 | 
        
           |  |  | 1037 |         );
 | 
        
           |  |  | 1038 |         $this->assertEquals(
 | 
        
           |  |  | 1039 |                 3,
 | 
        
           |  |  | 1040 |                 $DB->count_records_sql("SELECT COUNT(gm.id)
 | 
        
           |  |  | 1041 |                                           FROM {groups_members} gm
 | 
        
           |  |  | 1042 |                                           JOIN {groups} g ON gm.groupid = g.id
 | 
        
           |  |  | 1043 |                                          WHERE g.courseid = ?", [$course2->id])
 | 
        
           |  |  | 1044 |         );
 | 
        
           |  |  | 1045 |     }
 | 
        
           |  |  | 1046 |   | 
        
           |  |  | 1047 |     /**
 | 
        
           |  |  | 1048 |      * Test for provider::get_users_in_context().
 | 
        
           |  |  | 1049 |      */
 | 
        
           | 11 | efrain | 1050 |     public function test_get_users_in_context(): void {
 | 
        
           | 1 | efrain | 1051 |         $this->resetAfterTest();
 | 
        
           |  |  | 1052 |   | 
        
           |  |  | 1053 |         $course1 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 1054 |         $course2 = $this->getDataGenerator()->create_course();
 | 
        
           |  |  | 1055 |   | 
        
           |  |  | 1056 |         $group1a = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 1057 |         $group1b = $this->getDataGenerator()->create_group(array('courseid' => $course1->id));
 | 
        
           |  |  | 1058 |         $group2a = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 1059 |         $group2b = $this->getDataGenerator()->create_group(array('courseid' => $course2->id));
 | 
        
           |  |  | 1060 |   | 
        
           |  |  | 1061 |         $user1 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 1062 |         $user2 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 1063 |         $user3 = $this->getDataGenerator()->create_user();
 | 
        
           |  |  | 1064 |   | 
        
           |  |  | 1065 |         $this->getDataGenerator()->enrol_user($user1->id, $course1->id);
 | 
        
           |  |  | 1066 |         $this->getDataGenerator()->enrol_user($user1->id, $course2->id);
 | 
        
           |  |  | 1067 |         $this->getDataGenerator()->enrol_user($user2->id, $course1->id);
 | 
        
           |  |  | 1068 |         $this->getDataGenerator()->enrol_user($user2->id, $course2->id);
 | 
        
           |  |  | 1069 |         $this->getDataGenerator()->enrol_user($user3->id, $course1->id);
 | 
        
           |  |  | 1070 |         $this->getDataGenerator()->enrol_user($user3->id, $course2->id);
 | 
        
           |  |  | 1071 |   | 
        
           |  |  | 1072 |         $this->getDataGenerator()->create_group_member(array('userid' => $user1->id, 'groupid' => $group1a->id));
 | 
        
           |  |  | 1073 |         $this->getDataGenerator()->create_group_member(array('userid' => $user1->id, 'groupid' => $group2a->id));
 | 
        
           |  |  | 1074 |         $this->getDataGenerator()->create_group_member(array('userid' => $user2->id, 'groupid' => $group1b->id));
 | 
        
           |  |  | 1075 |         $this->getDataGenerator()->create_group_member(array('userid' => $user2->id, 'groupid' => $group2b->id));
 | 
        
           |  |  | 1076 |         $this->getDataGenerator()->create_group_member(array('userid' => $user3->id, 'groupid' => $group2a->id));
 | 
        
           |  |  | 1077 |   | 
        
           |  |  | 1078 |         $coursecontext1 = \context_course::instance($course1->id);
 | 
        
           |  |  | 1079 |   | 
        
           |  |  | 1080 |         $userlist = new \core_privacy\local\request\userlist($coursecontext1, 'core_group');
 | 
        
           |  |  | 1081 |         \core_group\privacy\provider::get_users_in_context($userlist);
 | 
        
           |  |  | 1082 |   | 
        
           |  |  | 1083 |         // Only user1 and user2. User3 is not member of any group in course1.
 | 
        
           |  |  | 1084 |         $this->assertCount(2, $userlist);
 | 
        
           |  |  | 1085 |         $this->assertEqualsCanonicalizing(
 | 
        
           |  |  | 1086 |                 [$user1->id, $user2->id],
 | 
        
           |  |  | 1087 |                 $userlist->get_userids());
 | 
        
           |  |  | 1088 |     }
 | 
        
           |  |  | 1089 | }
 |