Proyectos de Subversion Moodle

Rev

Rev 11 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
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
 * Data provider tests.
19
 *
20
 * @package    core_competency
21
 * @category   test
22
 * @copyright  2018 Frédéric Massart
23
 * @author     Frédéric Massart <fred@branchup.tech>
24
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
25
 */
26
namespace core_competency\privacy;
27
 
28
defined('MOODLE_INTERNAL') || die();
29
global $CFG, $DB;
30
 
31
use core_privacy\tests\provider_testcase;
32
use core_privacy\local\request\contextlist;
33
use core_privacy\local\request\approved_contextlist;
34
use core_privacy\local\request\approved_userlist;
35
use core_privacy\local\request\transform;
36
use core_privacy\local\request\userlist;
37
use core_privacy\local\request\writer;
38
use core_competency\api;
39
use core_competency\privacy\provider;
40
 
41
/**
42
 * Data provider testcase class.
43
 *
44
 * @package    core_competency
45
 * @category   test
46
 * @copyright  2018 Frédéric Massart
47
 * @author     Frédéric Massart <fred@branchup.tech>
48
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
49
 * @covers \core_competency\privacy\provider
50
 */
1441 ariadna 51
final class provider_test extends provider_testcase {
1 efrain 52
 
53
    public function setUp(): void {
54
        global $PAGE;
1441 ariadna 55
        parent::setUp();
1 efrain 56
        $this->resetAfterTest();
57
 
58
        // We need this or exporters (core\external\exporter) do not receive the right renderer.
59
        $PAGE->get_renderer('core');
60
    }
61
 
11 efrain 62
    public function test_get_contexts_for_userid_with_usermodified_for_framework(): void {
1 efrain 63
        $dg = $this->getDataGenerator();
64
        $ccg = $dg->get_plugin_generator('core_competency');
65
 
66
        $cat1 = $dg->create_category();
67
        $cat2 = $dg->create_category();
68
        $u1 = $dg->create_user();
69
        $u2 = $dg->create_user();
70
        $u3 = $dg->create_user();
71
        $u4 = $dg->create_user();
72
 
73
        $sysctx = \context_system::instance();
74
        $cat1ctx = \context_coursecat::instance($cat1->id);
75
        $cat2ctx = \context_coursecat::instance($cat2->id);
76
 
77
        // Test recovery through framework context.
78
        $this->setUser($u1);
79
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), []);
80
        $f1 = $ccg->create_framework();
81
        $contextlist = provider::get_contexts_for_userid($u1->id);
82
        $this->assert_contextlist($contextlist, [$sysctx]);
83
        $f2 = $ccg->create_framework(['contextid' => $cat1ctx->id]);
84
        $contextlist = provider::get_contexts_for_userid($u1->id);
85
        $this->assert_contextlist($contextlist, [$sysctx, $cat1ctx]);
86
 
87
        // Test recovery of category context alone.
88
        $this->setUser($u2);
89
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
90
        $ccg->create_framework(['contextid' => $cat2ctx->id]);
91
        $contextlist = provider::get_contexts_for_userid($u2->id);
92
        $this->assert_contextlist($contextlist, [$cat2ctx]);
93
 
94
        // Test recovery through competency.
95
        $this->setUser($u3);
96
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
97
        $c1 = $ccg->create_competency(['competencyframeworkid' => $f1->get('id')]);
98
        $c2 = $ccg->create_competency(['competencyframeworkid' => $f1->get('id')]);
99
        $c3 = $ccg->create_competency(['competencyframeworkid' => $f1->get('id')]);
100
        $contextlist = provider::get_contexts_for_userid($u3->id);
101
        $this->assert_contextlist($contextlist, [$sysctx]);
102
        $c4 = $ccg->create_competency(['competencyframeworkid' => $f2->get('id')]);
103
        $c5 = $ccg->create_competency(['competencyframeworkid' => $f2->get('id')]);
104
        $c6 = $ccg->create_competency(['competencyframeworkid' => $f2->get('id')]);
105
        $contextlist = provider::get_contexts_for_userid($u3->id);
106
        $this->assert_contextlist($contextlist, [$sysctx, $cat1ctx]);
107
 
108
        // Test recovery through related competency.
109
        $this->setUser($u4);
110
        $this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
111
        $cr = $ccg->create_related_competency(['competencyid' => $c1->get('id'), 'relatedcompetencyid' => $c2->get('id')]);
112
        $contextlist = provider::get_contexts_for_userid($u4->id);
113
        $this->assert_contextlist($contextlist, [$sysctx]);
114
        $cr = $ccg->create_related_competency(['competencyid' => $c4->get('id'), 'relatedcompetencyid' => $c5->get('id')]);
115
        $contextlist = provider::get_contexts_for_userid($u4->id);
116
        $this->assert_contextlist($contextlist, [$sysctx, $cat1ctx]);
117
    }
118
 
11 efrain 119
    public function test_get_users_in_context_with_usermodified_for_framework(): void {
1 efrain 120
        $dg = $this->getDataGenerator();
121
        $ccg = $dg->get_plugin_generator('core_competency');
122
 
123
        $cat1 = $dg->create_category();
124
        $cat2 = $dg->create_category();
125
        $u1 = $dg->create_user();
126
        $u2 = $dg->create_user();
127
        $u3 = $dg->create_user();
128
        $u4 = $dg->create_user();
129
 
130
        $sysctx = \context_system::instance();
131
        $cat1ctx = \context_coursecat::instance($cat1->id);
132
        $cat2ctx = \context_coursecat::instance($cat2->id);
133
 
134
        // Add frameworks.
135
        $this->setUser($u1);
136
        $f1 = $ccg->create_framework();
137
        $f2 = $ccg->create_framework(['contextid' => $cat1ctx->id]);
138
 
139
        $this->setUser($u2);
140
        $ccg->create_framework(['contextid' => $cat2ctx->id]);
141
 
142
        // Add competencies.
143
        $this->setUser($u3);
144
        $c1 = $ccg->create_competency(['competencyframeworkid' => $f1->get('id')]);
145
        $c2 = $ccg->create_competency(['competencyframeworkid' => $f1->get('id')]);
146
        $c3 = $ccg->create_competency(['competencyframeworkid' => $f1->get('id')]);
147
        $c4 = $ccg->create_competency(['competencyframeworkid' => $f2->get('id')]);
148
        $c5 = $ccg->create_competency(['competencyframeworkid' => $f2->get('id')]);
149
        $c6 = $ccg->create_competency(['competencyframeworkid' => $f2->get('id')]);
150
 
151
        // Add related competencies.
152
        $this->setUser($u4);
153
        $cr = $ccg->create_related_competency(['competencyid' => $c1->get('id'), 'relatedcompetencyid' => $c2->get('id')]);
154
        $cr = $ccg->create_related_competency(['competencyid' => $c4->get('id'), 'relatedcompetencyid' => $c5->get('id')]);
155
 
156
        // Test correct users appear in each context.
157
        $component = 'core_competency';
158
 
159
        $userlist = new userlist($sysctx, $component);
160
        provider::get_users_in_context($userlist);
161
        $expected = [$u1->id, $u3->id, $u4->id];
162
        $this->assert_array_match($expected, $userlist->get_userids());
163
 
164
        $userlist = new userlist($cat1ctx, $component);
165
        provider::get_users_in_context($userlist);
166
        $expected = [$u1->id, $u3->id, $u4->id];
167
        $this->assert_array_match($expected, $userlist->get_userids());
168
 
169
        $userlist = new userlist($cat2ctx, $component);
170
        provider::get_users_in_context($userlist);
171
        $expected = [$u2->id];
172
        $this->assert_array_match($expected, $userlist->get_userids());
173
    }
174
 
11 efrain 175
    public function test_get_contexts_for_userid_with_usermodified_for_template(): void {
1 efrain 176
        $dg = $this->getDataGenerator();
177
        $ccg = $dg->get_plugin_generator('core_competency');
178
 
179
        $cat1 = $dg->create_category();
180
        $cat2 = $dg->create_category();
181
        $u1 = $dg->create_user();
182
        $u2 = $dg->create_user();
183
        $u3 = $dg->create_user();
184
        $u4 = $dg->create_user();
185
        $cohort = $dg->create_cohort();
186
 
187
        $sysctx = \context_system::instance();
188
        $cat1ctx = \context_coursecat::instance($cat1->id);
189
        $cat2ctx = \context_coursecat::instance($cat2->id);
190
 
191
        $f1 = $ccg->create_framework();
192
        $f2 = $ccg->create_framework(['contextid' => $cat1ctx->id]);
193
        $f3 = $ccg->create_framework(['contextid' => $cat2ctx->id]);
194
        $cs = [];
195
 
196
        foreach ([$f1, $f2, $f3] as $f) {
197
            $cs[$f->get('id')] = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
198
        }
199
 
200
        // Test recovery through template context.
201
        $this->setUser($u1);
202
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), []);
203
        $t1 = $ccg->create_template();
204
        $contextlist = provider::get_contexts_for_userid($u1->id);
205
        $this->assert_contextlist($contextlist, [$sysctx]);
206
        $t2 = $ccg->create_template(['contextid' => $cat1ctx->id]);
207
        $contextlist = provider::get_contexts_for_userid($u1->id);
208
        $this->assert_contextlist($contextlist, [$sysctx, $cat1ctx]);
209
 
210
        // Test recovery of category context alone.
211
        $this->setUser($u2);
212
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
213
        $ccg->create_template(['contextid' => $cat2ctx->id]);
214
        $contextlist = provider::get_contexts_for_userid($u2->id);
215
        $this->assert_contextlist($contextlist, [$cat2ctx]);
216
 
217
        // Test recovery through template competency.
218
        $this->setUser($u3);
219
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
220
        $c1 = $ccg->create_template_competency(['competencyid' => $cs[$f1->get('id')]->get('id'), 'templateid' => $t1->get('id')]);
221
        $contextlist = provider::get_contexts_for_userid($u3->id);
222
        $this->assert_contextlist($contextlist, [$sysctx]);
223
        $c4 = $ccg->create_template_competency(['competencyid' => $cs[$f2->get('id')]->get('id'), 'templateid' => $t2->get('id')]);
224
        $contextlist = provider::get_contexts_for_userid($u3->id);
225
        $this->assert_contextlist($contextlist, [$sysctx, $cat1ctx]);
226
 
227
        // Test recovery through template cohort.
228
        $this->setUser($u4);
229
        $this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
230
        $c1 = $ccg->create_template_cohort(['cohortid' => $cohort->id, 'templateid' => $t1->get('id')]);
231
        $contextlist = provider::get_contexts_for_userid($u4->id);
232
        $this->assert_contextlist($contextlist, [$sysctx]);
233
        $c4 = $ccg->create_template_cohort(['cohortid' => $cohort->id, 'templateid' => $t2->get('id')]);
234
        $contextlist = provider::get_contexts_for_userid($u4->id);
235
        $this->assert_contextlist($contextlist, [$sysctx, $cat1ctx]);
236
    }
237
 
11 efrain 238
    public function test_get_users_in_context_with_usermodified_for_template(): void {
1 efrain 239
        $dg = $this->getDataGenerator();
240
        $ccg = $dg->get_plugin_generator('core_competency');
241
 
242
        $cat1 = $dg->create_category();
243
        $cat2 = $dg->create_category();
244
        $u1 = $dg->create_user();
245
        $u2 = $dg->create_user();
246
        $u3 = $dg->create_user();
247
        $u4 = $dg->create_user();
248
        $cohort = $dg->create_cohort();
249
 
250
        $sysctx = \context_system::instance();
251
        $cat1ctx = \context_coursecat::instance($cat1->id);
252
        $cat2ctx = \context_coursecat::instance($cat2->id);
253
 
254
        $f1 = $ccg->create_framework();
255
        $f2 = $ccg->create_framework(['contextid' => $cat1ctx->id]);
256
        $f3 = $ccg->create_framework(['contextid' => $cat2ctx->id]);
257
        $cs = [];
258
 
259
        foreach ([$f1, $f2, $f3] as $f) {
260
            $cs[$f->get('id')] = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
261
        }
262
 
263
        // Create template context.
264
        $this->setUser($u1);
265
        $t1 = $ccg->create_template();
266
        $t2 = $ccg->create_template(['contextid' => $cat1ctx->id]);
267
 
268
        // Add to category context.
269
        $this->setUser($u2);
270
        $ccg->create_template(['contextid' => $cat2ctx->id]);
271
 
272
        // Create template competencies.
273
        $this->setUser($u3);
274
        $c1 = $ccg->create_template_competency(['competencyid' => $cs[$f1->get('id')]->get('id'), 'templateid' => $t1->get('id')]);
275
        $c4 = $ccg->create_template_competency(['competencyid' => $cs[$f2->get('id')]->get('id'), 'templateid' => $t2->get('id')]);
276
 
277
        // Create template cohorts.
278
        $this->setUser($u4);
279
        $c1 = $ccg->create_template_cohort(['cohortid' => $cohort->id, 'templateid' => $t1->get('id')]);
280
        $c4 = $ccg->create_template_cohort(['cohortid' => $cohort->id, 'templateid' => $t2->get('id')]);
281
 
282
        // Test correct users appear in each context.
283
        $component = 'core_competency';
284
 
285
        $userlist = new userlist($sysctx, $component);
286
        provider::get_users_in_context($userlist);
287
        $expected = [$u1->id, $u3->id, $u4->id];
288
        $this->assert_array_match($expected, $userlist->get_userids());
289
 
290
        $userlist = new userlist($cat1ctx, $component);
291
        provider::get_users_in_context($userlist);
292
        $expected = [$u1->id, $u3->id, $u4->id];
293
        $this->assert_array_match($expected, $userlist->get_userids());
294
 
295
        $userlist = new userlist($cat2ctx, $component);
296
        provider::get_users_in_context($userlist);
297
        $expected = [$u2->id];
298
        $this->assert_array_match($expected, $userlist->get_userids());
299
    }
300
 
11 efrain 301
    public function test_get_contexts_for_userid_with_usermodified_for_course(): void {
1 efrain 302
        $dg = $this->getDataGenerator();
303
        $ccg = $dg->get_plugin_generator('core_competency');
304
        $c1 = $dg->create_course();
305
        $c2 = $dg->create_course();
306
        $u0 = $dg->create_user();
307
        $u1 = $dg->create_user();
308
        $u2 = $dg->create_user();
309
        $u3 = $dg->create_user();
310
        $u4 = $dg->create_user();
311
        $c1ctx = \context_course::instance($c1->id);
312
        $c2ctx = \context_course::instance($c2->id);
313
 
314
        $f = $ccg->create_framework();
315
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
316
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
317
 
318
        $this->setUser($u1);
319
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), []);
320
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
321
        $ccg->create_course_competency(['courseid' => $c1->id, 'competencyid' => $comp1->get('id')]);
322
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$c1ctx]);
323
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
324
 
325
        $this->setUser($u2);
326
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$c1ctx]);
327
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
328
        $ccg->create_course_competency(['courseid' => $c2->id, 'competencyid' => $comp2->get('id')]);
329
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$c1ctx]);
330
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$c2ctx]);
331
        $ccg->create_course_competency(['courseid' => $c1->id, 'competencyid' => $comp2->get('id')]);
332
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$c1ctx]);
333
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$c1ctx, $c2ctx]);
334
 
335
        $this->setUser($u3);
336
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
337
        $ccs = new \core_competency\course_competency_settings(null, (object) ['courseid' => $c1->id]);
338
        $ccs->create();
339
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$c1ctx]);
340
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$c1ctx, $c2ctx]);
341
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), [$c1ctx]);
342
 
343
        $this->setUser($u4);
344
        $this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
345
        $ccg->create_user_competency_course(['courseid' => $c2->id, 'userid' => $u0->id, 'competencyid' => $comp1->get('id')]);
346
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$c1ctx]);
347
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$c1ctx, $c2ctx]);
348
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), [$c1ctx]);
349
        $this->assert_contextlist(provider::get_contexts_for_userid($u4->id), [$c2ctx]);
350
    }
351
 
11 efrain 352
    public function test_get_users_in_context_with_usermodified_for_course(): void {
1 efrain 353
        $dg = $this->getDataGenerator();
354
        $ccg = $dg->get_plugin_generator('core_competency');
355
        $c1 = $dg->create_course();
356
        $c2 = $dg->create_course();
357
        $u0 = $dg->create_user();
358
        $u1 = $dg->create_user();
359
        $u2 = $dg->create_user();
360
        $u3 = $dg->create_user();
361
        $u4 = $dg->create_user();
362
        $c1ctx = \context_course::instance($c1->id);
363
        $c2ctx = \context_course::instance($c2->id);
364
 
365
        $f = $ccg->create_framework();
366
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
367
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
368
 
369
        $this->setUser($u1);
370
        $ccg->create_course_competency(['courseid' => $c1->id, 'competencyid' => $comp1->get('id')]);
371
 
372
        $this->setUser($u2);
373
        $ccg->create_course_competency(['courseid' => $c2->id, 'competencyid' => $comp2->get('id')]);
374
        $ccg->create_course_competency(['courseid' => $c1->id, 'competencyid' => $comp2->get('id')]);
375
 
376
        $this->setUser($u3);
377
        $ccs = new \core_competency\course_competency_settings(null, (object) ['courseid' => $c1->id]);
378
        $ccs->create();
379
 
380
        $this->setUser($u4);
381
        $ccg->create_user_competency_course(['courseid' => $c2->id, 'userid' => $u0->id, 'competencyid' => $comp1->get('id')]);
382
 
383
        // Test correct users appear in each context.
384
        $component = 'core_competency';
385
 
386
        $userlist = new userlist($c1ctx, $component);
387
        provider::get_users_in_context($userlist);
388
        $expected = [$u1->id, $u2->id, $u3->id];
389
        $this->assert_array_match($expected, $userlist->get_userids());
390
 
391
        $userlist = new userlist($c2ctx, $component);
392
        provider::get_users_in_context($userlist);
393
        $expected = [$u0->id, $u2->id, $u4->id];
394
        $this->assert_array_match($expected, $userlist->get_userids());
395
    }
396
 
