MDL-68974 admin: Unit tests for loginas
[moodle.git] / lib / tests / accesslib_has_capability_test.php
CommitLineData
0616f045
AN
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 * A collection of tests for accesslib::has_capability().
19 *
20 * @package core
21 * @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23 */
24
25defined('MOODLE_INTERNAL') || die();
26
27/**
28 * Unit tests tests for has_capability.
29 *
30 * @package core
31 * @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
32 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
33 */
34class accesslib_has_capability_testcase extends \advanced_testcase {
35
36 /**
37 * Unit tests to check the operation of locked contexts.
38 *
39 * Note: We only check the admin user here.
40 * If the admin cannot do it, then no-one can.
41 *
42 * @dataProvider locked_context_provider
43 * @param string[] $lockedcontexts The list of contexts, by name, to mark as locked
44 * @param string[] $blocked The list of contexts which will be 'blocked' by has_capability
45 */
46 public function test_locked_contexts($lockedcontexts, $blocked) {
47 global $DB;
48
49 $this->resetAfterTest();
50 set_config('contextlocking', 1);
51
52 $generator = $this->getDataGenerator();
53 $otheruser = $generator->create_user();
54
55 // / (system)
56 // /Cat1
57 // /Cat1/Block
58 // /Cat1/Course1
59 // /Cat1/Course1/Block
60 // /Cat1/Course2
61 // /Cat1/Course2/Block
62 // /Cat1/Cat1a
63 // /Cat1/Cat1a/Block
64 // /Cat1/Cat1a/Course1
65 // /Cat1/Cat1a/Course1/Block
66 // /Cat1/Cat1a/Course2
67 // /Cat1/Cat1a/Course2/Block
68 // /Cat1/Cat1b
69 // /Cat1/Cat1b/Block
70 // /Cat1/Cat1b/Course1
71 // /Cat1/Cat1b/Course1/Block
72 // /Cat1/Cat1b/Course2
73 // /Cat1/Cat1b/Course2/Block
74 // /Cat2
75 // /Cat2/Block
76 // /Cat2/Course1
77 // /Cat2/Course1/Block
78 // /Cat2/Course2
79 // /Cat2/Course2/Block
80 // /Cat2/Cat2a
81 // /Cat2/Cat2a/Block
82 // /Cat2/Cat2a/Course1
83 // /Cat2/Cat2a/Course1/Block
84 // /Cat2/Cat2a/Course2
85 // /Cat2/Cat2a/Course2/Block
86 // /Cat2/Cat2b
87 // /Cat2/Cat2b/Block
88 // /Cat2/Cat2b/Course1
89 // /Cat2/Cat2b/Course1/Block
90 // /Cat2/Cat2b/Course2
91 // /Cat2/Cat2b/Course2/Block
92
93 $adminuser = \core_user::get_user_by_username('admin');
94 $contexts = (object) [
95 'system' => \context_system::instance(),
96 'adminuser' => \context_user::instance($adminuser->id),
97 ];
98
99 $cat1 = $generator->create_category();
100 $cat1a = $generator->create_category(['parent' => $cat1->id]);
101 $cat1b = $generator->create_category(['parent' => $cat1->id]);
102
103 $contexts->cat1 = \context_coursecat::instance($cat1->id);
104 $contexts->cat1a = \context_coursecat::instance($cat1a->id);
105 $contexts->cat1b = \context_coursecat::instance($cat1b->id);
106
107 $cat1course1 = $generator->create_course(['category' => $cat1->id]);
108 $cat1course2 = $generator->create_course(['category' => $cat1->id]);
109 $cat1acourse1 = $generator->create_course(['category' => $cat1a->id]);
110 $cat1acourse2 = $generator->create_course(['category' => $cat1a->id]);
111 $cat1bcourse1 = $generator->create_course(['category' => $cat1b->id]);
112 $cat1bcourse2 = $generator->create_course(['category' => $cat1b->id]);
113
114 $contexts->cat1course1 = \context_course::instance($cat1course1->id);
115 $contexts->cat1acourse1 = \context_course::instance($cat1acourse1->id);
116 $contexts->cat1bcourse1 = \context_course::instance($cat1bcourse1->id);
117 $contexts->cat1course2 = \context_course::instance($cat1course2->id);
118 $contexts->cat1acourse2 = \context_course::instance($cat1acourse2->id);
119 $contexts->cat1bcourse2 = \context_course::instance($cat1bcourse2->id);
120
121 $cat1block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1->id]);
122 $cat1ablock = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1a->id]);
123 $cat1bblock = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1b->id]);
124 $cat1course1block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1course1->id]);
125 $cat1course2block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1course2->id]);
126 $cat1acourse1block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1acourse1->id]);
127 $cat1acourse2block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1acourse2->id]);
128 $cat1bcourse1block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1bcourse1->id]);
129 $cat1bcourse2block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1bcourse2->id]);
130
131 $contexts->cat1block = \context_block::instance($cat1block->id);
132 $contexts->cat1ablock = \context_block::instance($cat1ablock->id);
133 $contexts->cat1bblock = \context_block::instance($cat1bblock->id);
134 $contexts->cat1course1block = \context_block::instance($cat1course1block->id);
135 $contexts->cat1course2block = \context_block::instance($cat1course2block->id);
136 $contexts->cat1acourse1block = \context_block::instance($cat1acourse1block->id);
137 $contexts->cat1acourse2block = \context_block::instance($cat1acourse2block->id);
138 $contexts->cat1bcourse1block = \context_block::instance($cat1bcourse1block->id);
139 $contexts->cat1bcourse2block = \context_block::instance($cat1bcourse2block->id);
140
141 $writecapability = 'moodle/block:edit';
142 $readcapability = 'moodle/block:view';
143 $managecapability = 'moodle/site:managecontextlocks';
144
145 $this->setAdminUser();
146 $totest = (array) $contexts;
147 foreach ($totest as $context) {
148 $this->assertTrue(has_capability($writecapability, $context));
149 $this->assertTrue(has_capability($readcapability, $context));
150 $this->assertTrue(has_capability($managecapability, $context));
151 }
152
153 // Lock the specified contexts.
154 foreach ($lockedcontexts as $contextname => $value) {
155 $contexts->$contextname->set_locked($value);
156 }
157
158 // All read capabilities should remain.
159 foreach ((array) $contexts as $context) {
160 $this->assertTrue(has_capability($readcapability, $context));
161 $this->assertTrue(has_capability($managecapability, $context));
162 }
163
164 // Check writes.
165 foreach ((array) $contexts as $contextname => $context) {
166 if (false !== array_search($contextname, $blocked)) {
167 $this->assertFalse(has_capability($writecapability, $context));
168 } else {
169 $this->assertTrue(has_capability($writecapability, $context));
170 }
171 }
172
173 $this->setUser($otheruser);
174 // Check writes.
175 foreach ((array) $contexts as $contextname => $context) {
176 $this->assertFalse(has_capability($writecapability, $context));
177 }
178
179 // Disable the contextlocking experimental feature.
180 set_config('contextlocking', 0);
181
bb41db9c
AN
182 $this->setAdminUser();
183 // All read capabilities should remain.
184 foreach ((array) $contexts as $context) {
185 $this->assertTrue(has_capability($readcapability, $context));
186 $this->assertTrue(has_capability($managecapability, $context));
187 }
188
189 // All write capabilities should now be present again.
190 foreach ((array) $contexts as $contextname => $context) {
191 $this->assertTrue(has_capability($writecapability, $context));
192 }
193
194 $this->setUser($otheruser);
195 // Check writes.
196 foreach ((array) $contexts as $contextname => $context) {
197 $this->assertFalse(has_capability($writecapability, $context));
198 }
199 }
200
201 /**
202 * Unit tests to check the operation of locked contexts.
203 *
204 * Note: We only check the admin user here.
205 * If the admin cannot do it, then no-one can.
206 *
207 * @dataProvider locked_context_provider
208 * @param string[] $lockedcontexts The list of contexts, by name, to mark as locked
209 * @param string[] $blocked The list of contexts which will be 'blocked' by has_capability
210 */
211 public function test_locked_contexts_for_admin_with_config($lockedcontexts, $blocked) {
212 global $DB;
213
214 $this->resetAfterTest();
215 set_config('contextlocking', 1);
216 set_config('contextlockappliestoadmin', 0);
217
218 $generator = $this->getDataGenerator();
219 $otheruser = $generator->create_user();
220
221 // / (system)
222 // /Cat1
223 // /Cat1/Block
224 // /Cat1/Course1
225 // /Cat1/Course1/Block
226 // /Cat1/Course2
227 // /Cat1/Course2/Block
228 // /Cat1/Cat1a
229 // /Cat1/Cat1a/Block
230 // /Cat1/Cat1a/Course1
231 // /Cat1/Cat1a/Course1/Block
232 // /Cat1/Cat1a/Course2
233 // /Cat1/Cat1a/Course2/Block
234 // /Cat1/Cat1b
235 // /Cat1/Cat1b/Block
236 // /Cat1/Cat1b/Course1
237 // /Cat1/Cat1b/Course1/Block
238 // /Cat1/Cat1b/Course2
239 // /Cat1/Cat1b/Course2/Block
240 // /Cat2
241 // /Cat2/Block
242 // /Cat2/Course1
243 // /Cat2/Course1/Block
244 // /Cat2/Course2
245 // /Cat2/Course2/Block
246 // /Cat2/Cat2a
247 // /Cat2/Cat2a/Block
248 // /Cat2/Cat2a/Course1
249 // /Cat2/Cat2a/Course1/Block
250 // /Cat2/Cat2a/Course2
251 // /Cat2/Cat2a/Course2/Block
252 // /Cat2/Cat2b
253 // /Cat2/Cat2b/Block
254 // /Cat2/Cat2b/Course1
255 // /Cat2/Cat2b/Course1/Block
256 // /Cat2/Cat2b/Course2
257 // /Cat2/Cat2b/Course2/Block
258
259 $adminuser = \core_user::get_user_by_username('admin');
260 $contexts = (object) [
261 'system' => \context_system::instance(),
262 'adminuser' => \context_user::instance($adminuser->id),
263 ];
264
265 $cat1 = $generator->create_category();
266 $cat1a = $generator->create_category(['parent' => $cat1->id]);
267 $cat1b = $generator->create_category(['parent' => $cat1->id]);
268
269 $contexts->cat1 = \context_coursecat::instance($cat1->id);
270 $contexts->cat1a = \context_coursecat::instance($cat1a->id);
271 $contexts->cat1b = \context_coursecat::instance($cat1b->id);
272
273 $cat1course1 = $generator->create_course(['category' => $cat1->id]);
274 $cat1course2 = $generator->create_course(['category' => $cat1->id]);
275 $cat1acourse1 = $generator->create_course(['category' => $cat1a->id]);
276 $cat1acourse2 = $generator->create_course(['category' => $cat1a->id]);
277 $cat1bcourse1 = $generator->create_course(['category' => $cat1b->id]);
278 $cat1bcourse2 = $generator->create_course(['category' => $cat1b->id]);
279
280 $contexts->cat1course1 = \context_course::instance($cat1course1->id);
281 $contexts->cat1acourse1 = \context_course::instance($cat1acourse1->id);
282 $contexts->cat1bcourse1 = \context_course::instance($cat1bcourse1->id);
283 $contexts->cat1course2 = \context_course::instance($cat1course2->id);
284 $contexts->cat1acourse2 = \context_course::instance($cat1acourse2->id);
285 $contexts->cat1bcourse2 = \context_course::instance($cat1bcourse2->id);
286
287 $cat1block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1->id]);
288 $cat1ablock = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1a->id]);
289 $cat1bblock = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1b->id]);
290 $cat1course1block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1course1->id]);
291 $cat1course2block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1course2->id]);
292 $cat1acourse1block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1acourse1->id]);
293 $cat1acourse2block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1acourse2->id]);
294 $cat1bcourse1block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1bcourse1->id]);
295 $cat1bcourse2block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1bcourse2->id]);
296
297 $contexts->cat1block = \context_block::instance($cat1block->id);
298 $contexts->cat1ablock = \context_block::instance($cat1ablock->id);
299 $contexts->cat1bblock = \context_block::instance($cat1bblock->id);
300 $contexts->cat1course1block = \context_block::instance($cat1course1block->id);
301 $contexts->cat1course2block = \context_block::instance($cat1course2block->id);
302 $contexts->cat1acourse1block = \context_block::instance($cat1acourse1block->id);
303 $contexts->cat1acourse2block = \context_block::instance($cat1acourse2block->id);
304 $contexts->cat1bcourse1block = \context_block::instance($cat1bcourse1block->id);
305 $contexts->cat1bcourse2block = \context_block::instance($cat1bcourse2block->id);
306
307 $writecapability = 'moodle/block:edit';
308 $readcapability = 'moodle/block:view';
309 $managecapability = 'moodle/site:managecontextlocks';
310
311 $this->setAdminUser();
312 $totest = (array) $contexts;
313 foreach ($totest as $context) {
314 $this->assertTrue(has_capability($writecapability, $context));
315 $this->assertTrue(has_capability($readcapability, $context));
316 $this->assertTrue(has_capability($managecapability, $context));
317 }
318
319 // Lock the specified contexts.
320 foreach ($lockedcontexts as $contextname => $value) {
321 $contexts->$contextname->set_locked($value);
322 }
323
324 // All read capabilities should remain.
325 foreach ((array) $contexts as $context) {
326 $this->assertTrue(has_capability($readcapability, $context));
327 $this->assertTrue(has_capability($managecapability, $context));
328 }
329
330 // Check writes.
331 foreach ((array) $contexts as $contextname => $context) {
332 $this->assertTrue(has_capability($writecapability, $context));
333 }
334
335 $this->setUser($otheruser);
336 // Check writes.
337 foreach ((array) $contexts as $contextname => $context) {
338 $this->assertFalse(has_capability($writecapability, $context));
339 }
340
341 // Disable the contextlocking experimental feature.
342 set_config('contextlocking', 0);
343
0616f045
AN
344 $this->setAdminUser();
345 // All read capabilities should remain.
346 foreach ((array) $contexts as $context) {
347 $this->assertTrue(has_capability($readcapability, $context));
348 $this->assertTrue(has_capability($managecapability, $context));
349 }
350
351 // All write capabilities should now be present again.
352 foreach ((array) $contexts as $contextname => $context) {
353 $this->assertTrue(has_capability($writecapability, $context));
354 }
355
356 $this->setUser($otheruser);
357 // Check writes.
358 foreach ((array) $contexts as $contextname => $context) {
359 $this->assertFalse(has_capability($writecapability, $context));
360 }
361 }
362
363 /**
364 * Data provider for testing that has_capability() deals with locked contexts.
365 *
366 * @return array
367 */
368 public function locked_context_provider() {
369 return [
370 'All unlocked' => [
371 'locked' => [
372 ],
373 'blockedwrites' => [
374 ],
375 ],
376 'User is locked (yes, this is weird)' => [
377 'locked' => [
378 'adminuser' => true,
379 ],
380 'blockedwrites' => [
381 'adminuser',
382 ],
383 ],
384 'Cat1/Block locked' => [
385 'locked' => [
386 'cat1block' => true,
387 ],
388 'blockedwrites' => [
389 'cat1block',
390 ],
391 ],
392 'Cat1' => [
393 'locked' => [
394 'cat1' => true,
395 ],
396 'blockedwrites' => [
397 'cat1',
398 'cat1block',
399 'cat1a',
400 'cat1ablock',
401 'cat1b',
402 'cat1bblock',
403 'cat1course1',
404 'cat1course1block',
405 'cat1course2',
406 'cat1course2block',
407 'cat1acourse1',
408 'cat1acourse1block',
409 'cat1acourse2',
410 'cat1acourse2block',
411 'cat1bcourse1',
412 'cat1bcourse1block',
413 'cat1bcourse2',
414 'cat1bcourse2block',
415 ],
416 ],
417 'Cat1 locked and a child explicitly unlocked' => [
418 'locked' => [
419 'cat1' => true,
420 'cat1a' => false,
421 ],
422 'blockedwrites' => [
423 'cat1',
424 'cat1block',
425 'cat1a',
426 'cat1ablock',
427 'cat1b',
428 'cat1bblock',
429 'cat1course1',
430 'cat1course1block',
431 'cat1course2',
432 'cat1course2block',
433 'cat1acourse1',
434 'cat1acourse1block',
435 'cat1acourse2',
436 'cat1acourse2block',
437 'cat1bcourse1',
438 'cat1bcourse1block',
439 'cat1bcourse2',
440 'cat1bcourse2block',
441 ],
442 ],
443 ];
444 }
c8283518
AN
445
446 /**
447 * Data provider for for has_capability tests when logged in as a different user.
448 *
449 * @return array
450 */
451 public function login_as_provider(): array {
452 return [
453 [
454 'system',
455 [
456 'cat1course1block' => true,
457 'cat1course1' => true,
458 'cat1course2block' => true,
459 'cat1course2' => true,
460 'cat2course1block' => true,
461 'cat2course1' => true,
462 'cat2course2block' => true,
463 'cat2course2' => true,
464 ],
465 ],
466 [
467 'cat1',
468 [
469 'cat1course1block' => true,
470 'cat1course1' => true,
471 'cat1course2block' => true,
472 'cat1course2' => true,
473
474 'cat2course1block' => false,
475 'cat2course1' => false,
476 'cat2course2block' => false,
477 'cat2course2' => false,
478 ],
479 ],
480 [
481 'cat1course1',
482 [
483 'cat1course1block' => true,
484 'cat1course1' => true,
485
486 'cat1course2block' => false,
487 'cat1course2' => false,
488 'cat2course1block' => false,
489 'cat2course1' => false,
490 'cat2course2block' => false,
491 'cat2course2' => false,
492 ],
493 ],
494 [
495 'cat1course1block',
496 [
497 'cat1course1block' => true,
498
499 'cat1course1' => false,
500 'cat1course2block' => false,
501 'cat1course2' => false,
502 'cat2course1block' => false,
503 'cat2course1' => false,
504 'cat2course2block' => false,
505 'cat2course2' => false,
506 ],
507 ],
508 ];
509 }
510
511 /**
512 * Test that the log in as functionality works as expected for an administrator.
513 *
514 * An administrator logged in as another user assumes all of their capabilities.
515 *
516 * @dataProvider login_as_provider
517 * @param string $loginascontext
518 * @param string $testcontexts
519 */
520 public function test_login_as_admin(string $loginascontext, array $testcontexts): void {
521 $this->resetAfterTest();
522
523 $contexts = $this->get_test_data();
524
525 $this->setAdminUser();
526 $user = $this->getDataGenerator()->create_user();
527
528 $testcontext = $contexts->$loginascontext;
529 \core\session\manager::loginas($user->id, $testcontext);
530
531 $capability = 'moodle/block:view';
532 foreach ($testcontexts as $contextname => $hascapability) {
533 $this->assertEquals($hascapability, has_capability($capability, $contexts->$contextname));
534 }
535 }
536
537 /**
538 * Test that the log in as functionality works as expected for a regulr user.
539 *
540 * @dataProvider login_as_provider
541 * @param string $loginascontext
542 * @param string $testcontexts
543 */
544 public function test_login_as_user(string $loginascontext, array $testcontexts): void {
545 $this->resetAfterTest();
546
547 $contexts = $this->get_test_data();
548
549 $initialuser = $this->getDataGenerator()->create_user();
550 $user = $this->getDataGenerator()->create_user();
551 $this->setUser($initialuser);
552
553 $testcontext = $contexts->$loginascontext;
554 \core\session\manager::loginas($user->id, $testcontext);
555
556 $capability = 'moodle/block:view';
557 foreach ($testcontexts as $contextname => $hascapability) {
558 $this->assertEquals($hascapability, has_capability($capability, $contexts->$contextname));
559 }
560 }
561
562 /**
563 * Get the test data contexts.
564 *
565 * @return stdClass
566 */
567 protected function get_test_data(): stdclass {
568 $generator = $this->getDataGenerator();
569 $otheruser = $generator->create_user();
570
571 // / (system)
572 // /Cat1
573 // /Cat1/Block
574 // /Cat1/Course1
575 // /Cat1/Course1/Block
576 // /Cat1/Course2
577 // /Cat1/Course2/Block
578 // /Cat1/Cat1a
579 // /Cat1/Cat1a/Block
580 // /Cat1/Cat1a/Course1
581 // /Cat1/Cat1a/Course1/Block
582 // /Cat1/Cat1a/Course2
583 // /Cat1/Cat1a/Course2/Block
584 // /Cat1/Cat1b
585 // /Cat1/Cat1b/Block
586 // /Cat1/Cat1b/Course1
587 // /Cat1/Cat1b/Course1/Block
588 // /Cat1/Cat1b/Course2
589 // /Cat1/Cat1b/Course2/Block
590 // /Cat2
591 // /Cat2/Block
592 // /Cat2/Course1
593 // /Cat2/Course1/Block
594 // /Cat2/Course2
595 // /Cat2/Course2/Block
596 // /Cat2/Cat2a
597 // /Cat2/Cat2a/Block
598 // /Cat2/Cat2a/Course1
599 // /Cat2/Cat2a/Course1/Block
600 // /Cat2/Cat2a/Course2
601 // /Cat2/Cat2a/Course2/Block
602 // /Cat2/Cat2b
603 // /Cat2/Cat2b/Block
604 // /Cat2/Cat2b/Course1
605 // /Cat2/Cat2b/Course1/Block
606 // /Cat2/Cat2b/Course2
607 // /Cat2/Cat2b/Course2/Block
608
609 $adminuser = \core_user::get_user_by_username('admin');
610 $contexts = (object) [
611 'system' => \context_system::instance(),
612 'adminuser' => \context_user::instance($adminuser->id),
613 ];
614
615 $cat1 = $generator->create_category();
616 $cat1a = $generator->create_category(['parent' => $cat1->id]);
617 $cat1b = $generator->create_category(['parent' => $cat1->id]);
618
619 $contexts->cat1 = \context_coursecat::instance($cat1->id);
620 $contexts->cat1a = \context_coursecat::instance($cat1a->id);
621 $contexts->cat1b = \context_coursecat::instance($cat1b->id);
622
623 $cat1course1 = $generator->create_course(['category' => $cat1->id]);
624 $cat1course2 = $generator->create_course(['category' => $cat1->id]);
625 $cat1acourse1 = $generator->create_course(['category' => $cat1a->id]);
626 $cat1acourse2 = $generator->create_course(['category' => $cat1a->id]);
627 $cat1bcourse1 = $generator->create_course(['category' => $cat1b->id]);
628 $cat1bcourse2 = $generator->create_course(['category' => $cat1b->id]);
629
630 $contexts->cat1course1 = \context_course::instance($cat1course1->id);
631 $contexts->cat1acourse1 = \context_course::instance($cat1acourse1->id);
632 $contexts->cat1bcourse1 = \context_course::instance($cat1bcourse1->id);
633 $contexts->cat1course2 = \context_course::instance($cat1course2->id);
634 $contexts->cat1acourse2 = \context_course::instance($cat1acourse2->id);
635 $contexts->cat1bcourse2 = \context_course::instance($cat1bcourse2->id);
636
637 $cat1block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1->id]);
638 $cat1ablock = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1a->id]);
639 $cat1bblock = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1b->id]);
640 $cat1course1block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1course1->id]);
641 $cat1course2block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1course2->id]);
642 $cat1acourse1block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1acourse1->id]);
643 $cat1acourse2block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1acourse2->id]);
644 $cat1bcourse1block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1bcourse1->id]);
645 $cat1bcourse2block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat1bcourse2->id]);
646
647 $contexts->cat1block = \context_block::instance($cat1block->id);
648 $contexts->cat1ablock = \context_block::instance($cat1ablock->id);
649 $contexts->cat1bblock = \context_block::instance($cat1bblock->id);
650 $contexts->cat1course1block = \context_block::instance($cat1course1block->id);
651 $contexts->cat1course2block = \context_block::instance($cat1course2block->id);
652 $contexts->cat1acourse1block = \context_block::instance($cat1acourse1block->id);
653 $contexts->cat1acourse2block = \context_block::instance($cat1acourse2block->id);
654 $contexts->cat1bcourse1block = \context_block::instance($cat1bcourse1block->id);
655 $contexts->cat1bcourse2block = \context_block::instance($cat1bcourse2block->id);
656
657 $cat2 = $generator->create_category();
658 $cat2a = $generator->create_category(['parent' => $cat2->id]);
659 $cat2b = $generator->create_category(['parent' => $cat2->id]);
660
661 $contexts->cat2 = \context_coursecat::instance($cat2->id);
662 $contexts->cat2a = \context_coursecat::instance($cat2a->id);
663 $contexts->cat2b = \context_coursecat::instance($cat2b->id);
664
665 $cat2course1 = $generator->create_course(['category' => $cat2->id]);
666 $cat2course2 = $generator->create_course(['category' => $cat2->id]);
667 $cat2acourse1 = $generator->create_course(['category' => $cat2a->id]);
668 $cat2acourse2 = $generator->create_course(['category' => $cat2a->id]);
669 $cat2bcourse1 = $generator->create_course(['category' => $cat2b->id]);
670 $cat2bcourse2 = $generator->create_course(['category' => $cat2b->id]);
671
672 $contexts->cat2course1 = \context_course::instance($cat2course1->id);
673 $contexts->cat2acourse1 = \context_course::instance($cat2acourse1->id);
674 $contexts->cat2bcourse1 = \context_course::instance($cat2bcourse1->id);
675 $contexts->cat2course2 = \context_course::instance($cat2course2->id);
676 $contexts->cat2acourse2 = \context_course::instance($cat2acourse2->id);
677 $contexts->cat2bcourse2 = \context_course::instance($cat2bcourse2->id);
678
679 $cat2block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat2->id]);
680 $cat2ablock = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat2a->id]);
681 $cat2bblock = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat2b->id]);
682 $cat2course1block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat2course1->id]);
683 $cat2course2block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat2course2->id]);
684 $cat2acourse1block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat2acourse1->id]);
685 $cat2acourse2block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat2acourse2->id]);
686 $cat2bcourse1block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat2bcourse1->id]);
687 $cat2bcourse2block = $generator->create_block('online_users', ['parentcontextid' => $contexts->cat2bcourse2->id]);
688
689 $contexts->cat2block = \context_block::instance($cat2block->id);
690 $contexts->cat2ablock = \context_block::instance($cat2ablock->id);
691 $contexts->cat2bblock = \context_block::instance($cat2bblock->id);
692 $contexts->cat2course1block = \context_block::instance($cat2course1block->id);
693 $contexts->cat2course2block = \context_block::instance($cat2course2block->id);
694 $contexts->cat2acourse1block = \context_block::instance($cat2acourse1block->id);
695 $contexts->cat2acourse2block = \context_block::instance($cat2acourse2block->id);
696 $contexts->cat2bcourse1block = \context_block::instance($cat2bcourse1block->id);
697 $contexts->cat2bcourse2block = \context_block::instance($cat2bcourse2block->id);
698
699 return $contexts;
700 }
0616f045 701}