11 efrain 397
    public function test_get_contexts_for_userid_with_usermodified_for_module(): void {
1 efrain 398
        $dg = $this->getDataGenerator();
399
        $ccg = $dg->get_plugin_generator('core_competency');
400
        $c1 = $dg->create_course();
401
        $m1 = $dg->create_module('choice', ['course' => $c1]);
402
        $m2 = $dg->create_module('choice', ['course' => $c1]);
403
        $u1 = $dg->create_user();
404
        $u2 = $dg->create_user();
405
        $m1ctx = \context_module::instance($m1->cmid);
406
        $m2ctx = \context_module::instance($m2->cmid);
407
 
408
        $f = $ccg->create_framework();
409
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
410
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
411
 
412
        $this->setUser($u1);
413
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), []);
414
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
415
        $ccg->create_course_module_competency(['cmid' => $m1->cmid, 'competencyid' => $comp1->get('id')]);
416
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$m1ctx]);
417
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
418
 
419
        $this->setUser($u2);
420
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$m1ctx]);
421
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
422
        $ccg->create_course_module_competency(['cmid' => $m2->cmid, 'competencyid' => $comp2->get('id')]);
423
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$m1ctx]);
424
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$m2ctx]);
425
        $ccg->create_course_module_competency(['cmid' => $m1->cmid, 'competencyid' => $comp2->get('id')]);
426
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$m1ctx]);
427
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$m1ctx, $m2ctx]);
428
    }
429
 
11 efrain 430
    public function test_get_users_in_context_with_usermodified_for_module(): void {
1 efrain 431
        $dg = $this->getDataGenerator();
432
        $ccg = $dg->get_plugin_generator('core_competency');
433
        $c1 = $dg->create_course();
434
        $m1 = $dg->create_module('choice', ['course' => $c1]);
435
        $m2 = $dg->create_module('choice', ['course' => $c1]);
436
        $u1 = $dg->create_user();
437
        $u2 = $dg->create_user();
438
        $m1ctx = \context_module::instance($m1->cmid);
439
        $m2ctx = \context_module::instance($m2->cmid);
440
 
441
        $f = $ccg->create_framework();
442
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
443
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
444
 
445
        $this->setUser($u1);
446
        $ccg->create_course_module_competency(['cmid' => $m1->cmid, 'competencyid' => $comp1->get('id')]);
447
 
448
        $this->setUser($u2);
449
        $ccg->create_course_module_competency(['cmid' => $m2->cmid, 'competencyid' => $comp2->get('id')]);
450
        $ccg->create_course_module_competency(['cmid' => $m1->cmid, 'competencyid' => $comp2->get('id')]);
451
 
452
        // Test correct users appear in each context.
453
        $component = 'core_competency';
454
 
455
        $userlist = new userlist($m1ctx, $component);
456
        provider::get_users_in_context($userlist);
457
        $expected = [$u1->id, $u2->id];
458
        $this->assert_array_match($expected, $userlist->get_userids());
459
 
460
        $userlist = new userlist($m2ctx, $component);
461
        provider::get_users_in_context($userlist);
462
        $expected = [$u2->id];
463
        $this->assert_array_match($expected, $userlist->get_userids());
464
    }
465
 
11 efrain 466
    public function test_get_contexts_for_userid_with_usermodified_for_plan(): void {
1 efrain 467
        $dg = $this->getDataGenerator();
468
        $ccg = $dg->get_plugin_generator('core_competency');
469
        $u0 = $dg->create_user();
470
        $u1 = $dg->create_user();
471
        $u2 = $dg->create_user();
472
        $u3 = $dg->create_user();
473
        $u0ctx = \context_user::instance($u0->id);
474
 
475
        $f = $ccg->create_framework();
476
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
477
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
478
 
479
        $this->setUser($u1);
480
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), []);
481
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
482
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
483
        $plan = $ccg->create_plan(['userid' => $u0->id]);
484
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u0ctx]);
485
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
486
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
487
 
488
        $this->setUser($u2);
489
        $ccg->create_plan_competency(['planid' => $plan->get('id'), 'competencyid' => $comp1->get('id')]);
490
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u0ctx]);
491
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$u0ctx]);
492
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
493
 
494
        $this->setUser($u3);
495
        $ccg->create_user_competency_plan(['planid' => $plan->get('id'), 'competencyid' => $comp1->get('id'),
496
            'userid' => $u0->id]);
497
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u0ctx]);
498
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$u0ctx]);
499
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), [$u0ctx]);
500
    }
501
 
11 efrain 502
    public function test_get_users_in_context_with_usermodified_for_plan(): void {
1 efrain 503
        $dg = $this->getDataGenerator();
504
        $ccg = $dg->get_plugin_generator('core_competency');
505
        $u0 = $dg->create_user();
506
        $u1 = $dg->create_user();
507
        $u2 = $dg->create_user();
508
        $u3 = $dg->create_user();
509
        $u0ctx = \context_user::instance($u0->id);
510
 
511
        $f = $ccg->create_framework();
512
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
513
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
514
 
515
        $this->setUser($u1);
516
        $plan = $ccg->create_plan(['userid' => $u0->id]);
517
 
518
        $this->setUser($u2);
519
        $ccg->create_plan_competency(['planid' => $plan->get('id'), 'competencyid' => $comp1->get('id')]);
520
 
521
        $this->setUser($u3);
522
        $ccg->create_user_competency_plan(['planid' => $plan->get('id'), 'competencyid' => $comp1->get('id'),
523
            'userid' => $u0->id]);
524
 
525
        // Test correct users appear in the context.
526
        $component = 'core_competency';
527
 
528
        $userlist = new userlist($u0ctx, $component);
529
        provider::get_users_in_context($userlist);
530
        $expected = [$u0->id, $u1->id, $u2->id, $u3->id];
531
        $this->assert_array_match($expected, $userlist->get_userids());
532
    }
533
 
11 efrain 534
    public function test_get_contexts_for_userid_with_usermodified_for_competency_data(): void {
1 efrain 535
        $dg = $this->getDataGenerator();
536
        $ccg = $dg->get_plugin_generator('core_competency');
537
        $u0 = $dg->create_user();
538
        $u1 = $dg->create_user();
539
        $u2 = $dg->create_user();
540
        $u3 = $dg->create_user();
541
        $u4 = $dg->create_user();
542
        $u5 = $dg->create_user();
543
        $u6 = $dg->create_user();
544
        $u7 = $dg->create_user();
545
        $u8 = $dg->create_user();
546
        $u0ctx = \context_user::instance($u0->id);
547
 
548
        $f = $ccg->create_framework();
549
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
550
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
551
 
552
        $this->setUser($u1);
553
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), []);
554
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
555
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
556
        $this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
557
        $this->assert_contextlist(provider::get_contexts_for_userid($u5->id), []);
558
        $this->assert_contextlist(provider::get_contexts_for_userid($u6->id), []);
559
        $uc = $ccg->create_user_competency(['userid' => $u0->id, 'competencyid' => $comp1->get('id'),
560
            'reviewerid' => $u6->id]);
561
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u0ctx]);
562
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
563
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
564
        $this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
565
        $this->assert_contextlist(provider::get_contexts_for_userid($u5->id), []);
566
        $this->assert_contextlist(provider::get_contexts_for_userid($u6->id), [$u0ctx]);
567
 
568
        $this->setUser($u2);
569
        $e = $ccg->create_evidence(['usercompetencyid' => $uc->get('id'), 'actionuserid' => $u5->id]);
570
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u0ctx]);
571
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$u0ctx]);
572
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
573
        $this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
574
        $this->assert_contextlist(provider::get_contexts_for_userid($u5->id), [$u0ctx]);
575
        $this->assert_contextlist(provider::get_contexts_for_userid($u6->id), [$u0ctx]);
576
 
577
        $this->setUser($u3);
578
        $ccg->create_user_evidence(['userid' => $u0->id]);
579
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u0ctx]);
580
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$u0ctx]);
581
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), [$u0ctx]);
582
        $this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
583
        $this->assert_contextlist(provider::get_contexts_for_userid($u5->id), [$u0ctx]);
584
        $this->assert_contextlist(provider::get_contexts_for_userid($u6->id), [$u0ctx]);
585
 
586
        $this->setUser($u4);
587
        $ccg->create_user_evidence(['userid' => $u0->id]);
588
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u0ctx]);
589
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$u0ctx]);
590
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), [$u0ctx]);
591
        $this->assert_contextlist(provider::get_contexts_for_userid($u4->id), [$u0ctx]);
592
        $this->assert_contextlist(provider::get_contexts_for_userid($u5->id), [$u0ctx]);
593
        $this->assert_contextlist(provider::get_contexts_for_userid($u6->id), [$u0ctx]);
594
 
595
        // Comment on competency.
596
        $this->allow_anyone_to_comment_anywhere();
597
        $this->assert_contextlist(provider::get_contexts_for_userid($u7->id), []);
598
        $this->setUser($u7);
599
        $comments = $uc->get_comment_object();
600
        $comments->add('Hello there!');
601
        $this->assert_contextlist(provider::get_contexts_for_userid($u7->id), [$u0ctx]);
602
 
603
        // Comment on plan.
604
        $this->assert_contextlist(provider::get_contexts_for_userid($u8->id), []);
605
        $this->setUser($u8);
606
        $plan = $ccg->create_plan(['userid' => $u0->id]);
607
        $comments = $plan->get_comment_object();
608
        $comments->add('Hi, planet!');
609
        $this->assert_contextlist(provider::get_contexts_for_userid($u8->id), [$u0ctx]);
610
    }
611
 
11 efrain 612
    public function test_get_users_in_context_with_usermodified_for_competency_data(): void {
1 efrain 613
        $dg = $this->getDataGenerator();
614
        $ccg = $dg->get_plugin_generator('core_competency');
615
        $u0 = $dg->create_user();
616
        $u1 = $dg->create_user();
617
        $u2 = $dg->create_user();
618
        $u3 = $dg->create_user();
619
        $u4 = $dg->create_user();
620
        $u5 = $dg->create_user();
621
        $u6 = $dg->create_user();
622
        $u7 = $dg->create_user();
623
        $u8 = $dg->create_user();
624
        $u0ctx = \context_user::instance($u0->id);
625
 
626
        $f = $ccg->create_framework();
627
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
628
 
629
        $this->setUser($u1);
630
        $uc = $ccg->create_user_competency(['userid' => $u0->id, 'competencyid' => $comp1->get('id'),
631
            'reviewerid' => $u6->id]);
632
 
633
        $this->setUser($u2);
634
        $e = $ccg->create_evidence(['usercompetencyid' => $uc->get('id'), 'actionuserid' => $u5->id]);
635
 
636
        $this->setUser($u3);
637
        $ccg->create_user_evidence(['userid' => $u0->id]);
638
 
639
        $this->setUser($u4);
640
        $ccg->create_user_evidence(['userid' => $u0->id]);
641
 
642
        // Comment on competency.
643
        $this->allow_anyone_to_comment_anywhere();
644
        $this->setUser($u7);
645
        $comments = $uc->get_comment_object();
646
        $comments->add('Hello there!');
647
 
648
        // Comment on plan.
649
        $this->setUser($u8);
650
        $plan = $ccg->create_plan(['userid' => $u0->id]);
651
        $comments = $plan->get_comment_object();
652
        $comments->add('Hi, planet!');
653
 
654
        // Test correct users appear in the context.
655
        $component = 'core_competency';
656
 
657
        $userlist = new userlist($u0ctx, $component);
658
        provider::get_users_in_context($userlist);
659
        $expected = [$u0->id, $u1->id, $u2->id, $u3->id, $u4->id, $u5->id, $u6->id, $u7->id, $u8->id];
660
        $this->assert_array_match($expected, $userlist->get_userids());
661
    }
662
 
11 efrain 663
    public function test_get_contexts_for_userid_with_actual_data_and_actual_data_is_goooood(): void {
1 efrain 664
        $dg = $this->getDataGenerator();
665
        $ccg = $dg->get_plugin_generator('core_competency');
666
        $c1 = $dg->create_course();
667
        $u1 = $dg->create_user();
668
        $u2 = $dg->create_user();
669
        $u3 = $dg->create_user();
670
        $u4 = $dg->create_user();
671
        $u5 = $dg->create_user();
672
 
673
        $c1ctx = \context_course::instance($c1->id);
674
        $u1ctx = \context_user::instance($u1->id);
675
        $u2ctx = \context_user::instance($u2->id);
676
        $u3ctx = \context_user::instance($u3->id);
677
        $u4ctx = \context_user::instance($u4->id);
678
 
679
        $f = $ccg->create_framework();
680
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
681
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
682
 
683
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), []);
684
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
685
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
686
        $this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
687
        $this->assert_contextlist(provider::get_contexts_for_userid($u5->id), []);
688
 
689
        $ccg->create_plan(['userid' => $u1->id]);
690
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u1ctx]);
691
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), []);
692
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
693
        $this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
694
        $this->assert_contextlist(provider::get_contexts_for_userid($u5->id), []);
695
 
696
        $ccg->create_user_competency(['userid' => $u2->id, 'competencyid' => $comp1->get('id')]);
697
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u1ctx]);
698
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$u2ctx]);
699
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), []);
700
        $this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
701
        $this->assert_contextlist(provider::get_contexts_for_userid($u5->id), []);
702
 
703
        $ccg->create_user_competency_course(['userid' => $u3->id, 'competencyid' => $comp1->get('id'), 'courseid' => $c1->id]);
704
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u1ctx]);
705
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$u2ctx]);
706
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), [$c1ctx]);
707
        $this->assert_contextlist(provider::get_contexts_for_userid($u4->id), []);
708
        $this->assert_contextlist(provider::get_contexts_for_userid($u5->id), []);
709
 
710
        $ue = $ccg->create_user_evidence(['userid' => $u4->id]);
711
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u1ctx]);
712
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$u2ctx]);
713
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), [$c1ctx]);
714
        $this->assert_contextlist(provider::get_contexts_for_userid($u4->id), [$u4ctx]);
715
        $this->assert_contextlist(provider::get_contexts_for_userid($u5->id), []);
716
 
717
        // A user editing a context relationship.
718
        $this->setUser($u5);
719
        $ccg->create_user_evidence_competency(['userevidenceid' => $ue->get('id'), 'competencyid' => $comp1->get('id')]);
720
        $this->setAdminUser();
721
        $this->assert_contextlist(provider::get_contexts_for_userid($u1->id), [$u1ctx]);
722
        $this->assert_contextlist(provider::get_contexts_for_userid($u2->id), [$u2ctx]);
723
        $this->assert_contextlist(provider::get_contexts_for_userid($u3->id), [$c1ctx]);
724
        $this->assert_contextlist(provider::get_contexts_for_userid($u4->id), [$u4ctx]);
725
        $this->assert_contextlist(provider::get_contexts_for_userid($u5->id), [$u4ctx]);
726
    }
727
 
11 efrain 728
    public function test_get_users_in_context_with_actual_data_and_actual_data_is_goooood(): void {
1 efrain 729
        $dg = $this->getDataGenerator();
730
        $ccg = $dg->get_plugin_generator('core_competency');
731
        $c1 = $dg->create_course();
732
        $u1 = $dg->create_user();
733
        $u2 = $dg->create_user();
734
        $u3 = $dg->create_user();
735
        $u4 = $dg->create_user();
736
 
737
        $c1ctx = \context_course::instance($c1->id);
738
        $u1ctx = \context_user::instance($u1->id);
739
        $u2ctx = \context_user::instance($u2->id);
740
        $u3ctx = \context_user::instance($u3->id);
741
        $u4ctx = \context_user::instance($u4->id);
742
 
743
        $f = $ccg->create_framework();
744
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
745
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
746
 
747
        $ccg->create_plan(['userid' => $u1->id]);
748
 
749
        $ccg->create_user_competency(['userid' => $u2->id, 'competencyid' => $comp1->get('id')]);
750
 
751
        $ccg->create_user_competency_course(['userid' => $u3->id, 'competencyid' => $comp1->get('id'), 'courseid' => $c1->id]);
752
 
753
        $ccg->create_user_evidence(['userid' => $u4->id]);
754
 
755
        // Test correct users appear in each context.
756
        $component = 'core_competency';
757
 
758
        $userlist = new userlist($u1ctx, $component);
759
        provider::get_users_in_context($userlist);
760
        $this->assert_array_match([$u1->id], $userlist->get_userids());
761
 
762
        $userlist = new userlist($u2ctx, $component);
763
        provider::get_users_in_context($userlist);
764
        $this->assert_array_match([$u2->id], $userlist->get_userids());
765
 
766
        $userlist = new userlist($c1ctx, $component);
767
        provider::get_users_in_context($userlist);
768
        $this->assert_array_match([$u3->id], $userlist->get_userids());
769
 
770
        $userlist = new userlist($u4ctx, $component);
771
        provider::get_users_in_context($userlist);
772
        $this->assert_array_match([$u4->id], $userlist->get_userids());
773
    }
774
 
11 efrain 775
    public function test_delete_data_for_user(): void {
1 efrain 776
        $dg = $this->getDataGenerator();
777
        $ccg = $dg->get_plugin_generator('core_competency');
778
 
779
        $c1 = $dg->create_course();
780
        $c2 = $dg->create_course();
781
        $u1 = $dg->create_user();
782
        $u2 = $dg->create_user();
783
 
784
        $c1ctx = \context_course::instance($c1->id);
785
        $u1ctx = \context_user::instance($u1->id);
786
        $u2ctx = \context_user::instance($u2->id);
787
 
788
        $f = $ccg->create_framework();
789
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
790
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
791
 
792
        $ue1a = $ccg->create_user_evidence(['userid' => $u1->id]);
793
        $ue1b = $ccg->create_user_evidence(['userid' => $u1->id]);
794
        $ue2 = $ccg->create_user_evidence(['userid' => $u2->id]);
795
        $uec1a = $ccg->create_user_evidence_competency(['userevidenceid' => $ue1a->get('id'),
796
            'competencyid' => $comp1->get('id')]);
797
        $uec1b = $ccg->create_user_evidence_competency(['userevidenceid' => $ue1b->get('id'),
798
            'competencyid' => $comp2->get('id')]);
799
        $uec2 = $ccg->create_user_evidence_competency(['userevidenceid' => $ue2->get('id'),
800
            'competencyid' => $comp1->get('id')]);
801
 
802
        $p1a = $ccg->create_plan(['userid' => $u1->id]);
803
        $p1b = $ccg->create_plan(['userid' => $u1->id]);
804
        $p2 = $ccg->create_plan(['userid' => $u2->id]);
805
        $pc1a = $ccg->create_plan_competency(['planid' => $p1a->get('id'), 'competencyid' => $comp1->get('id')]);
806
        $pc1b = $ccg->create_plan_competency(['planid' => $p1b->get('id'), 'competencyid' => $comp2->get('id')]);
807
        $pc2 = $ccg->create_plan_competency(['planid' => $p2->get('id'), 'competencyid' => $comp1->get('id')]);
808
        $ucp1a = $ccg->create_user_competency_plan(['userid' => $u1->id, 'planid' => $p1a->get('id'),
809
            'competencyid' => $comp1->get('id')]);
810
        $ucp1b = $ccg->create_user_competency_plan(['userid' => $u1->id, 'planid' => $p1b->get('id'),
811
            'competencyid' => $comp2->get('id')]);
812
        $ucp2 = $ccg->create_user_competency_plan(['userid' => $u2->id, 'planid' => $p2->get('id'),
813
            'competencyid' => $comp1->get('id')]);
814
 
815
        $uc1a = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp1->get('id')]);
816
        $uc1b = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp2->get('id')]);
817
        $uc2 = $ccg->create_user_competency(['userid' => $u2->id, 'competencyid' => $comp2->get('id')]);
818
        $e1a = $ccg->create_evidence(['usercompetencyid' => $uc1a->get('id')]);
819
        $e1b = $ccg->create_evidence(['usercompetencyid' => $uc1b->get('id')]);
820
        $e2 = $ccg->create_evidence(['usercompetencyid' => $uc2->get('id')]);
821
 
822
        $ucc1a = $ccg->create_user_competency_course(['userid' => $u1->id, 'courseid' => $c1->id,
823
            'competencyid' => $comp1->get('id')]);
824
        $ucc1b = $ccg->create_user_competency_course(['userid' => $u1->id, 'courseid' => $c2->id,
825
            'competencyid' => $comp1->get('id')]);
826
        $ucc2 = $ccg->create_user_competency_course(['userid' => $u2->id, 'courseid' => $c1->id,
827
            'competencyid' => $comp1->get('id')]);
828
 
829
        // User 1 comments on both plans.
830
        $this->allow_anyone_to_comment_anywhere();
831
        $this->setUser($u1);
832
        $p1a->get_comment_object()->add('Hi...');
833
        $p1a->get_comment_object()->add('mister');
834
        $p2->get_comment_object()->add('Ahoy!');
835
 
836
        // User 2 comments on both competencies.
837
        $this->setUser($u2);
838
        $uc1a->get_comment_object()->add('Hi, too!');
839
        $uc1a->get_comment_object()->add('How are you?');
840
        $uc2->get_comment_object()->add('Ahoy, too!');
841
 
842
        $p1acommentobj = $p1a->get_comment_object();
843
        $p2commentobj = $p2->get_comment_object();
844
        $uc1acommentobj = $uc1a->get_comment_object();
845
        $uc2commentobj = $uc2->get_comment_object();
846
 
847
        $this->setAdminUser();
848
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
849
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue1b->get('id')));
850
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
851
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
852
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1b->get('id')));
853
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
854
        $this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
855
        $this->assertTrue(\core_competency\plan::record_exists($p1b->get('id')));
856
        $this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
857
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
858
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc1b->get('id')));
859
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
860
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
861
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1b->get('id')));
862
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
863
        $this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
864
        $this->assertTrue(\core_competency\user_competency::record_exists($uc1b->get('id')));
865
        $this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
866
        $this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
867
        $this->assertTrue(\core_competency\evidence::record_exists($e1b->get('id')));
868
        $this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
869
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1a->get('id')));
870
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
871
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc2->get('id')));
872
        $this->assert_has_comments($p1acommentobj);
873
        $this->assertEquals(2, $this->get_comments_count($p1acommentobj, $u1->id));
874
        $this->assertEquals(0, $this->get_comments_count($p1acommentobj, $u2->id));
875
        $this->assert_has_comments($p2commentobj);
876
        $this->assertEquals(1, $this->get_comments_count($p2commentobj, $u1->id));
877
        $this->assertEquals(0, $this->get_comments_count($p2commentobj, $u2->id));
878
        $this->assert_has_comments($uc1acommentobj);
879
        $this->assertEquals(0, $this->get_comments_count($uc1acommentobj, $u1->id));
880
        $this->assertEquals(2, $this->get_comments_count($uc1acommentobj, $u2->id));
881
        $this->assert_has_comments($uc2commentobj);
882
        $this->assertEquals(0, $this->get_comments_count($uc2commentobj, $u1->id));
883
        $this->assertEquals(1, $this->get_comments_count($uc2commentobj, $u2->id));
884
 
885
        // Deleting user context only.
886
        $appctx = new approved_contextlist($u1, 'core_competency', [$u1ctx->id]);
887
        provider::delete_data_for_user($appctx);
888
 
889
        $this->assertFalse(\core_competency\user_evidence::record_exists($ue1a->get('id')));
890
        $this->assertFalse(\core_competency\user_evidence::record_exists($ue1b->get('id')));
891
        $this->assertFalse(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
892
        $this->assertFalse(\core_competency\user_evidence_competency::record_exists($uec1b->get('id')));
893
        $this->assertFalse(\core_competency\plan::record_exists($p1a->get('id')));
894
        $this->assertFalse(\core_competency\plan::record_exists($p1b->get('id')));
895
        $this->assertFalse(\core_competency\plan_competency::record_exists($pc1a->get('id')));
896
        $this->assertFalse(\core_competency\plan_competency::record_exists($pc1b->get('id')));
897
        $this->assertFalse(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
898
        $this->assertFalse(\core_competency\user_competency_plan::record_exists($ucp1b->get('id')));
899
        $this->assertFalse(\core_competency\user_competency::record_exists($uc1a->get('id')));
900
        $this->assertFalse(\core_competency\user_competency::record_exists($uc1b->get('id')));
901
        $this->assertFalse(\core_competency\evidence::record_exists($e1a->get('id')));
902
        $this->assertFalse(\core_competency\evidence::record_exists($e1b->get('id')));
903
 
904
        $this->assert_has_no_comments($p1acommentobj);
905
        $this->assertEquals(0, $this->get_comments_count($p1acommentobj, $u1->id));
906
        $this->assertEquals(0, $this->get_comments_count($p1acommentobj, $u2->id));
907
        $this->assert_has_no_comments($uc1acommentobj);
908
        $this->assertEquals(0, $this->get_comments_count($uc1acommentobj, $u1->id));
909
        $this->assertEquals(0, $this->get_comments_count($uc1acommentobj, $u2->id));
910
 
911
        // This should not have been affected.
912
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1a->get('id')));
913
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
914
 
915
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
916
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
917
        $this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
918
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
919
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
920
        $this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
921
        $this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
922
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc2->get('id')));
923
        $this->assert_has_comments($p2commentobj);
924
        $this->assertEquals(1, $this->get_comments_count($p2commentobj, $u1->id));
925
        $this->assertEquals(0, $this->get_comments_count($p2commentobj, $u2->id));
926
        $this->assert_has_comments($uc2commentobj);
927
        $this->assertEquals(0, $this->get_comments_count($uc2commentobj, $u1->id));
928
        $this->assertEquals(1, $this->get_comments_count($uc2commentobj, $u2->id));
929
 
930
        // Deleting course context as well.
931
        $appctx = new approved_contextlist($u1, 'core_competency', [$u1ctx->id, $c1ctx->id]);
932
        provider::delete_data_for_user($appctx);
933
 
934
        $this->assertFalse(\core_competency\user_competency_course::record_exists($ucc1a->get('id')));
935
 
936
        // The rest belongs to another course, or the other user.
937
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
938
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
939
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
940
        $this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
941
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
942
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
943
        $this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
944
        $this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
945
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc2->get('id')));
946
    }
947
 
11 efrain 948
    public function test_delete_data_for_user_with_other_user_context(): void {
1 efrain 949
        $dg = $this->getDataGenerator();
950
        $ccg = $dg->get_plugin_generator('core_competency');
951
 
952
        $u1 = $dg->create_user();
953
        $u2 = $dg->create_user();
954
 
955
        $u1ctx = \context_user::instance($u1->id);
956
        $u2ctx = \context_user::instance($u2->id);
957
 
958
        $f = $ccg->create_framework();
959
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
960
 
961
        // Create a bunch of data for user 1.
962
        $ue1a = $ccg->create_user_evidence(['userid' => $u1->id]);
963
        $uec1a = $ccg->create_user_evidence_competency(['userevidenceid' => $ue1a->get('id'),
964
            'competencyid' => $comp1->get('id')]);
965
        $p1a = $ccg->create_plan(['userid' => $u1->id]);
966
        $pc1a = $ccg->create_plan_competency(['planid' => $p1a->get('id'), 'competencyid' => $comp1->get('id')]);
967
        $ucp1a = $ccg->create_user_competency_plan(['userid' => $u1->id, 'planid' => $p1a->get('id'),
968
            'competencyid' => $comp1->get('id')]);
969
        $uc1a = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp1->get('id')]);
970
        $e1a = $ccg->create_evidence(['usercompetencyid' => $uc1a->get('id')]);
971
 
972
        $p2a = $ccg->create_plan(['userid' => $u2->id]);
973
 
974
        // User 2 comments.
975
        $this->allow_anyone_to_comment_anywhere();
976
        $this->setUser($u2);
977
        $p1a->get_comment_object()->add('Hi...');
978
        $p2a->get_comment_object()->add('Hi, hi!');
979
        $uc1a->get_comment_object()->add('Hi, too!');
980
 
981
        // Confirm state.
982
        $this->setAdminUser();
983
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
984
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
985
        $this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
986
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
987
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
988
        $this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
989
        $this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
990
        $this->assert_has_comments($p1a->get_comment_object());
991
        $this->assertEquals(1, $this->get_comments_count($p1a->get_comment_object(), $u2->id));
992
        $this->assert_has_comments($p2a->get_comment_object());
993
        $this->assertEquals(1, $this->get_comments_count($p2a->get_comment_object(), $u2->id));
994
        $this->assert_has_comments($uc1a->get_comment_object());
995
        $this->assertEquals(1, $this->get_comments_count($uc1a->get_comment_object(), $u2->id));
996
 
997
        $this->assertTrue(\core_competency\plan::record_exists($p2a->get('id')));
998
 
999
        // Delete for user 2, but we pass u1 context.
1000
        provider::delete_data_for_user(new approved_contextlist($u2, 'core_competency', [$u1ctx->id]));
1001
 
1002
        // Nothing should have happened.
1003
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
1004
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
1005
        $this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
1006
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
1007
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
1008
        $this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
1009
        $this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
1010
        $this->assert_has_comments($p1a->get_comment_object());
1011
        $this->assertEquals(1, $this->get_comments_count($p1a->get_comment_object(), $u2->id));
1012
        $this->assert_has_comments($p2a->get_comment_object());
1013
        $this->assertEquals(1, $this->get_comments_count($p2a->get_comment_object(), $u2->id));
1014
        $this->assert_has_comments($uc1a->get_comment_object());
1015
        $this->assertEquals(1, $this->get_comments_count($uc1a->get_comment_object(), $u2->id));
1016
 
1017
        $this->assertTrue(\core_competency\plan::record_exists($p2a->get('id')));
1018
 
1019
        // Delete for user 2, but we pass u1 and u2 context.
1020
        $p2acommentobj = $p2a->get_comment_object();
1021
        provider::delete_data_for_user(new approved_contextlist($u2, 'core_competency', [$u1ctx->id, $u2ctx->id]));
1022
 
1023
        // The plan got deleted.
1024
        $this->assertFalse(\core_competency\plan::record_exists($p2a->get('id')));
1025
        $this->assert_has_no_comments($p2acommentobj);
1026
 
1027
        // Nothing should have happened for u1.
1028
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
1029
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
1030
        $this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
1031
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
1032
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
1033
        $this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
1034
        $this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
1035
        $this->assert_has_comments($p1a->get_comment_object());
1036
        $this->assertEquals(1, $this->get_comments_count($p1a->get_comment_object(), $u2->id));
1037
        $this->assert_has_comments($uc1a->get_comment_object());
1038
        $this->assertEquals(1, $this->get_comments_count($uc1a->get_comment_object(), $u2->id));
1039
    }
1040
 
11 efrain 1041
    public function test_delete_data_for_users(): void {
1 efrain 1042
        $dg = $this->getDataGenerator();
1043
        $ccg = $dg->get_plugin_generator('core_competency');
1044
 
1045
        $c1 = $dg->create_course();
1046
        $c2 = $dg->create_course();
1047
        $u1 = $dg->create_user();
1048
        $u2 = $dg->create_user();
1049
 
1050
        $c1ctx = \context_course::instance($c1->id);
1051
        $u1ctx = \context_user::instance($u1->id);
1052
 
1053
        $f = $ccg->create_framework();
1054
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1055
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1056
 
1057
        $ue1a = $ccg->create_user_evidence(['userid' => $u1->id]);
1058
        $ue1b = $ccg->create_user_evidence(['userid' => $u1->id]);
1059
        $ue2 = $ccg->create_user_evidence(['userid' => $u2->id]);
1060
        $uec1a = $ccg->create_user_evidence_competency(['userevidenceid' => $ue1a->get('id'),
1061
            'competencyid' => $comp1->get('id')]);
1062
        $uec1b = $ccg->create_user_evidence_competency(['userevidenceid' => $ue1b->get('id'),
1063
            'competencyid' => $comp2->get('id')]);
1064
        $uec2 = $ccg->create_user_evidence_competency(['userevidenceid' => $ue2->get('id'),
1065
            'competencyid' => $comp1->get('id')]);
1066
 
1067
        $p1a = $ccg->create_plan(['userid' => $u1->id]);
1068
        $p1b = $ccg->create_plan(['userid' => $u1->id]);
1069
        $p2 = $ccg->create_plan(['userid' => $u2->id]);
1070
        $pc1a = $ccg->create_plan_competency(['planid' => $p1a->get('id'), 'competencyid' => $comp1->get('id')]);
1071
        $pc1b = $ccg->create_plan_competency(['planid' => $p1b->get('id'), 'competencyid' => $comp2->get('id')]);
1072
        $pc2 = $ccg->create_plan_competency(['planid' => $p2->get('id'), 'competencyid' => $comp1->get('id')]);
1073
        $ucp1a = $ccg->create_user_competency_plan(['userid' => $u1->id, 'planid' => $p1a->get('id'),
1074
            'competencyid' => $comp1->get('id')]);
1075
        $ucp1b = $ccg->create_user_competency_plan(['userid' => $u1->id, 'planid' => $p1b->get('id'),
1076
            'competencyid' => $comp2->get('id')]);
1077
        $ucp2 = $ccg->create_user_competency_plan(['userid' => $u2->id, 'planid' => $p2->get('id'),
1078
            'competencyid' => $comp1->get('id')]);
1079
 
1080
        $uc1a = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp1->get('id')]);
1081
        $uc1b = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp2->get('id')]);
1082
        $uc2 = $ccg->create_user_competency(['userid' => $u2->id, 'competencyid' => $comp2->get('id')]);
1083
        $e1a = $ccg->create_evidence(['usercompetencyid' => $uc1a->get('id')]);
1084
        $e1b = $ccg->create_evidence(['usercompetencyid' => $uc1b->get('id')]);
1085
        $e2 = $ccg->create_evidence(['usercompetencyid' => $uc2->get('id')]);
1086
 
1087
        $ucc1a = $ccg->create_user_competency_course(['userid' => $u1->id, 'courseid' => $c1->id,
1088
            'competencyid' => $comp1->get('id')]);
1089
        $ucc1b = $ccg->create_user_competency_course(['userid' => $u1->id, 'courseid' => $c2->id,
1090
            'competencyid' => $comp1->get('id')]);
1091
        $ucc2 = $ccg->create_user_competency_course(['userid' => $u2->id, 'courseid' => $c1->id,
1092
            'competencyid' => $comp1->get('id')]);
1093
 
1094
        // User 1 comments on both plans.
1095
        $this->allow_anyone_to_comment_anywhere();
1096
        $this->setUser($u1);
1097
        $p1a->get_comment_object()->add('Hi...');
1098
        $p1a->get_comment_object()->add('mister');
1099
        $p2->get_comment_object()->add('Ahoy!');
1100
 
1101
        // User 2 comments on both competencies.
1102
        $this->setUser($u2);
1103
        $uc1a->get_comment_object()->add('Hi, too!');
1104
        $uc1a->get_comment_object()->add('How are you?');
1105
        $uc2->get_comment_object()->add('Ahoy, too!');
1106
 
1107
        $p1acommentobj = $p1a->get_comment_object();
1108
        $p2commentobj = $p2->get_comment_object();
1109
        $uc1acommentobj = $uc1a->get_comment_object();
1110
        $uc2commentobj = $uc2->get_comment_object();
1111
 
1112
        $this->setAdminUser();
1113
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
1114
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue1b->get('id')));
1115
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
1116
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
1117
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1b->get('id')));
1118
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
1119
        $this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
1120
        $this->assertTrue(\core_competency\plan::record_exists($p1b->get('id')));
1121
        $this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
1122
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
1123
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc1b->get('id')));
1124
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
1125
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
1126
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1b->get('id')));
1127
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
1128
        $this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
1129
        $this->assertTrue(\core_competency\user_competency::record_exists($uc1b->get('id')));
1130
        $this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
1131
        $this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
1132
        $this->assertTrue(\core_competency\evidence::record_exists($e1b->get('id')));
1133
        $this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
1134
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1a->get('id')));
1135
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
1136
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc2->get('id')));
1137
        $this->assert_has_comments($p1acommentobj);
1138
        $this->assertEquals(2, $this->get_comments_count($p1acommentobj, $u1->id));
1139
        $this->assertEquals(0, $this->get_comments_count($p1acommentobj, $u2->id));
1140
        $this->assert_has_comments($p2commentobj);
1141
        $this->assertEquals(1, $this->get_comments_count($p2commentobj, $u1->id));
1142
        $this->assertEquals(0, $this->get_comments_count($p2commentobj, $u2->id));
1143
        $this->assert_has_comments($uc1acommentobj);
1144
        $this->assertEquals(0, $this->get_comments_count($uc1acommentobj, $u1->id));
1145
        $this->assertEquals(2, $this->get_comments_count($uc1acommentobj, $u2->id));
1146
        $this->assert_has_comments($uc2commentobj);
1147
        $this->assertEquals(0, $this->get_comments_count($uc2commentobj, $u1->id));
1148
        $this->assertEquals(1, $this->get_comments_count($uc2commentobj, $u2->id));
1149
 
1150
        // Deleting user context.
1151
        $userlist = new approved_userlist($u1ctx, 'core_competency', [$u1->id, $u2->id]);
1152
        provider::delete_data_for_users($userlist);
1153
 
1154
        $this->assertFalse(\core_competency\user_evidence::record_exists($ue1a->get('id')));
1155
        $this->assertFalse(\core_competency\user_evidence::record_exists($ue1b->get('id')));
1156
        $this->assertFalse(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
1157
        $this->assertFalse(\core_competency\user_evidence_competency::record_exists($uec1b->get('id')));
1158
        $this->assertFalse(\core_competency\plan::record_exists($p1a->get('id')));
1159
        $this->assertFalse(\core_competency\plan::record_exists($p1b->get('id')));
1160
        $this->assertFalse(\core_competency\plan_competency::record_exists($pc1a->get('id')));
1161
        $this->assertFalse(\core_competency\plan_competency::record_exists($pc1b->get('id')));
1162
        $this->assertFalse(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
1163
        $this->assertFalse(\core_competency\user_competency_plan::record_exists($ucp1b->get('id')));
1164
        $this->assertFalse(\core_competency\user_competency::record_exists($uc1a->get('id')));
1165
        $this->assertFalse(\core_competency\user_competency::record_exists($uc1b->get('id')));
1166
        $this->assertFalse(\core_competency\evidence::record_exists($e1a->get('id')));
1167
        $this->assertFalse(\core_competency\evidence::record_exists($e1b->get('id')));
1168
 
1169
        $this->assert_has_no_comments($p1acommentobj);
1170
        $this->assertEquals(0, $this->get_comments_count($p1acommentobj, $u1->id));
1171
        $this->assertEquals(0, $this->get_comments_count($p1acommentobj, $u2->id));
1172
        $this->assert_has_no_comments($uc1acommentobj);
1173
        $this->assertEquals(0, $this->get_comments_count($uc1acommentobj, $u1->id));
1174
        $this->assertEquals(0, $this->get_comments_count($uc1acommentobj, $u2->id));
1175
 
1176
        // This should not have been affected.
1177
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1a->get('id')));
1178
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
1179
 
1180
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
1181
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
1182
        $this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
1183
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
1184
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
1185
        $this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
1186
        $this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
1187
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc2->get('id')));
1188
        $this->assert_has_comments($p2commentobj);
1189
        $this->assertEquals(1, $this->get_comments_count($p2commentobj, $u1->id));
1190
        $this->assertEquals(0, $this->get_comments_count($p2commentobj, $u2->id));
1191
        $this->assert_has_comments($uc2commentobj);
1192
        $this->assertEquals(0, $this->get_comments_count($uc2commentobj, $u1->id));
1193
        $this->assertEquals(1, $this->get_comments_count($uc2commentobj, $u2->id));
1194
 
1195
        // Deleting course context as well.
1196
        $userlist = new approved_userlist($c1ctx, 'core_competency', [$u1->id]);
1197
        provider::delete_data_for_users($userlist);
1198
 
1199
        $this->assertFalse(\core_competency\user_competency_course::record_exists($ucc1a->get('id')));
1200
 
1201
        // The rest belongs to another course, or the other user.
1202
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
1203
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
1204
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
1205
        $this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
1206
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
1207
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
1208
        $this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
1209
        $this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
1210
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc2->get('id')));
1211
    }
1212
 
11 efrain 1213
    public function test_delete_data_for_users_with_other_user_context(): void {
1 efrain 1214
        $dg = $this->getDataGenerator();
1215
        $ccg = $dg->get_plugin_generator('core_competency');
1216
 
1217
        $u1 = $dg->create_user();
1218
        $u2 = $dg->create_user();
1219
 
1220
        $u1ctx = \context_user::instance($u1->id);
1221
        $u2ctx = \context_user::instance($u2->id);
1222
 
1223
        $f = $ccg->create_framework();
1224
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1225
 
1226
        // Create a bunch of data for user 1.
1227
        $ue1a = $ccg->create_user_evidence(['userid' => $u1->id]);
1228
        $uec1a = $ccg->create_user_evidence_competency(['userevidenceid' => $ue1a->get('id'),
1229
            'competencyid' => $comp1->get('id')]);
1230
        $p1a = $ccg->create_plan(['userid' => $u1->id]);
1231
        $pc1a = $ccg->create_plan_competency(['planid' => $p1a->get('id'), 'competencyid' => $comp1->get('id')]);
1232
        $ucp1a = $ccg->create_user_competency_plan(['userid' => $u1->id, 'planid' => $p1a->get('id'),
1233
            'competencyid' => $comp1->get('id')]);
1234
        $uc1a = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp1->get('id')]);
1235
        $e1a = $ccg->create_evidence(['usercompetencyid' => $uc1a->get('id')]);
1236
 
1237
        $p2a = $ccg->create_plan(['userid' => $u2->id]);
1238
 
1239
        // User 2 comments.
1240
        $this->allow_anyone_to_comment_anywhere();
1241
        $this->setUser($u2);
1242
        $p1a->get_comment_object()->add('Hi...');
1243
        $p2a->get_comment_object()->add('Hi, hi!');
1244
        $uc1a->get_comment_object()->add('Hi, too!');
1245
 
1246
        // Confirm state.
1247
        $this->setAdminUser();
1248
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
1249
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
1250
        $this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
1251
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
1252
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
1253
        $this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
1254
        $this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
1255
        $this->assert_has_comments($p1a->get_comment_object());
1256
        $this->assertEquals(1, $this->get_comments_count($p1a->get_comment_object(), $u2->id));
1257
        $this->assert_has_comments($p2a->get_comment_object());
1258
        $this->assertEquals(1, $this->get_comments_count($p2a->get_comment_object(), $u2->id));
1259
        $this->assert_has_comments($uc1a->get_comment_object());
1260
        $this->assertEquals(1, $this->get_comments_count($uc1a->get_comment_object(), $u2->id));
1261
 
1262
        $this->assertTrue(\core_competency\plan::record_exists($p2a->get('id')));
1263
 
1264
        // Delete for user 2, but we pass u1 context.
1265
        $userlist = new approved_userlist($u1ctx, 'core_competency', [$u2->id]);
1266
        provider::delete_data_for_users($userlist);
1267
 
1268
        // Nothing should have happened.
1269
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
1270
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
1271
        $this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
1272
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
1273
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
1274
        $this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
1275
        $this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
1276
        $this->assert_has_comments($p1a->get_comment_object());
1277
        $this->assertEquals(1, $this->get_comments_count($p1a->get_comment_object(), $u2->id));
1278
        $this->assert_has_comments($p2a->get_comment_object());
1279
        $this->assertEquals(1, $this->get_comments_count($p2a->get_comment_object(), $u2->id));
1280
        $this->assert_has_comments($uc1a->get_comment_object());
1281
        $this->assertEquals(1, $this->get_comments_count($uc1a->get_comment_object(), $u2->id));
1282
 
1283
        $this->assertTrue(\core_competency\plan::record_exists($p2a->get('id')));
1284
 
1285
        // Delete for user 2, in user 2 context.
1286
        $p2acommentobj = $p2a->get_comment_object();
1287
        $userlist = new approved_userlist($u2ctx, 'core_competency', [$u2->id]);
1288
        provider::delete_data_for_users($userlist);
1289
 
1290
        // The plan got deleted.
1291
        $this->assertFalse(\core_competency\plan::record_exists($p2a->get('id')));
1292
        $this->assert_has_no_comments($p2acommentobj);
1293
 
1294
        // Nothing should have happened for u1.
1295
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
1296
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
1297
        $this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
1298
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
1299
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
1300
        $this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
1301
        $this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
1302
        $this->assert_has_comments($p1a->get_comment_object());
1303
        $this->assertEquals(1, $this->get_comments_count($p1a->get_comment_object(), $u2->id));
1304
        $this->assert_has_comments($uc1a->get_comment_object());
1305
        $this->assertEquals(1, $this->get_comments_count($uc1a->get_comment_object(), $u2->id));
1306
    }
1307
 
11 efrain 1308
    public function test_delete_data_for_all_users_in_context(): void {
1 efrain 1309
        $dg = $this->getDataGenerator();
1310
        $ccg = $dg->get_plugin_generator('core_competency');
1311
 
1312
        $c1 = $dg->create_course();
1313
        $c2 = $dg->create_course();
1314
        $u1 = $dg->create_user();
1315
        $u2 = $dg->create_user();
1316
 
1317
        $c1ctx = \context_course::instance($c1->id);
1318
        $u1ctx = \context_user::instance($u1->id);
1319
        $u2ctx = \context_user::instance($u2->id);
1320
 
1321
        $f = $ccg->create_framework();
1322
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1323
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1324
 
1325
        $ue1a = $ccg->create_user_evidence(['userid' => $u1->id]);
1326
        $ue1b = $ccg->create_user_evidence(['userid' => $u1->id]);
1327
        $ue2 = $ccg->create_user_evidence(['userid' => $u2->id]);
1328
        $uec1a = $ccg->create_user_evidence_competency(['userevidenceid' => $ue1a->get('id'),
1329
            'competencyid' => $comp1->get('id')]);
1330
        $uec1b = $ccg->create_user_evidence_competency(['userevidenceid' => $ue1b->get('id'),
1331
            'competencyid' => $comp2->get('id')]);
1332
        $uec2 = $ccg->create_user_evidence_competency(['userevidenceid' => $ue2->get('id'),
1333
            'competencyid' => $comp1->get('id')]);
1334
 
1335
        $p1a = $ccg->create_plan(['userid' => $u1->id]);
1336
        $p1b = $ccg->create_plan(['userid' => $u1->id]);
1337
        $p2 = $ccg->create_plan(['userid' => $u2->id]);
1338
        $pc1a = $ccg->create_plan_competency(['planid' => $p1a->get('id'), 'competencyid' => $comp1->get('id')]);
1339
        $pc1b = $ccg->create_plan_competency(['planid' => $p1b->get('id'), 'competencyid' => $comp2->get('id')]);
1340
        $pc2 = $ccg->create_plan_competency(['planid' => $p2->get('id'), 'competencyid' => $comp1->get('id')]);
1341
        $ucp1a = $ccg->create_user_competency_plan(['userid' => $u1->id, 'planid' => $p1a->get('id'),
1342
            'competencyid' => $comp1->get('id')]);
1343
        $ucp1b = $ccg->create_user_competency_plan(['userid' => $u1->id, 'planid' => $p1b->get('id'),
1344
            'competencyid' => $comp2->get('id')]);
1345
        $ucp2 = $ccg->create_user_competency_plan(['userid' => $u2->id, 'planid' => $p2->get('id'),
1346
            'competencyid' => $comp1->get('id')]);
1347
 
1348
        $uc1a = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp1->get('id')]);
1349
        $uc1b = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp2->get('id')]);
1350
        $uc2 = $ccg->create_user_competency(['userid' => $u2->id, 'competencyid' => $comp2->get('id')]);
1351
        $e1a = $ccg->create_evidence(['usercompetencyid' => $uc1a->get('id')]);
1352
        $e1b = $ccg->create_evidence(['usercompetencyid' => $uc1b->get('id')]);
1353
        $e2 = $ccg->create_evidence(['usercompetencyid' => $uc2->get('id')]);
1354
 
1355
        $ucc1a = $ccg->create_user_competency_course(['userid' => $u1->id, 'courseid' => $c1->id,
1356
            'competencyid' => $comp1->get('id')]);
1357
        $ucc1b = $ccg->create_user_competency_course(['userid' => $u1->id, 'courseid' => $c2->id,
1358
            'competencyid' => $comp1->get('id')]);
1359
        $ucc2 = $ccg->create_user_competency_course(['userid' => $u2->id, 'courseid' => $c1->id,
1360
            'competencyid' => $comp1->get('id')]);
1361
 
1362
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
1363
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue1b->get('id')));
1364
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
1365
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
1366
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1b->get('id')));
1367
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
1368
        $this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
1369
        $this->assertTrue(\core_competency\plan::record_exists($p1b->get('id')));
1370
        $this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
1371
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
1372
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc1b->get('id')));
1373
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
1374
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
1375
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1b->get('id')));
1376
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
1377
        $this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
1378
        $this->assertTrue(\core_competency\user_competency::record_exists($uc1b->get('id')));
1379
        $this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
1380
        $this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
1381
        $this->assertTrue(\core_competency\evidence::record_exists($e1b->get('id')));
1382
        $this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
1383
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1a->get('id')));
1384
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
1385
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc2->get('id')));
1386
 
1387
        // Deleting the course 1 context.
1388
        provider::delete_data_for_all_users_in_context($c1ctx);
1389
        $this->assertFalse(\core_competency\user_competency_course::record_exists($ucc1a->get('id')));
1390
        $this->assertFalse(\core_competency\user_competency_course::record_exists($ucc2->get('id')));
1391
 
1392
        // Not affected.
1393
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue1a->get('id')));
1394
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue1b->get('id')));
1395
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
1396
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
1397
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec1b->get('id')));
1398
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
1399
        $this->assertTrue(\core_competency\plan::record_exists($p1a->get('id')));
1400
        $this->assertTrue(\core_competency\plan::record_exists($p1b->get('id')));
1401
        $this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
1402
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc1a->get('id')));
1403
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc1b->get('id')));
1404
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
1405
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
1406
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp1b->get('id')));
1407
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
1408
        $this->assertTrue(\core_competency\user_competency::record_exists($uc1a->get('id')));
1409
        $this->assertTrue(\core_competency\user_competency::record_exists($uc1b->get('id')));
1410
        $this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
1411
        $this->assertTrue(\core_competency\evidence::record_exists($e1a->get('id')));
1412
        $this->assertTrue(\core_competency\evidence::record_exists($e1b->get('id')));
1413
        $this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
1414
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
1415
 
1416
        // Deleting the user 1 context.
1417
        provider::delete_data_for_all_users_in_context($u1ctx);
1418
        $this->assertFalse(\core_competency\user_evidence::record_exists($ue1a->get('id')));
1419
        $this->assertFalse(\core_competency\user_evidence::record_exists($ue1b->get('id')));
1420
        $this->assertFalse(\core_competency\user_evidence_competency::record_exists($uec1a->get('id')));
1421
        $this->assertFalse(\core_competency\user_evidence_competency::record_exists($uec1b->get('id')));
1422
        $this->assertFalse(\core_competency\plan::record_exists($p1a->get('id')));
1423
        $this->assertFalse(\core_competency\plan::record_exists($p1b->get('id')));
1424
        $this->assertFalse(\core_competency\plan_competency::record_exists($pc1a->get('id')));
1425
        $this->assertFalse(\core_competency\plan_competency::record_exists($pc1b->get('id')));
1426
        $this->assertFalse(\core_competency\user_competency_plan::record_exists($ucp1a->get('id')));
1427
        $this->assertFalse(\core_competency\user_competency_plan::record_exists($ucp1b->get('id')));
1428
        $this->assertFalse(\core_competency\user_competency::record_exists($uc1a->get('id')));
1429
        $this->assertFalse(\core_competency\user_competency::record_exists($uc1b->get('id')));
1430
        $this->assertFalse(\core_competency\evidence::record_exists($e1a->get('id')));
1431
        $this->assertFalse(\core_competency\evidence::record_exists($e1b->get('id')));
1432
 
1433
        // Not affected.
1434
        $this->assertTrue(\core_competency\user_evidence::record_exists($ue2->get('id')));
1435
        $this->assertTrue(\core_competency\user_evidence_competency::record_exists($uec2->get('id')));
1436
        $this->assertTrue(\core_competency\plan::record_exists($p2->get('id')));
1437
        $this->assertTrue(\core_competency\plan_competency::record_exists($pc2->get('id')));
1438
        $this->assertTrue(\core_competency\user_competency_plan::record_exists($ucp2->get('id')));
1439
        $this->assertTrue(\core_competency\user_competency::record_exists($uc2->get('id')));
1440
        $this->assertTrue(\core_competency\evidence::record_exists($e2->get('id')));
1441
        $this->assertTrue(\core_competency\user_competency_course::record_exists($ucc1b->get('id')));
1442
    }
1443
 
11 efrain 1444
    public function test_export_data_for_user_in_module_context_where_usermodified_matches(): void {
1 efrain 1445
        $dg = $this->getDataGenerator();
1446
        $ccg = $dg->get_plugin_generator('core_competency');
1447
 
1448
        $c1 = $dg->create_course();
1449
        $u1 = $dg->create_user();
1450
        $u2 = $dg->create_user();
1451
        $m1 = $dg->create_module('page', ['course' => $c1]);
1452
        $m2 = $dg->create_module('page', ['course' => $c1]);
1453
 
1454
        $m1ctx = \context_module::instance($m1->cmid);
1455
        $m2ctx = \context_module::instance($m2->cmid);
1456
 
1457
        $f = $ccg->create_framework();
1458
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1459
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1460
        $comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1461
        $ccg->create_course_module_competency(['competencyid' => $comp3->get('id'), 'cmid' => $m1->cmid]);
1462
 
1463
        $this->setUser($u1);
1464
        $ccg->create_course_module_competency(['competencyid' => $comp1->get('id'), 'cmid' => $m1->cmid]);
1465
        $ccg->create_course_module_competency(['competencyid' => $comp2->get('id'), 'cmid' => $m2->cmid]);
1466
 
1467
        $this->setUser($u2);
1468
        $ccg->create_course_module_competency(['competencyid' => $comp3->get('id'), 'cmid' => $m2->cmid]);
1469
 
1470
        // Export.
1471
        $this->setAdminUser();
1472
        provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$m1ctx->id]));
1473
 
1474
        // Check exported context 1.
1475
        $data = writer::with_context($m1ctx)->get_data([get_string('competencies', 'core_competency')]);
1476
        $this->assertCount(1, $data->associations);
1477
        $this->assertEquals(transform::yesno(true), $data->associations[0]['created_or_modified_by_you']);
1478
 
1479
        // Check exported context 2.
1480
        $data = writer::with_context($m2ctx)->get_data([get_string('competencies', 'core_competency')]);
1481
        $this->assertEmpty($data);
1482
 
1483
        // Export both contexts.
1484
        provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$m1ctx->id, $m2ctx->id]));
1485
 
1486
        // Check exported context 1.
1487
        $data = writer::with_context($m1ctx)->get_data([get_string('competencies', 'core_competency')]);
1488
        $this->assertCount(1, $data->associations);
1489
        $this->assertEquals($comp1->get('shortname'), $data->associations[0]['name']);
1490
        $this->assertEquals(transform::yesno(true), $data->associations[0]['created_or_modified_by_you']);
1491
 
1492
        // Check exported context 2.
1493
        $data = writer::with_context($m2ctx)->get_data([get_string('competencies', 'core_competency')]);
1494
        $this->assertCount(1, $data->associations);
1495
        $this->assertEquals($comp2->get('shortname'), $data->associations[0]['name']);
1496
        $this->assertEquals(transform::yesno(true), $data->associations[0]['created_or_modified_by_you']);
1497
    }
1498
 
11 efrain 1499
    public function test_export_data_for_user_in_course_context_where_usermodified_matches(): void {
1 efrain 1500
        $dg = $this->getDataGenerator();
1501
        $ccg = $dg->get_plugin_generator('core_competency');
1502
 
1503
        $c1 = $dg->create_course();
1504
        $c2 = $dg->create_course();
1505
        $u0 = $dg->create_user();
1506
        $u1 = $dg->create_user();
1507
        $u2 = $dg->create_user();
1508
        $u3 = $dg->create_user();
1509
        $u4 = $dg->create_user();
1510
 
1511
        $c1ctx = \context_course::instance($c1->id);
1512
        $c2ctx = \context_course::instance($c2->id);
1513
 
1514
        $f = $ccg->create_framework();
1515
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1516
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1517
        $comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1518
        $comp4 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1519
        $ccg->create_course_competency(['competencyid' => $comp3->get('id'), 'courseid' => $c1->id]);
1520
        $ccg->create_user_competency_course(['competencyid' => $comp3->get('id'), 'courseid' => $c1->id, 'userid' => $u0->id]);
1521
 
1522
        $this->setUser($u1);
1523
        $ccg->create_course_competency(['competencyid' => $comp1->get('id'), 'courseid' => $c1->id]);
1524
        $ccg->create_course_competency(['competencyid' => $comp4->get('id'), 'courseid' => $c1->id]);
1525
        $ccg->create_course_competency(['competencyid' => $comp2->get('id'), 'courseid' => $c2->id]);
1526
        $ccg->create_user_competency_course(['competencyid' => $comp1->get('id'), 'courseid' => $c1->id, 'userid' => $u0->id]);
1527
        $ccg->create_user_competency_course(['competencyid' => $comp4->get('id'), 'courseid' => $c1->id, 'userid' => $u0->id]);
1528
        $ccg->create_user_competency_course(['competencyid' => $comp2->get('id'), 'courseid' => $c2->id, 'userid' => $u0->id]);
1529
        $ccs = new \core_competency\course_competency_settings(null, (object) ['courseid' => $c1->id]);
1530
        $ccs->create();
1531
 
1532
        $this->setUser($u2);
1533
        $ccg->create_course_competency(['competencyid' => $comp3->get('id'), 'courseid' => $c2->id]);
1534
        $ccg->create_user_competency_course(['competencyid' => $comp3->get('id'), 'courseid' => $c2->id, 'userid' => $u0->id]);
1535
        $ccs = new \core_competency\course_competency_settings(null, (object) ['courseid' => $c2->id]);
1536
        $ccs->create();
1537
 
1538
        // Export.
1539
        $this->setAdminUser();
1540
        provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$c1ctx->id]));
1541
 
1542
        // Check exported context 1.
1543
        $data = writer::with_context($c1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'associations');
1544
        $this->assertCount(2, $data->competencies);
1545
        $this->assertEquals($comp1->get('shortname'), $data->competencies[0]['name']);
1546
        $this->assertEquals(transform::yesno(true), $data->competencies[0]['created_or_modified_by_you']);
1547
        $this->assertEquals($comp4->get('shortname'), $data->competencies[1]['name']);
1548
        $this->assertEquals(transform::yesno(true), $data->competencies[1]['created_or_modified_by_you']);
1549
        $data = writer::with_context($c1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'settings');
1550
        $this->assertEquals(transform::yesno(true), $data->created_or_modified_by_you);
1551
        $data = writer::with_context($c1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'rated_by_me');
1552
        $this->assertCount(2, $data->ratings);
1553
        $this->assertEquals($comp1->get('shortname'), $data->ratings[0]['name']);
1554
        $this->assertEquals($comp4->get('shortname'), $data->ratings[1]['name']);
1555
 
1556
        // Check exported context 2.
1557
        $data = writer::with_context($c2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'associations');
1558
        $this->assertEmpty($data);
1559
        $data = writer::with_context($c2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'settings');
1560
        $this->assertEmpty($data);
1561
        $data = writer::with_context($c2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'rated_by_me');
1562
        $this->assertEmpty($data);
1563
 
1564
        // Export both contexts.
1565
        provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$c1ctx->id, $c2ctx->id]));
1566
 
1567
        // Check exported context 1.
1568
        $data = writer::with_context($c1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'associations');
1569
        $this->assertCount(2, $data->competencies);
1570
        $this->assertEquals($comp1->get('shortname'), $data->competencies[0]['name']);
1571
        $this->assertEquals(transform::yesno(true), $data->competencies[0]['created_or_modified_by_you']);
1572
        $this->assertEquals($comp4->get('shortname'), $data->competencies[1]['name']);
1573
        $this->assertEquals(transform::yesno(true), $data->competencies[1]['created_or_modified_by_you']);
1574
        $data = writer::with_context($c1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'settings');
1575
        $this->assertEquals(transform::yesno(true), $data->created_or_modified_by_you);
1576
        $data = writer::with_context($c1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'rated_by_me');
1577
        $this->assertCount(2, $data->ratings);
1578
        $this->assertEquals($comp1->get('shortname'), $data->ratings[0]['name']);
1579
        $this->assertEquals($comp4->get('shortname'), $data->ratings[1]['name']);
1580
 
1581
        // Check exported context 2.
1582
        $data = writer::with_context($c2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'associations');
1583
        $this->assertCount(1, $data->competencies);
1584
        $this->assertEquals($comp2->get('shortname'), $data->competencies[0]['name']);
1585
        $this->assertEquals(transform::yesno(true), $data->competencies[0]['created_or_modified_by_you']);
1586
        $data = writer::with_context($c2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'settings');
1587
        $this->assertEmpty($data);
1588
        $data = writer::with_context($c2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'rated_by_me');
1589
        $this->assertCount(1, $data->ratings);
1590
        $this->assertEquals($comp2->get('shortname'), $data->ratings[0]['name']);
1591
    }
1592
 
11 efrain 1593
    public function test_export_data_for_user_in_course_context_with_real_data(): void {
1 efrain 1594
        $dg = $this->getDataGenerator();
1595
        $ccg = $dg->get_plugin_generator('core_competency');
1596
 
1597
        $c1 = $dg->create_course();
1598
        $c2 = $dg->create_course();
1599
        $u1 = $dg->create_user();
1600
        $u2 = $dg->create_user();
1601
 
1602
        $c1ctx = \context_course::instance($c1->id);
1603
        $c2ctx = \context_course::instance($c2->id);
1604
 
1605
        $f = $ccg->create_framework();
1606
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1607
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1608
        $comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1609
 
1610
        $ccg->create_user_competency_course(['competencyid' => $comp1->get('id'), 'courseid' => $c1->id,
1611
            'userid' => $u1->id, 'grade' => 1, 'proficiency' => true]);
1612
        $ccg->create_user_competency_course(['competencyid' => $comp2->get('id'), 'courseid' => $c1->id,
1613
            'userid' => $u1->id, 'grade' => 2, 'proficiency' => false]);
1614
        $ccg->create_user_competency_course(['competencyid' => $comp2->get('id'), 'courseid' => $c2->id,
1615
            'userid' => $u1->id, 'grade' => 3, 'proficiency' => false]);
1616
        $ccg->create_user_competency_course(['competencyid' => $comp3->get('id'), 'courseid' => $c2->id,
1617
            'userid' => $u1->id]);
1618
 
1619
        $ccg->create_user_competency_course(['competencyid' => $comp3->get('id'), 'courseid' => $c1->id, 'userid' => $u2->id]);
1620
        $ccg->create_user_competency_course(['competencyid' => $comp3->get('id'), 'courseid' => $c2->id, 'userid' => $u2->id]);
1621
 
1622
        // Export user 1, in course 1.
1623
        provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$c1ctx->id]));
1624
 
1625
        // Check course 1.
1626
        $data = writer::with_context($c1ctx)->get_data([get_string('competencies', 'core_competency')]);
1627
        $this->assertCount(2, $data->ratings);
1628
        $this->assertEquals($comp1->get('shortname'), $data->ratings[0]['name']);
1629
        $this->assertEquals('A', $data->ratings[0]['rating']['rating']);
1630
        $this->assertEquals(transform::yesno(true), $data->ratings[0]['rating']['proficient']);
1631
        $this->assertEquals($comp2->get('shortname'), $data->ratings[1]['name']);
1632
        $this->assertEquals('B', $data->ratings[1]['rating']['rating']);
1633
        $this->assertEquals(transform::yesno(false), $data->ratings[1]['rating']['proficient']);
1634
 
1635
        // Check course 2.
1636
        $data = writer::with_context($c2ctx)->get_data([get_string('competencies', 'core_competency')]);
1637
        $this->assertEmpty($data);
1638
 
1639
        // Export user 1, in course 2.
1640
        provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$c2ctx->id]));
1641
        $data = writer::with_context($c2ctx)->get_data([get_string('competencies', 'core_competency')]);
1642
        $this->assertCount(2, $data->ratings);
1643
        $this->assertEquals($comp2->get('shortname'), $data->ratings[0]['name']);
1644
        $this->assertEquals('C', $data->ratings[0]['rating']['rating']);
1645
        $this->assertEquals(transform::yesno(false), $data->ratings[0]['rating']['proficient']);
1646
        $this->assertEquals($comp3->get('shortname'), $data->ratings[1]['name']);
1647
        $this->assertEquals('-', $data->ratings[1]['rating']['rating']);
1648
        $this->assertEquals('-', $data->ratings[1]['rating']['proficient']);
1649
    }
1650
 
11 efrain 1651
    public function test_export_data_for_user_in_system_and_category_contexts(): void {
1 efrain 1652
        $dg = $this->getDataGenerator();
1653
        $ccg = $dg->get_plugin_generator('core_competency');
1654
 
1655
        $c1 = $dg->create_cohort();
1656
        $c2 = $dg->create_cohort();
1657
        $cat1 = $dg->create_category();
1658
        $cat2 = $dg->create_category();
1659
 
1660
        $cat1ctx = \context_coursecat::instance($cat1->id);
1661
        $cat2ctx = \context_coursecat::instance($cat2->id);
1662
        $sysctx = \context_system::instance();
1663
 
1664
        $u1 = $dg->create_user();
1665
        $u2 = $dg->create_user();
1666
        $u3 = $dg->create_user();
1667
        $u4 = $dg->create_user();
1668
        $u2 = $dg->create_user();
1669
 
1670
        $this->setUser($u1);
1671
        $f1 = $ccg->create_framework();
1672
        $f1bis = $ccg->create_framework();
1673
        $f2 = $ccg->create_framework(['contextid' => $cat1ctx->id]);
1674
        $c2a = $ccg->create_competency(['competencyframeworkid' => $f2->get('id')]);
1675
        $c2b = $ccg->create_competency(['competencyframeworkid' => $f2->get('id')]);
1676
 
1677
        $t1 = $ccg->create_template();
1678
        $t2 = $ccg->create_template(['contextid' => $cat1ctx->id]);
1679
        $tc2a = $ccg->create_template_competency(['templateid' => $t2->get('id'), 'competencyid' => $c2a->get('id')]);
1680
        $tch2 = $ccg->create_template_cohort(['templateid' => $t2->get('id'), 'cohortid' => $c1->id]);
1681
 
1682
        $this->setUser($u2);
1683
        $f3 = $ccg->create_framework(['contextid' => $cat2ctx->id]);
1684
        $c1a = $ccg->create_competency(['competencyframeworkid' => $f1->get('id')]);
1685
        $c1b = $ccg->create_competency(['competencyframeworkid' => $f1->get('id')]);
1686
        $c3a = $ccg->create_competency(['competencyframeworkid' => $f3->get('id')]);
1687
        $c3b = $ccg->create_competency(['competencyframeworkid' => $f3->get('id')]);
1688
        $c3c = $ccg->create_competency(['competencyframeworkid' => $f3->get('id')]);
1689
        $c3d = $ccg->create_competency(['competencyframeworkid' => $f3->get('id')]);
1690
        $rc1 = $ccg->create_related_competency(['competencyid' => $c2a->get('id'), 'relatedcompetencyid' => $c2b->get('id')]);
1691
 
1692
        $t3 = $ccg->create_template(['contextid' => $cat2ctx->id]);
1693
        $tch1 = $ccg->create_template_cohort(['templateid' => $t1->get('id'), 'cohortid' => $c2->id]);
1694
        $tc1a = $ccg->create_template_competency(['templateid' => $t1->get('id'), 'competencyid' => $c1a->get('id')]);
1695
        $tc1b = $ccg->create_template_competency(['templateid' => $t1->get('id'), 'competencyid' => $c2a->get('id')]);
1696
        $tc3a = $ccg->create_template_competency(['templateid' => $t3->get('id'), 'competencyid' => $c3a->get('id')]);
1697
 
1698
        $this->setUser($u1);
1699
        $rc2 = $ccg->create_related_competency(['competencyid' => $c3a->get('id'), 'relatedcompetencyid' => $c3b->get('id')]);
1700
        $rc3 = $ccg->create_related_competency(['competencyid' => $c3a->get('id'), 'relatedcompetencyid' => $c3c->get('id')]);
1701
 
1702
        $this->setAdminUser();
1703
        provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$sysctx->id, $cat1ctx->id, $cat2ctx->id]));
1704
 
1705
        // Check frameworks for u1 in system.
1706
        $data = writer::with_context($sysctx)->get_related_data([get_string('competencies', 'core_competency')], 'frameworks');
1707
        $this->assertCount(2, $data->frameworks);
1708
        $this->assertEquals($f1->get('shortname'), $data->frameworks[0]['name']);
1709
        $this->assertEquals(transform::yesno(true), $data->frameworks[0]['created_or_modified_by_you']);
1710
        $this->assertEquals($f1bis->get('shortname'), $data->frameworks[1]['name']);
1711
        $this->assertEquals(transform::yesno(true), $data->frameworks[1]['created_or_modified_by_you']);
1712
        $this->assertEmpty($data->frameworks[0]['competencies']);
1713
        $this->assertEmpty($data->frameworks[1]['competencies']);
1714
 
1715
        // Check templates for u1 in system.
1716
        $data = writer::with_context($sysctx)->get_related_data([get_string('competencies', 'core_competency')], 'templates');
1717
        $this->assertCount(1, $data->templates);
1718
        $this->assertEquals($t1->get('shortname'), $data->templates[0]['name']);
1719
        $this->assertEquals(transform::yesno(true), $data->templates[0]['created_or_modified_by_you']);
1720
        $this->assertEmpty($data->templates[0]['competencies']);
1721
        $this->assertEmpty($data->templates[0]['cohorts']);
1722
 
1723
        // Check frameworks for u1 in cat1.
1724
        $data = writer::with_context($cat1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'frameworks');
1725
        $this->assertCount(1, $data->frameworks);
1726
        $this->assertEquals($f2->get('shortname'), $data->frameworks[0]['name']);
1727
        $this->assertEquals(transform::yesno(true), $data->frameworks[0]['created_or_modified_by_you']);
1728
        $this->assertCount(2, $data->frameworks[0]['competencies']);
1729
        $this->assertEquals($c2a->get('shortname'), $data->frameworks[0]['competencies'][0]['name']);
1730
        $this->assertEquals(transform::yesno(true), $data->frameworks[0]['competencies'][0]['created_or_modified_by_you']);
1731
        $this->assertEquals($c2b->get('shortname'), $data->frameworks[0]['competencies'][1]['name']);
1732
        $this->assertEquals(transform::yesno(true), $data->frameworks[0]['competencies'][1]['created_or_modified_by_you']);
1733
 
1734
        // Check templates for u1 in cat1.
1735
        $data = writer::with_context($cat1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'templates');
1736
        $this->assertCount(1, $data->templates);
1737
        $this->assertEquals($t2->get('shortname'), $data->templates[0]['name']);
1738
        $this->assertEquals(transform::yesno(true), $data->templates[0]['created_or_modified_by_you']);
1739
        $this->assertCount(1, $data->templates[0]['competencies']);
1740
        $this->assertEquals($c2a->get('shortname'), $data->templates[0]['competencies'][0]['name']);
1741
        $this->assertEquals(transform::yesno(true), $data->templates[0]['competencies'][0]['created_or_modified_by_you']);
1742
        $this->assertCount(1, $data->templates[0]['cohorts']);
1743
        $this->assertEquals($c1->name, $data->templates[0]['cohorts'][0]['name']);
1744
        $this->assertEquals(transform::yesno(true), $data->templates[0]['cohorts'][0]['created_or_modified_by_you']);
1745
 
1746
        // Check frameworks for u1 in cat2.
1747
        $data = writer::with_context($cat2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'frameworks');
1748
        $this->assertCount(1, $data->frameworks);
1749
        $this->assertEquals($f3->get('shortname'), $data->frameworks[0]['name']);
1750
        $this->assertEquals(transform::yesno(false), $data->frameworks[0]['created_or_modified_by_you']);
1751
        $this->assertCount(3, $data->frameworks[0]['competencies']);
1752
        $competency = $data->frameworks[0]['competencies'][0];
1753
        $this->assertEquals($c3a->get('shortname'), $competency['name']);
1754
        $this->assertEquals(transform::yesno(false), $competency['created_or_modified_by_you']);
1755
        $this->assertCount(2, $competency['related_competencies']);
1756
        $this->assertEquals($c3b->get('shortname'), $competency['related_competencies'][0]['name']);
1757
        $this->assertEquals(transform::yesno(true), $competency['related_competencies'][0]['created_or_modified_by_you']);
1758
        $this->assertEquals($c3c->get('shortname'), $competency['related_competencies'][1]['name']);
1759
        $this->assertEquals(transform::yesno(true), $competency['related_competencies'][1]['created_or_modified_by_you']);
1760
        $competency = $data->frameworks[0]['competencies'][1];
1761
        $this->assertEquals($c3b->get('shortname'), $competency['name']);
1762
        $this->assertCount(1, $competency['related_competencies']);
1763
        $competency = $data->frameworks[0]['competencies'][2];
1764
        $this->assertEquals($c3c->get('shortname'), $competency['name']);
1765
        $this->assertCount(1, $competency['related_competencies']);
1766
 
1767
        // Check templates for u1 in cat2.
1768
        $data = writer::with_context($cat2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'templates');
1769
        $this->assertEmpty($data->templates);
1770
 
1771
        provider::export_user_data(new approved_contextlist($u2, 'core_competency', [$sysctx->id, $cat1ctx->id, $cat2ctx->id]));
1772
 
1773
        // Check frameworks for u2 in system.
1774
        $data = writer::with_context($sysctx)->get_related_data([get_string('competencies', 'core_competency')], 'frameworks');
1775
        $this->assertCount(1, $data->frameworks);
1776
        $this->assertEquals($f1->get('shortname'), $data->frameworks[0]['name']);
1777
        $this->assertEquals(transform::yesno(false), $data->frameworks[0]['created_or_modified_by_you']);
1778
        $this->assertCount(2, $data->frameworks[0]['competencies']);
1779
        $competency = $data->frameworks[0]['competencies'][0];
1780
        $this->assertEquals($c1a->get('shortname'), $competency['name']);
1781
        $this->assertEquals(transform::yesno(true), $competency['created_or_modified_by_you']);
1782
        $competency = $data->frameworks[0]['competencies'][1];
1783
        $this->assertEquals($c1b->get('shortname'), $competency['name']);
1784
        $this->assertEquals(transform::yesno(true), $competency['created_or_modified_by_you']);
1785
 
1786
        // Check templates for u2 in system.
1787
        $data = writer::with_context($sysctx)->get_related_data([get_string('competencies', 'core_competency')], 'templates');
1788
        $this->assertCount(1, $data->templates);
1789
        $this->assertEquals($t1->get('shortname'), $data->templates[0]['name']);
1790
        $this->assertEquals(transform::yesno(false), $data->templates[0]['created_or_modified_by_you']);
1791
        $this->assertCount(2, $data->templates[0]['competencies']);
1792
        $competency = $data->templates[0]['competencies'][0];
1793
        $this->assertEquals($c1a->get('shortname'), $competency['name']);
1794
        $this->assertEquals(transform::yesno(true), $competency['created_or_modified_by_you']);
1795
        $competency = $data->templates[0]['competencies'][1];
1796
        $this->assertEquals($c2a->get('shortname'), $competency['name']);
1797
        $this->assertEquals(transform::yesno(true), $competency['created_or_modified_by_you']);
1798
        $this->assertCount(1, $data->templates[0]['cohorts']);
1799
        $this->assertEquals($c2->name, $data->templates[0]['cohorts'][0]['name']);
1800
        $this->assertEquals(transform::yesno(true), $data->templates[0]['cohorts'][0]['created_or_modified_by_you']);
1801
 
1802
        // Check frameworks for u2 in cat1.
1803
        $data = writer::with_context($cat1ctx)->get_related_data([get_string('competencies', 'core_competency')], 'frameworks');
1804
        $this->assertCount(1, $data->frameworks);
1805
        $this->assertEquals(transform::yesno(false), $data->frameworks[0]['created_or_modified_by_you']);
1806
        $this->assertCount(2, $data->frameworks[0]['competencies']);
1807
        $competency = $data->frameworks[0]['competencies'][0];
1808
        $this->assertEquals($c2a->get('shortname'), $competency['name']);
1809
        $this->assertEquals(transform::yesno(false), $competency['created_or_modified_by_you']);
1810
        $this->assertCount(1, $competency['related_competencies']);
1811
        $this->assertEquals($c2b->get('shortname'), $competency['related_competencies'][0]['name']);
1812
        $this->assertEquals(transform::yesno(true), $competency['related_competencies'][0]['created_or_modified_by_you']);
1813
 
1814
        // Check templates for u2 in system.
1815
        $data = writer::with_context($cat2ctx)->get_related_data([get_string('competencies', 'core_competency')], 'templates');
1816
        $this->assertCount(1, $data->templates);
1817
        $this->assertEquals($t3->get('shortname'), $data->templates[0]['name']);
1818
        $this->assertEquals(transform::yesno(true), $data->templates[0]['created_or_modified_by_you']);
1819
        $this->assertCount(1, $data->templates[0]['competencies']);
1820
        $competency = $data->templates[0]['competencies'][0];
1821
        $this->assertEquals($c3a->get('shortname'), $competency['name']);
1822
        $this->assertEquals(transform::yesno(true), $competency['created_or_modified_by_you']);
1823
    }
1824
 
11 efrain 1825
    public function test_export_data_for_user_with_related_learning_plans(): void {
1 efrain 1826
        global $DB;
1827
 
1828
        $path = [
1829
            get_string('competencies', 'core_competency'),
1830
            get_string('privacy:path:relatedtome', 'core_competency'),
1831
            get_string('privacy:path:plans', 'core_competency'),
1832
        ];
1833
        $yes = transform::yesno(true);
1834
        $no = transform::yesno(false);
1835
 
1836
        $dg = $this->getDataGenerator();
1837
        $ccg = $dg->get_plugin_generator('core_competency');
1838
 
1839
        $u0 = $dg->create_user();
1840
        $u1 = $dg->create_user();
1841
        $u2 = $dg->create_user();
1842
        $u3 = $dg->create_user();
1843
        $u4 = $dg->create_user();
1844
        $u5 = $dg->create_user();
1845
        $u6 = $dg->create_user();
1846
        $u7 = $dg->create_user();
1847
        $u8 = $dg->create_user();
1848
 
1849
        $dg->role_assign($DB->get_field('role', 'id', ['archetype' => 'manager'], IGNORE_MULTIPLE), $u6->id);
1850
        $u0ctx = \context_user::instance($u0->id);
1851
 
1852
        $f = $ccg->create_framework();
1853
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1854
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1855
        $comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1856
        $comp4 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
1857
 
1858
        $t = $ccg->create_template();
1859
        $tc1 = $ccg->create_template_competency(['competencyid' => $comp1->get('id'), 'templateid' => $t->get('id')]);
1860
        $tc2 = $ccg->create_template_competency(['competencyid' => $comp2->get('id'), 'templateid' => $t->get('id')]);
1861
        $tc3 = $ccg->create_template_competency(['competencyid' => $comp3->get('id'), 'templateid' => $t->get('id')]);
1862
        $tc4 = $ccg->create_template_competency(['competencyid' => $comp4->get('id'), 'templateid' => $t->get('id')]);
1863
 
1864
        $this->setUser($u1);
1865
        $p1 = $ccg->create_plan(['templateid' => $t->get('id'), 'userid' => $u0->id]);
1866
 
1867
        $this->setUser($u2);
1868
        $p2 = $ccg->create_plan(['userid' => $u0->id, 'reviewerid' => $u7->id]);
1869
 
1870
        $this->setUser($u3);
1871
        $p1c1 = $ccg->create_plan_competency(['planid' => $p1->get('id'), 'competencyid' => $comp1->get('id')]);
1872
        $p2c2 = $ccg->create_plan_competency(['planid' => $p2->get('id'), 'competencyid' => $comp2->get('id')]);
1873
        $p2c3 = $ccg->create_plan_competency(['planid' => $p2->get('id'), 'competencyid' => $comp3->get('id')]);
1874
 
1875
        $this->setUser($u4);
1876
        $uc1 = $ccg->create_user_competency(['competencyid' => $comp1->get('id'), 'userid' => $u0->id, 'grade' => 1,
1877
            'proficiency' => true]);
1878
        $uc2 = $ccg->create_user_competency(['competencyid' => $comp2->get('id'), 'userid' => $u0->id, 'grade' => 2,
1879
            'proficiency' => false]);
1880
        $uc3 = $ccg->create_user_competency(['competencyid' => $comp3->get('id'), 'userid' => $u0->id]);
1881
        $uc4 = $ccg->create_user_competency(['competencyid' => $comp4->get('id'), 'userid' => $u0->id, 'reviewerid' => $u5->id]);
1882
 
1883
        $this->setUser($u5);
1884
        $p3 = $ccg->create_plan(['userid' => $u0->id]);
1885
        $p3c1 = $ccg->create_plan_competency(['planid' => $p3->get('id'), 'competencyid' => $comp1->get('id')]);
1886
        $p3c3 = $ccg->create_plan_competency(['planid' => $p3->get('id'), 'competencyid' => $comp3->get('id')]);
1887
 
1888
        // Add comments on plan.
1889
        $this->allow_anyone_to_comment_anywhere();
1890
        $this->setUser($u0);
1891
        $p1->get_comment_object()->add('Hello.');
1892
        $this->setUser($u8);
1893
        $p1->get_comment_object()->add('Hi.');
1894
 
1895
        // Export data for user 1.
1896
        writer::reset();
1897
        provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$u0ctx->id]));
1898
        $planpath = array_merge($path, ["{$p1->get('name')} ({$p1->get('id')})"]);
1899
        $data = writer::with_context($u0ctx)->get_data($planpath);
1900
        $this->assertEquals($p1->get('name'), $data->name);
1901
        $this->assertEquals($yes, $data->created_or_modified_by_you);
1902
 
1903
        // Export data for user 2.
1904
        writer::reset();
1905
        provider::export_user_data(new approved_contextlist($u2, 'core_competency', [$u0ctx->id]));
1906
        $planpath = array_merge($path, ["{$p2->get('name')} ({$p2->get('id')})"]);
1907
        $data = writer::with_context($u0ctx)->get_data($planpath);
1908
        $this->assertEquals($p2->get('name'), $data->name);
1909
        $this->assertEquals($yes, $data->created_or_modified_by_you);
1910
 
1911
        // Export data for user 3.
1912
        writer::reset();
1913
        provider::export_user_data(new approved_contextlist($u3, 'core_competency', [$u0ctx->id]));
1914
        $planpath = array_merge($path, ["{$p1->get('name')} ({$p1->get('id')})"]);
1915
        $data = writer::with_context($u0ctx)->get_data($planpath);
1916
        $this->assertEquals($p1->get('name'), $data->name);
1917
        $this->assertEquals($no, $data->created_or_modified_by_you);
1918
        $this->assertCount(1, $data->competencies);
1919
        $this->assertEquals($comp1->get('shortname'), $data->competencies[0]['name']);
1920
        $this->assertEquals($yes, $data->competencies[0]['created_or_modified_by_you']);
1921
 
1922
        $planpath = array_merge($path, ["{$p2->get('name')} ({$p2->get('id')})"]);
1923
        $data = writer::with_context($u0ctx)->get_data($planpath);
1924
        $this->assertEquals($p2->get('name'), $data->name);
1925
        $this->assertEquals($no, $data->created_or_modified_by_you);
1926
        $competencies = $data->competencies;
1927
        $this->assertCount(2, $competencies);
1928
        $this->assertEquals($comp2->get('shortname'), $competencies[0]['name']);
1929
        $this->assertEquals($yes, $competencies[0]['created_or_modified_by_you']);
1930
        $this->assertEquals($comp3->get('shortname'), $competencies[1]['name']);
1931
        $this->assertEquals($yes, $competencies[1]['created_or_modified_by_you']);
1932
 
1933
        // Export data for user 4.
1934
        writer::reset();
1935
        provider::export_user_data(new approved_contextlist($u4, 'core_competency', [$u0ctx->id]));
1936
        foreach ([$p1, $p2, $p3] as $plan) {
1937
            $planpath = array_merge($path, ["{$p2->get('name')} ({$p2->get('id')})"]);
1938
            $data = writer::with_context($u0ctx)->get_data($planpath);
1939
            $this->assertEmpty($data);
1940
        }
1941
 
1942
        // Export data for user 5.
1943
        writer::reset();
1944
        provider::export_user_data(new approved_contextlist($u5, 'core_competency', [$u0ctx->id]));
1945
        $planpath = array_merge($path, ["{$p3->get('name')} ({$p3->get('id')})"]);
1946
        $data = writer::with_context($u0ctx)->get_data($planpath);
1947
        $this->assertEquals($p3->get('name'), $data->name);
1948
        $this->assertEquals($yes, $data->created_or_modified_by_you);
1949
        $this->assertCount(2, $data->competencies);
1950
        $competency = $data->competencies[0];
1951
        $this->assertEquals($comp1->get('shortname'), $competency['name']);
1952
        $this->assertEquals($yes, $competency['created_or_modified_by_you']);
1953
        $competency = $data->competencies[1];
1954
        $this->assertEquals($comp3->get('shortname'), $competency['name']);
1955
        $this->assertEquals($yes, $competency['created_or_modified_by_you']);
1956
 
1957
        // Do some stuff.
1958
        $this->setUser($u6);
1959
        api::complete_plan($p3);
1960
 
1961
        // Export data for user 6.
1962
        writer::reset();
1963
        provider::export_user_data(new approved_contextlist($u6, 'core_competency', [$u0ctx->id]));
1964
        $planpath = array_merge($path, ["{$p3->get('name')} ({$p3->get('id')})"]);
1965
        $data = writer::with_context($u0ctx)->get_data($planpath);
1966
        $this->assertEquals($p3->get('name'), $data->name);
1967
        $this->assertEquals($yes, $data->created_or_modified_by_you);
1968
        $this->assertCount(2, $data->competencies);
1969
        $competency = $data->competencies[0];
1970
        $this->assertEquals($comp1->get('shortname'), $competency['name']);
1971
        $this->assertArrayNotHasKey('created_or_modified_by_you', $competency);
1972
        $this->assertEquals('A', $competency['rating']['rating']);
1973
        $this->assertEquals($yes, $competency['rating']['created_or_modified_by_you']);
1974
        $competency = $data->competencies[1];
1975
        $this->assertEquals($comp3->get('shortname'), $competency['name']);
1976
        $this->assertArrayNotHasKey('created_or_modified_by_you', $competency);
1977
        $this->assertEquals('-', $competency['rating']['rating']);
1978
        $this->assertEquals($yes, $competency['rating']['created_or_modified_by_you']);
1979
 
1980
        // Export data for user 7.
1981
        writer::reset();
1982
        provider::export_user_data(new approved_contextlist($u7, 'core_competency', [$u0ctx->id]));
1983
        $planpath = array_merge($path, ["{$p2->get('name')} ({$p2->get('id')})"]);
1984
        $data = writer::with_context($u0ctx)->get_data($planpath);
1985
        $this->assertEquals($p2->get('name'), $data->name);
1986
        $this->assertEquals($no, $data->created_or_modified_by_you);
1987
        $this->assertEquals($yes, $data->reviewer_is_you);
1988
 
1989
        // Export data for user 8.
1990
        writer::reset();
1991
        $this->setUser($u8);
1992
        provider::export_user_data(new approved_contextlist($u8, 'core_competency', [$u0ctx->id]));
1993
        $planpath = array_merge($path, ["{$p1->get('name')} ({$p1->get('id')})"]);
1994
        $data = writer::with_context($u0ctx)->get_data($planpath);
1995
        $this->assertEquals($p1->get('name'), $data->name);
1996
        $this->assertEquals($no, $data->created_or_modified_by_you);
1997
        $this->assertEquals($no, $data->reviewer_is_you);
1998
        $commentspath = array_merge($planpath,  [get_string('commentsubcontext', 'core_comment')]);
1999
        $data = writer::with_context($u0ctx)->get_data($commentspath);
2000
        $this->assert_exported_comments(['Hi.'], $data->comments);
2001
    }
2002
 
11 efrain 2003
    public function test_export_data_for_user_with_related_competencies(): void {
1 efrain 2004
        $path = [
2005
            get_string('competencies', 'core_competency'),
2006
            get_string('privacy:path:relatedtome', 'core_competency'),
2007
            get_string('competencies', 'core_competency'),
2008
        ];
2009
        $yes = transform::yesno(true);
2010
        $no = transform::yesno(false);
2011
        $makecomppath = function($comp) use ($path) {
2012
            return array_merge($path, ["{$comp->get('shortname')} ({$comp->get('id')})"]);
2013
        };
2014
 
2015
        $dg = $this->getDataGenerator();
2016
        $ccg = $dg->get_plugin_generator('core_competency');
2017
 
2018
        $u0 = $dg->create_user();
2019
        $u1 = $dg->create_user();
2020
        $u2 = $dg->create_user();
2021
        $u3 = $dg->create_user();
2022
        $u4 = $dg->create_user();
2023
        $u5 = $dg->create_user();
2024
 
2025
        $u0ctx = \context_user::instance($u0->id);
2026
 
2027
        $f = $ccg->create_framework();
2028
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
2029
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
2030
        $comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
2031
        $comp4 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
2032
 
2033
        $this->setUser($u1);
2034
        api::add_evidence($u0->id, $comp1->get('id'), $u0ctx, \core_competency\evidence::ACTION_LOG,
2035
            'privacy:metadata:competency_evidence', 'core_competency');
2036
        api::add_evidence($u0->id, $comp1->get('id'), $u0ctx, \core_competency\evidence::ACTION_LOG,
2037
            'privacy:metadata:competency_evidence', 'core_competency');
2038
        api::add_evidence($u0->id, $comp2->get('id'), $u0ctx, \core_competency\evidence::ACTION_LOG,
2039
            'privacy:metadata:competency_evidence', 'core_competency');
2040
 
2041
        $this->setUser($u2);
2042
        api::add_evidence($u0->id, $comp1->get('id'), $u0ctx, \core_competency\evidence::ACTION_COMPLETE,
2043
            'privacy:metadata:competency_evidence', 'core_competency', null, false, null, null, $u3->id);
2044
 
2045
        $this->setUser($u3);
2046
        api::add_evidence($u0->id, $comp2->get('id'), $u0ctx, \core_competency\evidence::ACTION_OVERRIDE,
2047
            'privacy:metadata:competency_evidence', 'core_competency', null, false, null, 1, $u4->id, 'Ze note');
2048
 
2049
        $this->setUser($u4);
2050
        $uc3 = $ccg->create_user_competency(['userid' => $u0->id, 'competencyid' => $comp3->get('id')]);
2051
        $uc4 = $ccg->create_user_competency(['userid' => $u0->id, 'competencyid' => $comp4->get('id'), 'reviewerid' => $u2->id]);
2052
 
2053
        $this->allow_anyone_to_comment_anywhere();
2054
        $this->setUser($u0);
2055
        $uc3->get_comment_object()->add('...');
2056
        $this->setUser($u5);
2057
        $uc3->get_comment_object()->add('Hello!');
2058
        $uc3->get_comment_object()->add('It\'s me...');
2059
 
2060
        // Export data for user 1.
2061
        writer::reset();
2062
        provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$u0ctx->id]));
2063
        $data = writer::with_context($u0ctx)->get_data($makecomppath($comp1));
2064
        $competency = (array) $data;
2065
        $this->assertEquals($comp1->get('shortname'), $competency['name']);
2066
        $evidence = $competency['evidence'];
2067
        $this->assertCount(2, $evidence);
2068
        $this->assertEquals(get_string('privacy:evidence:action:log', 'core_competency'), $evidence[0]['action']);
2069
        $this->assertEquals('-', $evidence[0]['actionuserid']);
2070
        $this->assertEquals($no, $evidence[0]['acting_user_is_you']);
2071
        $this->assertEquals($yes, $evidence[0]['created_or_modified_by_you']);
2072
        $this->assertEquals(get_string('privacy:evidence:action:log', 'core_competency'), $evidence[1]['action']);
2073
        $this->assertEquals('-', $evidence[1]['actionuserid']);
2074
        $this->assertEquals($no, $evidence[1]['acting_user_is_you']);
2075
        $this->assertEquals($yes, $evidence[1]['created_or_modified_by_you']);
2076
        $data = writer::with_context($u0ctx)->get_data($makecomppath($comp2));
2077
        $competency = (array) $data;
2078
        $this->assertEquals($comp2->get('shortname'), $competency['name']);
2079
        $evidence = $competency['evidence'];
2080
        $this->assertCount(1, $evidence);
2081
        $this->assertEquals(get_string('privacy:evidence:action:log', 'core_competency'), $evidence[0]['action']);
2082
        $this->assertEquals('-', $evidence[0]['actionuserid']);
2083
        $this->assertEquals($no, $evidence[0]['acting_user_is_you']);
2084
        $this->assertEquals($yes, $evidence[0]['created_or_modified_by_you']);
2085
 
2086
        // Export data for user 2.
2087
        writer::reset();
2088
        provider::export_user_data(new approved_contextlist($u2, 'core_competency', [$u0ctx->id]));
2089
        $data = writer::with_context($u0ctx)->get_data($makecomppath($comp1));
2090
        $competency = (array) $data;
2091
        $this->assertEquals($comp1->get('shortname'), $competency['name']);
2092
        $evidence = $competency['evidence'];
2093
        $this->assertCount(1, $evidence);
2094
        $this->assertEquals(get_string('privacy:evidence:action:complete', 'core_competency'), $evidence[0]['action']);
2095
        $this->assertEquals($u3->id, $evidence[0]['actionuserid']);
2096
        $this->assertEquals($no, $evidence[0]['acting_user_is_you']);
2097
        $this->assertEquals($yes, $evidence[0]['created_or_modified_by_you']);
2098
        $data = writer::with_context($u0ctx)->get_data($makecomppath($comp4));
2099
        $competency = (array) $data;
2100
        $this->assertEquals($comp4->get('shortname'), $competency['name']);
2101
        $this->assertCount(0, $competency['evidence']);
2102
        $this->assertEquals($yes, $competency['rating']['reviewer_is_you']);
2103
        $this->assertEquals($no, $competency['rating']['created_or_modified_by_you']);
2104
 
2105
        // Export data for user 3.
2106
        writer::reset();
2107
        provider::export_user_data(new approved_contextlist($u3, 'core_competency', [$u0ctx->id]));
2108
        $data = writer::with_context($u0ctx)->get_data($makecomppath($comp1));
2109
        $competency = (array) $data;
2110
        $this->assertEquals($comp1->get('shortname'), $competency['name']);
2111
        $evidence = $competency['evidence'];
2112
        $this->assertCount(1, $evidence);
2113
        $this->assertEquals($u3->id, $evidence[0]['actionuserid']);
2114
        $this->assertEquals($yes, $evidence[0]['acting_user_is_you']);
2115
        $this->assertEquals($no, $evidence[0]['created_or_modified_by_you']);
2116
        $data = writer::with_context($u0ctx)->get_data($makecomppath($comp2));
2117
        $competency = (array) $data;
2118
        $this->assertEquals($comp2->get('shortname'), $competency['name']);
2119
        $evidence = $competency['evidence'];
2120
        $this->assertCount(1, $evidence);
2121
        $this->assertEquals(get_string('privacy:evidence:action:override', 'core_competency'), $evidence[0]['action']);
2122
        $this->assertEquals($u4->id, $evidence[0]['actionuserid']);
2123
        $this->assertEquals($no, $evidence[0]['acting_user_is_you']);
2124
        $this->assertEquals($yes, $evidence[0]['created_or_modified_by_you']);
2125
 
2126
        // Export data for user 4.
2127
        writer::reset();
2128
        provider::export_user_data(new approved_contextlist($u4, 'core_competency', [$u0ctx->id]));
2129
        $data = writer::with_context($u0ctx)->get_data($makecomppath($comp2));
2130
        $competency = (array) $data;
2131
        $this->assertEquals($comp2->get('shortname'), $competency['name']);
2132
        $this->assertNull($competency['rating']);
2133
        $this->assertCount(1, $competency['evidence']);
2134
        $evidence = $competency['evidence'][0];
2135
        $this->assertEquals($u4->id, $evidence['actionuserid']);
2136
        $this->assertEquals($yes, $evidence['acting_user_is_you']);
2137
        $this->assertEquals($no, $evidence['created_or_modified_by_you']);
2138
        $data = writer::with_context($u0ctx)->get_data($makecomppath($comp3));
2139
        $competency = (array) $data;
2140
        $this->assertEquals($comp3->get('shortname'), $competency['name']);
2141
        $this->assertEquals($no, $competency['rating']['reviewer_is_you']);
2142
        $this->assertEquals($yes, $competency['rating']['created_or_modified_by_you']);
2143
        $this->assertEmpty($competency['evidence']);
2144
        $data = writer::with_context($u0ctx)->get_data($makecomppath($comp4));
2145
        $competency = (array) $data;
2146
        $this->assertEquals($comp4->get('shortname'), $competency['name']);
2147
        $this->assertEquals($no, $competency['rating']['reviewer_is_you']);
2148
        $this->assertEquals($yes, $competency['rating']['created_or_modified_by_you']);
2149
        $this->assertEmpty($competency['evidence']);
2150
 
2151
        // Export data for user 5.
2152
        $this->setUser($u5);
2153
        writer::reset();
2154
        provider::export_user_data(new approved_contextlist($u5, 'core_competency', [$u0ctx->id]));
2155
        $data = writer::with_context($u0ctx)->get_data($makecomppath($comp3));
2156
        $competency = (array) $data;
2157
        $this->assertEquals($comp3->get('shortname'), $competency['name']);
2158
        $data = writer::with_context($u0ctx)->get_data(array_merge($makecomppath($comp3),
2159
            [get_string('commentsubcontext', 'core_comment')]));
2160
        $this->assert_exported_comments(['Hello!', 'It\'s me...'], $data->comments);
2161
    }
2162
 
11 efrain 2163
    public function test_export_data_for_user_with_related_user_evidence(): void {
1 efrain 2164
        $path = [
2165
            get_string('competencies', 'core_competency'),
2166
            get_string('privacy:path:relatedtome', 'core_competency'),
2167
            get_string('privacy:path:userevidence', 'core_competency')
2168
        ];
2169
        $yes = transform::yesno(true);
2170
        $no = transform::yesno(false);
2171
 
2172
        $dg = $this->getDataGenerator();
2173
        $ccg = $dg->get_plugin_generator('core_competency');
2174
 
2175
        $u0 = $dg->create_user();
2176
        $u0b = $dg->create_user();
2177
        $u1 = $dg->create_user();
2178
        $u2 = $dg->create_user();
2179
        $u3 = $dg->create_user();
2180
        $u4 = $dg->create_user();
2181
 
2182
        $u0ctx = \context_user::instance($u0->id);
2183
 
2184
        $f = $ccg->create_framework();
2185
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
2186
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
2187
        $comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
2188
 
2189
        $this->setUser($u0);
2190
        $ue0 = $ccg->create_user_evidence(['userid' => $u0->id]);
2191
 
2192
        $this->setUser($u1);
2193
        $ue1 = $ccg->create_user_evidence(['userid' => $u0->id]);
2194
        $ue1b = $ccg->create_user_evidence(['userid' => $u0b->id]);
2195
 
2196
        $this->setUser($u2);
2197
        $ccg->create_user_evidence_competency(['userevidenceid' => $ue1->get('id'), 'competencyid' => $comp1->get('id')]);
2198
        $ccg->create_user_evidence_competency(['userevidenceid' => $ue1b->get('id'), 'competencyid' => $comp1->get('id')]);
2199
        $ue2 = $ccg->create_user_evidence(['userid' => $u0->id]);
2200
        $ue2b = $ccg->create_user_evidence(['userid' => $u0b->id]);
2201
 
2202
        $this->setUser($u3);
2203
        $ccg->create_user_evidence_competency(['userevidenceid' => $ue2->get('id'), 'competencyid' => $comp2->get('id')]);
2204
        $ccg->create_user_evidence_competency(['userevidenceid' => $ue2->get('id'), 'competencyid' => $comp3->get('id')]);
2205
 
2206
        // Export for user 1.
2207
        provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$u0ctx->id]));
2208
        $uepath = array_merge($path, ["{$ue1->get('name')} ({$ue1->get('id')})"]);
2209
        $data = writer::with_context($u0ctx)->get_data($uepath);
2210
        $this->assertEquals($ue1->get('name'), $data->name);
2211
        $this->assertEquals($yes, $data->created_or_modified_by_you);
2212
        $this->assertEmpty($data->competencies);
2213
 
2214
        // Export for user 2.
2215
        provider::export_user_data(new approved_contextlist($u2, 'core_competency', [$u0ctx->id]));
2216
        $uepath = array_merge($path, ["{$ue1->get('name')} ({$ue1->get('id')})"]);
2217
        $data = writer::with_context($u0ctx)->get_data($uepath);
2218
        $this->assertEquals($ue1->get('name'), $data->name);
2219
        $this->assertEquals($no, $data->created_or_modified_by_you);
2220
        $this->assertCount(1, $data->competencies);
2221
        $competency = $data->competencies[0];
2222
        $this->assertEquals($comp1->get('shortname'), $competency['name']);
2223
        $this->assertEquals($yes, $competency['created_or_modified_by_you']);
2224
 
2225
        $uepath = array_merge($path, ["{$ue2->get('name')} ({$ue2->get('id')})"]);
2226
        $data = writer::with_context($u0ctx)->get_data($uepath);
2227
        $this->assertEquals($ue2->get('name'), $data->name);
2228
        $this->assertEquals($yes, $data->created_or_modified_by_you);
2229
        $this->assertEmpty($data->competencies);
2230
 
2231
        // Export for user 3.
2232
        provider::export_user_data(new approved_contextlist($u3, 'core_competency', [$u0ctx->id]));
2233
        $uepath = array_merge($path, ["{$ue2->get('name')} ({$ue2->get('id')})"]);
2234
        $evidence = writer::with_context($u0ctx)->get_data($uepath);
2235
        $this->assertEquals($ue2->get('name'), $evidence->name);
2236
        $this->assertEquals($no, $evidence->created_or_modified_by_you);
2237
        $this->assertCount(2, $evidence->competencies);
2238
        $competency = $evidence->competencies[0];
2239
        $this->assertEquals($comp2->get('shortname'), $competency['name']);
2240
        $this->assertEquals($yes, $competency['created_or_modified_by_you']);
2241
        $competency = $evidence->competencies[1];
2242
        $this->assertEquals($comp3->get('shortname'), $competency['name']);
2243
        $this->assertEquals($yes, $competency['created_or_modified_by_you']);
2244
    }
2245
 
11 efrain 2246
    public function test_export_data_for_user_about_their_learning_plans(): void {
1 efrain 2247
        $this->setAdminUser();
2248
        $dg = $this->getDataGenerator();
2249
        $ccg = $dg->get_plugin_generator('core_competency');
2250
        $path = [get_string('competencies', 'core_competency'), get_string('privacy:path:plans', 'core_competency')];
2251
        $yes = transform::yesno(true);
2252
        $no = transform::yesno(false);
2253
 
2254
        $u1 = $dg->create_user();
2255
        $u2 = $dg->create_user();
2256
        $u3 = $dg->create_user();
2257
        $u1ctx = \context_user::instance($u1->id);
2258
        $u2ctx = \context_user::instance($u2->id);
2259
 
2260
        $f = $ccg->create_framework();
2261
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
2262
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
2263
        $comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
2264
        $comp4 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
2265
 
2266
        $t = $ccg->create_template();
2267
        $tc2 = $ccg->create_template_competency(['competencyid' => $comp2->get('id'), 'templateid' => $t->get('id')]);
2268
        $tc3 = $ccg->create_template_competency(['competencyid' => $comp3->get('id'), 'templateid' => $t->get('id')]);
2269
        $tc4 = $ccg->create_template_competency(['competencyid' => $comp4->get('id'), 'templateid' => $t->get('id')]);
2270
 
2271
        $p1a = $ccg->create_plan(['userid' => $u1->id, 'templateid' => $t->get('id'),
2272
            'status' => \core_competency\plan::STATUS_WAITING_FOR_REVIEW]);
2273
        $p1b = $ccg->create_plan(['userid' => $u1->id]);
2274
        $ccg->create_plan_competency(['planid' => $p1b->get('id'), 'competencyid' => $comp1->get('id')]);
2275
        $ccg->create_plan_competency(['planid' => $p1b->get('id'), 'competencyid' => $comp2->get('id')]);
2276
        $ccg->create_plan_competency(['planid' => $p1b->get('id'), 'competencyid' => $comp4->get('id')]);
2277
        $p1c = $ccg->create_plan(['userid' => $u1->id]);
2278
        $ccg->create_plan_competency(['planid' => $p1c->get('id'), 'competencyid' => $comp1->get('id')]);
2279
        $ccg->create_plan_competency(['planid' => $p1c->get('id'), 'competencyid' => $comp3->get('id')]);
2280
        $ccg->create_plan_competency(['planid' => $p1c->get('id'), 'competencyid' => $comp4->get('id')]);
2281
        $p1d = $ccg->create_plan(['userid' => $u1->id]);
2282
 
2283
        $p2a = $ccg->create_plan(['userid' => $u2->id]);
2284
        $ccg->create_plan_competency(['planid' => $p2a->get('id'), 'competencyid' => $comp1->get('id')]);
2285
        $ccg->create_plan_competency(['planid' => $p2a->get('id'), 'competencyid' => $comp2->get('id')]);
2286
 
2287
        $uc1a = $ccg->create_user_competency(['competencyid' => $comp1->get('id'), 'userid' => $u1->id,
2288
            'grade' => 2, 'proficiency' => false]);
2289
        $uc1b = $ccg->create_user_competency(['competencyid' => $comp2->get('id'), 'userid' => $u1->id,
2290
            'grade' => 3, 'proficiency' => false]);
2291
        $uc1c = $ccg->create_user_competency(['competencyid' => $comp3->get('id'), 'userid' => $u1->id]);
2292
 
2293
        // Add comments on plan.
2294
        $this->allow_anyone_to_comment_anywhere();
2295
        $this->setUser($u1);
2296
        $p1a->get_comment_object()->add('Hello.');
2297
        $p1a->get_comment_object()->add('It\'s me.');
2298
        $this->setUser($u3);
2299
        $p1a->get_comment_object()->add('After all these years...');
2300
 
2301
        // Complete the plan to create archiving, and modify the user competency again.
2302
        api::complete_plan($p1c);
2303
        $uc1a->set('grade', 1);
2304
        $uc1a->set('proficiency', true);
2305
        $uc1a->update();
2306
 
2307
        // Export user data in both contexts.
2308
        provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$u1ctx->id, $u2ctx->id]));
2309
 
2310
        // This plan is based off a template.
2311
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p1a->get('name')} ({$p1a->get('id')})"]));
2312
        $this->assertNotEmpty($data);
2313
        $this->assertEquals($p1a->get('name'), $data->name);
2314
        $this->assertEquals($p1a->get_statusname(), $data->status);
2315
        $this->assertCount(3, $data->competencies);
2316
        $comp = $data->competencies[0];
2317
        $this->assertEquals($comp2->get('shortname'), $comp['name']);
2318
        $this->assertEquals('C', $comp['rating']['rating']);
2319
        $comp = $data->competencies[1];
2320
        $this->assertEquals($comp3->get('shortname'), $comp['name']);
2321
        $this->assertEquals('-', $comp['rating']['rating']);
2322
        $comp = $data->competencies[2];
2323
        $this->assertEquals($comp4->get('shortname'), $comp['name']);
2324
        $this->assertNull($comp['rating']);
2325
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p1a->get('name')} ({$p1a->get('id')})",
2326
            get_string('commentsubcontext', 'core_comment')]));
2327
        $this->assert_exported_comments(['Hello.', 'It\'s me.', 'After all these years...'], $data->comments);
2328
 
2329
        // This plan is manually created.
2330
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p1b->get('name')} ({$p1b->get('id')})"]));
2331
        $this->assertNotEmpty($data);
2332
        $this->assertEquals($p1b->get('name'), $data->name);
2333
        $this->assertCount(3, $data->competencies);
2334
        $comp = $data->competencies[0];
2335
        $this->assertEquals($comp1->get('shortname'), $comp['name']);
2336
        $this->assertEquals('A', $comp['rating']['rating']);
2337
        $comp = $data->competencies[1];
2338
        $this->assertEquals($comp2->get('shortname'), $comp['name']);
2339
        $this->assertEquals('C', $comp['rating']['rating']);
2340
        $comp = $data->competencies[2];
2341
        $this->assertEquals($comp4->get('shortname'), $comp['name']);
2342
        $this->assertNull($comp['rating']);
2343
 
2344
        // This plan is complete.
2345
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p1c->get('name')} ({$p1c->get('id')})"]));
2346
        $this->assertNotEmpty($data);
2347
        $this->assertEquals($p1c->get('name'), $data->name);
2348
        $this->assertCount(3, $data->competencies);
2349
        $comp = $data->competencies[0];
2350
        $this->assertEquals($comp1->get('shortname'), $comp['name']);
2351
        $this->assertEquals('B', $comp['rating']['rating']);
2352
        $comp = $data->competencies[1];
2353
        $this->assertEquals($comp3->get('shortname'), $comp['name']);
2354
        $this->assertEquals('-', $comp['rating']['rating']);
2355
        $comp = $data->competencies[2];
2356
        $this->assertEquals($comp4->get('shortname'), $comp['name']);
2357
        $this->assertEquals('-', $comp['rating']['rating']);
2358
 
2359
        // This plan is empty.
2360
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p1d->get('name')} ({$p1d->get('id')})"]));
2361
        $this->assertNotEmpty($data);
2362
        $this->assertEquals($p1d->get('name'), $data->name);
2363
        $this->assertEquals($p1d->get_statusname(), $data->status);
2364
        $this->assertEmpty($data->competencies);
2365
 
2366
        // Confirm that we do not get export what we shouldn't.
2367
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p2a->get('name')} ({$p2a->get('id')})"]));
2368
        $this->assertEmpty($data);
2369
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$p1a->get('name')} ({$p1a->get('id')})"]));
2370
        $this->assertEmpty($data);
2371
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$p1b->get('name')} ({$p1b->get('id')})"]));
2372
        $this->assertEmpty($data);
2373
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$p1c->get('name')} ({$p1c->get('id')})"]));
2374
        $this->assertEmpty($data);
2375
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$p2a->get('name')} ({$p2a->get('id')})"]));
2376
        $this->assertEmpty($data);
2377
 
2378
        // Export for user 2.
2379
        writer::reset();
2380
        provider::export_user_data(new approved_contextlist($u2, 'core_competency', [$u1ctx->id, $u2ctx->id]));
2381
 
2382
        // Validate the basic plan.
2383
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$p2a->get('name')} ({$p2a->get('id')})"]));
2384
        $this->assertNotEmpty($data);
2385
        $this->assertEquals($p2a->get('name'), $data->name);
2386
        $this->assertCount(2, $data->competencies);
2387
        $comp = $data->competencies[0];
2388
        $this->assertEquals($comp1->get('shortname'), $comp['name']);
2389
        $this->assertNull($comp['rating']);
2390
        $comp = $data->competencies[1];
2391
        $this->assertEquals($comp2->get('shortname'), $comp['name']);
2392
        $this->assertNull($comp['rating']);
2393
 
2394
        // Confirm that we do not get export what we shouldn't.
2395
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$p1a->get('name')} ({$p1a->get('id')})"]));
2396
        $this->assertEmpty($data);
2397
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$p1b->get('name')} ({$p1b->get('id')})"]));
2398
        $this->assertEmpty($data);
2399
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$p1c->get('name')} ({$p1c->get('id')})"]));
2400
        $this->assertEmpty($data);
2401
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p1a->get('name')} ({$p1a->get('id')})"]));
2402
        $this->assertEmpty($data);
2403
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p1b->get('name')} ({$p1b->get('id')})"]));
2404
        $this->assertEmpty($data);
2405
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$p1c->get('name')} ({$p1c->get('id')})"]));
2406
        $this->assertEmpty($data);
2407
    }
2408
 
11 efrain 2409
    public function test_export_data_for_user_about_their_competencies(): void {
1 efrain 2410
        $dg = $this->getDataGenerator();
2411
        $ccg = $dg->get_plugin_generator('core_competency');
2412
        $path = [get_string('competencies', 'core_competency'), get_string('competencies', 'core_competency')];
2413
        $no = transform::yesno(false);
2414
 
2415
        $u1 = $dg->create_user();
2416
        $u2 = $dg->create_user();
2417
        $u3 = $dg->create_user();
2418
        $u1ctx = \context_user::instance($u1->id);
2419
        $u2ctx = \context_user::instance($u2->id);
2420
 
2421
        $f = $ccg->create_framework();
2422
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
2423
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
2424
        $comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
2425
 
2426
        $uc1a = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp1->get('id')]);
2427
        $uc1b = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp2->get('id'),
2428
            'grade' => 2, 'proficiency' => false]);
2429
        $uc1c = $ccg->create_user_competency(['userid' => $u1->id, 'competencyid' => $comp3->get('id')]);
2430
        $e1a1 = $ccg->create_evidence(['usercompetencyid' => $uc1a->get('id'),
2431
            'action' => \core_competency\evidence::ACTION_COMPLETE, 'grade' => 1]);
2432
        $e1a2 = $ccg->create_evidence(['usercompetencyid' => $uc1a->get('id'), 'note' => 'Not too bad']);
2433
        $e1b1 = $ccg->create_evidence(['usercompetencyid' => $uc1b->get('id'), 'url' => 'https://example.com']);
2434
 
2435
        $uc2a = $ccg->create_user_competency(['userid' => $u2->id, 'competencyid' => $comp1->get('id')]);
2436
        $uc2b = $ccg->create_user_competency(['userid' => $u2->id, 'competencyid' => $comp2->get('id')]);
2437
        $e2a1 = $ccg->create_evidence(['usercompetencyid' => $uc2b->get('id'), 'note' => 'A']);
2438
        $e2a2 = $ccg->create_evidence(['usercompetencyid' => $uc2b->get('id'), 'note' => 'B']);
2439
        $e2a3 = $ccg->create_evidence(['usercompetencyid' => $uc2b->get('id'), 'note' => 'C']);
2440
 
2441
        // Add comments on competency.
2442
        $this->allow_anyone_to_comment_anywhere();
2443
        $this->setUser($u1);
2444
        $uc1a->get_comment_object()->add('Hello.');
2445
        $uc1a->get_comment_object()->add('It\'s me.');
2446
        $this->setUser($u3);
2447
        $uc1a->get_comment_object()->add('After all these years...');
2448
 
2449
        // Export for user 1 in both contexts.
2450
        provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$u1ctx->id, $u2ctx->id]));
2451
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$comp1->get('shortname')} ({$comp1->get('id')})"]));
2452
        $this->assertNotEmpty($data);
2453
        $this->assertEquals($comp1->get('shortname'), $data->name);
2454
        $this->assertEquals('-', $data->rating['rating']);
2455
        $this->assertCount(2, $data->evidence);
2456
        $this->assertEquals(get_string('privacy:evidence:action:complete', 'core_competency'), $data->evidence[1]['action']);
2457
        $this->assertEquals('Not too bad', $data->evidence[0]['note']);
2458
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$comp1->get('shortname')} ({$comp1->get('id')})",
2459
            get_string('commentsubcontext', 'core_comment')]));
2460
        $this->assert_exported_comments(['Hello.', 'It\'s me.', 'After all these years...'], $data->comments);
2461
 
2462
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$comp2->get('shortname')} ({$comp2->get('id')})"]));
2463
        $this->assertNotEmpty($data);
2464
        $this->assertEquals($comp2->get('shortname'), $data->name);
2465
        $this->assertEquals('B', $data->rating['rating']);
2466
        $this->assertEquals($no, $data->rating['proficient']);
2467
        $this->assertCount(1, $data->evidence);
2468
        $this->assertEquals('https://example.com', $data->evidence[0]['url']);
2469
 
2470
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$comp3->get('shortname')} ({$comp3->get('id')})"]));
2471
        $this->assertNotEmpty($data);
2472
        $this->assertEquals($comp3->get('shortname'), $data->name);
2473
        $this->assertEquals('-', $data->rating['rating']);
2474
        $this->assertEquals('-', $data->rating['proficient']);
2475
        $this->assertEmpty($data->evidence);
2476
 
2477
        // We don't know anything about user 2.
2478
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$comp1->get('shortname')} ({$comp1->get('id')})"]));
2479
        $this->assertEmpty($data);
2480
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$comp2->get('shortname')} ({$comp2->get('id')})"]));
2481
        $this->assertEmpty($data);
2482
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$comp3->get('shortname')} ({$comp3->get('id')})"]));
2483
        $this->assertEmpty($data);
2484
 
2485
        // Export for user 2 in both contexts.
2486
        writer::reset();
2487
        provider::export_user_data(new approved_contextlist($u2, 'core_competency', [$u1ctx->id, $u2ctx->id]));
2488
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$comp1->get('shortname')} ({$comp1->get('id')})"]));
2489
        $this->assertNotEmpty($data);
2490
        $this->assertEquals($comp1->get('shortname'), $data->name);
2491
        $this->assertEquals('-', $data->rating['rating']);
2492
        $this->assertCount(0, $data->evidence);
2493
 
2494
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$comp2->get('shortname')} ({$comp2->get('id')})"]));
2495
        $this->assertNotEmpty($data);
2496
        $this->assertEquals($comp2->get('shortname'), $data->name);
2497
        $this->assertEquals('-', $data->rating['rating']);
2498
        $this->assertCount(3, $data->evidence);
2499
        $this->assertEquals('C', $data->evidence[0]['note']);
2500
        $this->assertEquals('B', $data->evidence[1]['note']);
2501
        $this->assertEquals('A', $data->evidence[2]['note']);
2502
 
2503
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$comp3->get('shortname')} ({$comp3->get('id')})"]));
2504
        $this->assertEmpty($data);
2505
 
2506
        // We don't know anything about user 1.
2507
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$comp1->get('shortname')} ({$comp1->get('id')})"]));
2508
        $this->assertEmpty($data);
2509
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$comp2->get('shortname')} ({$comp2->get('id')})"]));
2510
        $this->assertEmpty($data);
2511
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$comp3->get('shortname')} ({$comp3->get('id')})"]));
2512
        $this->assertEmpty($data);
2513
    }
2514
 
11 efrain 2515
    public function test_export_data_for_user_about_their_user_evidence(): void {
1 efrain 2516
        $dg = $this->getDataGenerator();
2517
        $ccg = $dg->get_plugin_generator('core_competency');
2518
        $path = [get_string('competencies', 'core_competency'), get_string('privacy:path:userevidence', 'core_competency')];
2519
 
2520
        $u1 = $dg->create_user();
2521
        $u2 = $dg->create_user();
2522
        $u3 = $dg->create_user();
2523
 
2524
        $u1ctx = \context_user::instance($u1->id);
2525
        $u2ctx = \context_user::instance($u2->id);
2526
        $u3ctx = \context_user::instance($u3->id);
2527
 
2528
        $f = $ccg->create_framework();
2529
        $comp1 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
2530
        $comp2 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
2531
        $comp3 = $ccg->create_competency(['competencyframeworkid' => $f->get('id')]);
2532
 
2533
        $ue1a = $ccg->create_user_evidence(['userid' => $u1->id]);
2534
        $ue1b = $ccg->create_user_evidence(['userid' => $u1->id]);
2535
        $ue2a = $ccg->create_user_evidence(['userid' => $u2->id]);
2536
        $ue3a = $ccg->create_user_evidence(['userid' => $u3->id]);
2537
        $ccg->create_user_evidence_competency(['userevidenceid' => $ue1a->get('id'), 'competencyid' => $comp1->get('id')]);
2538
        $ccg->create_user_evidence_competency(['userevidenceid' => $ue1a->get('id'), 'competencyid' => $comp2->get('id')]);
2539
        $ccg->create_user_evidence_competency(['userevidenceid' => $ue1b->get('id'), 'competencyid' => $comp2->get('id')]);
2540
        $ccg->create_user_evidence_competency(['userevidenceid' => $ue2a->get('id'), 'competencyid' => $comp2->get('id')]);
2541
 
2542
        // Export for user 1 in two contexts to make sure.
2543
        provider::export_user_data(new approved_contextlist($u1, 'core_competency', [$u1ctx->id, $u2ctx->id]));
2544
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$ue1a->get('name')} ({$ue1a->get('id')})"]));
2545
        $this->assertNotEmpty($data);
2546
        $this->assertEquals($ue1a->get('name'), $data->name);
2547
        $this->assertCount(2, $data->competencies);
2548
        $this->assertEquals($comp1->get('shortname'), $data->competencies[0]['name']);
2549
        $this->assertEquals($comp2->get('shortname'), $data->competencies[1]['name']);
2550
 
2551
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$ue1b->get('name')} ({$ue1b->get('id')})"]));
2552
        $this->assertNotEmpty($data);
2553
        $this->assertEquals($ue1b->get('name'), $data->name);
2554
        $this->assertCount(1, $data->competencies);
2555
        $this->assertEquals($comp2->get('shortname'), $data->competencies[0]['name']);
2556
 
2557
        // We should not have access to other's info.
2558
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$ue2a->get('name')} ({$ue2a->get('id')})"]));
2559
        $this->assertEmpty($data);
2560
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$ue2a->get('name')} ({$ue2a->get('id')})"]));
2561
        $this->assertEmpty($data);
2562
 
2563
        // Export for user 2 in two contexts to make sure.
2564
        writer::reset();
2565
        provider::export_user_data(new approved_contextlist($u2, 'core_competency', [$u2ctx->id, $u1ctx->id]));
2566
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$ue2a->get('name')} ({$ue2a->get('id')})"]));
2567
        $this->assertNotEmpty($data);
2568
        $this->assertEquals($ue2a->get('name'), $data->name);
2569
        $this->assertCount(1, $data->competencies);
2570
        $this->assertEquals($comp2->get('shortname'), $data->competencies[0]['name']);
2571
 
2572
        // We should not have access to other's info.
2573
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$ue1a->get('name')} ({$ue1a->get('id')})"]));
2574
        $this->assertEmpty($data);
2575
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$ue1a->get('name')} ({$ue1a->get('id')})"]));
2576
        $this->assertEmpty($data);
2577
        $data = writer::with_context($u1ctx)->get_data(array_merge($path, ["{$ue1b->get('name')} ({$ue1b->get('id')})"]));
2578
        $this->assertEmpty($data);
2579
        $data = writer::with_context($u2ctx)->get_data(array_merge($path, ["{$ue1b->get('name')} ({$ue1b->get('id')})"]));
2580
        $this->assertEmpty($data);
2581
 
2582
        // Export for user 3.
2583
        writer::reset();
2584
        provider::export_user_data(new approved_contextlist($u3, 'core_competency', [$u3ctx->id]));
2585
        $data = writer::with_context($u3ctx)->get_data(array_merge($path, ["{$ue3a->get('name')} ({$ue3a->get('id')})"]));
2586
        $this->assertNotEmpty($data);
2587
        $this->assertEquals($ue3a->get('name'), $data->name);
2588
        $this->assertCount(0, $data->competencies);
2589
    }
2590
 
2591
    /**
2592
     * Helps testing comments on plans.
2593
     *
2594
     * @return void
2595
     */
2596
    protected function allow_anyone_to_comment_anywhere() {
2597
        global $DB;
2598
        $roleid = $DB->get_field('role', 'id', ['shortname' => 'user'], MUST_EXIST);
2599
        assign_capability('moodle/competency:plancomment', CAP_ALLOW, $roleid, SYSCONTEXTID, true);
2600
        assign_capability('moodle/competency:planmanage', CAP_ALLOW, $roleid, SYSCONTEXTID, true);
2601
        assign_capability('moodle/competency:planmanagedraft', CAP_ALLOW, $roleid, SYSCONTEXTID, true);
2602
        assign_capability('moodle/competency:usercompetencycomment', CAP_ALLOW, $roleid, SYSCONTEXTID, true);
2603
        assign_capability('moodle/competency:usercompetencyview', CAP_ALLOW, $roleid, SYSCONTEXTID, true);
2604
        accesslib_clear_all_caches_for_unit_testing();
2605
    }
2606
 
2607
    /**
2608
     * Assert the content of a contextlist.
2609
     *
2610
     * @param contextlist $contextlist The list.
2611
     * @param array $expectedcontextsorids The expected content.
2612
     * @return void
2613
     */
2614
    protected function assert_contextlist(contextlist $contextlist, $expectedcontextsorids) {
2615
        $contextids = array_unique($contextlist->get_contextids());
2616
        $expectedids = array_unique(array_map(function($item) {
2617
            return $item instanceof \context ? $item->id : $id;
2618
        }, $expectedcontextsorids));
2619
        $this->assert_array_match($expectedids, $contextids);
2620
    }
2621
 
2622
    /**
2623
     * Assert that array match.
2624
     *
2625
     * @param array $array1 The first one.
2626
     * @param array $array2 The second one.
2627
     * @return void
2628
     */
2629
    protected function assert_array_match($array1, $array2) {
2630
        $array1 = (array) (object) $array1;
2631
        $array2 = (array) (object) $array2;
2632
        sort($array1);
2633
        sort($array2);
2634
        $this->assertEquals($array1, $array2);
2635
    }
2636
 
2637
    /**
2638
     * Assert the content of exported comments.
2639
     *
2640
     * @param array $expected The content of the comments.
2641
     * @param array $comments The exported comments.
2642
     * @return void
2643
     */
2644
    protected function assert_exported_comments($expected, $comments) {
2645
        $this->assertCount(count($expected), $comments);
2646
        $contents = array_map(function($comment) {
2647
            return strip_tags($comment->content);
2648
        }, $comments);
2649
        $this->assert_array_match($expected, $contents);
2650
    }
2651
 
2652
    /**
2653
     * Assert that a comment object has comments.
2654
     *
2655
     * @param \comment $comment The comment object.
2656
     * @return void
2657
     */
2658
    protected function assert_has_comments(\comment $comment) {
2659
        global $DB;
2660
        $this->assertTrue($DB->record_exists('comments', [
2661
            'contextid' => $comment->get_context()->id,
2662
            'component' => $comment->get_component(),
2663
            'commentarea' => $comment->get_commentarea(),
2664
            'itemid' => $comment->get_itemid()
2665
        ]));
2666
    }
2667
 
2668
    /**
2669
     * Assert that a comment object does not have any comments.
2670
     *
2671
     * @param \comment $comment The comment object.
2672
     * @return void
2673
     */
2674
    protected function assert_has_no_comments(\comment $comment) {
2675
        global $DB;
2676
        $this->assertFalse($DB->record_exists('comments', [
2677
            'contextid' => $comment->get_context()->id,
2678
            'component' => $comment->get_component(),
2679
            'commentarea' => $comment->get_commentarea(),
2680
            'itemid' => $comment->get_itemid()
2681
        ]));
2682
    }
2683
 
2684
    /**
2685
     * Get the count of comments.
2686
     *
2687
     * @param \comment $comment The comment object.
2688
     * @param int $userid The user ID.
2689
     * @return int
2690
     */
2691
    protected function get_comments_count(\comment $comment, $userid = null) {
2692
        global $DB;
2693
        $params = [
2694
            'contextid' => $comment->get_context()->id,
2695
            'component' => $comment->get_component(),
2696
            'commentarea' => $comment->get_commentarea(),
2697
            'itemid' => $comment->get_itemid(),
2698
        ];
2699
        if ($userid) {
2700
            $params['userid'] = $userid;
2701
        }
2702
        return $DB->count_records('comments', $params);
2703
    }
2704
}