[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
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 * Tests for forum events. 19 * 20 * @package mod_forum 21 * @category test 22 * @copyright 2014 Dan Poltawski <[email protected]> 23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 24 */ 25 26 defined('MOODLE_INTERNAL') || die(); 27 28 /** 29 * Tests for forum events. 30 * 31 * @package mod_forum 32 * @category test 33 * @copyright 2014 Dan Poltawski <[email protected]> 34 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 35 */ 36 class mod_forum_events_testcase extends advanced_testcase { 37 38 /** 39 * Tests set up. 40 */ 41 public function setUp() { 42 // We must clear the subscription caches. This has to be done both before each test, and after in case of other 43 // tests using these functions. 44 \mod_forum\subscriptions::reset_forum_cache(); 45 46 $this->resetAfterTest(); 47 } 48 49 public function tearDown() { 50 // We must clear the subscription caches. This has to be done both before each test, and after in case of other 51 // tests using these functions. 52 \mod_forum\subscriptions::reset_forum_cache(); 53 } 54 55 /** 56 * Ensure course_searched event validates that searchterm is set. 57 */ 58 public function test_course_searched_searchterm_validation() { 59 $course = $this->getDataGenerator()->create_course(); 60 $coursectx = context_course::instance($course->id); 61 $params = array( 62 'context' => $coursectx, 63 ); 64 65 $this->setExpectedException('coding_exception', 'The \'searchterm\' value must be set in other.'); 66 \mod_forum\event\course_searched::create($params); 67 } 68 69 /** 70 * Ensure course_searched event validates that context is the correct level. 71 */ 72 public function test_course_searched_context_validation() { 73 $course = $this->getDataGenerator()->create_course(); 74 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 75 $context = context_module::instance($forum->cmid); 76 $params = array( 77 'context' => $context, 78 'other' => array('searchterm' => 'testing'), 79 ); 80 81 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_COURSE.'); 82 \mod_forum\event\course_searched::create($params); 83 } 84 85 /** 86 * Test course_searched event. 87 */ 88 public function test_course_searched() { 89 90 // Setup test data. 91 $course = $this->getDataGenerator()->create_course(); 92 $coursectx = context_course::instance($course->id); 93 $searchterm = 'testing123'; 94 95 $params = array( 96 'context' => $coursectx, 97 'other' => array('searchterm' => $searchterm), 98 ); 99 100 // Create event. 101 $event = \mod_forum\event\course_searched::create($params); 102 103 // Trigger and capture the event. 104 $sink = $this->redirectEvents(); 105 $event->trigger(); 106 $events = $sink->get_events(); 107 $this->assertCount(1, $events); 108 $event = reset($events); 109 110 // Checking that the event contains the expected values. 111 $this->assertInstanceOf('\mod_forum\event\course_searched', $event); 112 $this->assertEquals($coursectx, $event->get_context()); 113 $expected = array($course->id, 'forum', 'search', "search.php?id={$course->id}&search={$searchterm}", $searchterm); 114 $this->assertEventLegacyLogData($expected, $event); 115 $this->assertEventContextNotUsed($event); 116 117 $this->assertNotEmpty($event->get_name()); 118 } 119 120 /** 121 * Ensure discussion_created event validates that forumid is set. 122 */ 123 public function test_discussion_created_forumid_validation() { 124 $course = $this->getDataGenerator()->create_course(); 125 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 126 $context = context_module::instance($forum->cmid); 127 128 $params = array( 129 'context' => $context, 130 ); 131 132 $this->setExpectedException('coding_exception', 'The \'forumid\' value must be set in other.'); 133 \mod_forum\event\discussion_created::create($params); 134 } 135 136 /** 137 * Ensure discussion_created event validates that the context is the correct level. 138 */ 139 public function test_discussion_created_context_validation() { 140 $course = $this->getDataGenerator()->create_course(); 141 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 142 143 $params = array( 144 'context' => context_system::instance(), 145 'other' => array('forumid' => $forum->id), 146 ); 147 148 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_MODULE.'); 149 \mod_forum\event\discussion_created::create($params); 150 } 151 152 /** 153 * Test discussion_created event. 154 */ 155 public function test_discussion_created() { 156 157 // Setup test data. 158 $course = $this->getDataGenerator()->create_course(); 159 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 160 $user = $this->getDataGenerator()->create_user(); 161 162 // Add a discussion. 163 $record = array(); 164 $record['course'] = $course->id; 165 $record['forum'] = $forum->id; 166 $record['userid'] = $user->id; 167 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 168 169 $context = context_module::instance($forum->cmid); 170 171 $params = array( 172 'context' => $context, 173 'objectid' => $discussion->id, 174 'other' => array('forumid' => $forum->id), 175 ); 176 177 // Create the event. 178 $event = \mod_forum\event\discussion_created::create($params); 179 180 // Trigger and capturing the event. 181 $sink = $this->redirectEvents(); 182 $event->trigger(); 183 $events = $sink->get_events(); 184 $this->assertCount(1, $events); 185 $event = reset($events); 186 187 // Check that the event contains the expected values. 188 $this->assertInstanceOf('\mod_forum\event\discussion_created', $event); 189 $this->assertEquals($context, $event->get_context()); 190 $expected = array($course->id, 'forum', 'add discussion', "discuss.php?d={$discussion->id}", $discussion->id, $forum->cmid); 191 $this->assertEventLegacyLogData($expected, $event); 192 $this->assertEventContextNotUsed($event); 193 194 $this->assertNotEmpty($event->get_name()); 195 } 196 197 /** 198 * Ensure discussion_updated event validates that forumid is set. 199 */ 200 public function test_discussion_updated_forumid_validation() { 201 $course = $this->getDataGenerator()->create_course(); 202 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 203 $context = context_module::instance($forum->cmid); 204 205 $params = array( 206 'context' => $context, 207 ); 208 209 $this->setExpectedException('coding_exception', 'The \'forumid\' value must be set in other.'); 210 \mod_forum\event\discussion_updated::create($params); 211 } 212 213 /** 214 * Ensure discussion_created event validates that the context is the correct level. 215 */ 216 public function test_discussion_updated_context_validation() { 217 $course = $this->getDataGenerator()->create_course(); 218 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 219 220 $params = array( 221 'context' => context_system::instance(), 222 'other' => array('forumid' => $forum->id), 223 ); 224 225 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_MODULE.'); 226 \mod_forum\event\discussion_updated::create($params); 227 } 228 229 /** 230 * Test discussion_created event. 231 */ 232 public function test_discussion_updated() { 233 234 // Setup test data. 235 $course = $this->getDataGenerator()->create_course(); 236 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 237 $user = $this->getDataGenerator()->create_user(); 238 239 // Add a discussion. 240 $record = array(); 241 $record['course'] = $course->id; 242 $record['forum'] = $forum->id; 243 $record['userid'] = $user->id; 244 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 245 246 $context = context_module::instance($forum->cmid); 247 248 $params = array( 249 'context' => $context, 250 'objectid' => $discussion->id, 251 'other' => array('forumid' => $forum->id), 252 ); 253 254 // Create the event. 255 $event = \mod_forum\event\discussion_updated::create($params); 256 257 // Trigger and capturing the event. 258 $sink = $this->redirectEvents(); 259 $event->trigger(); 260 $events = $sink->get_events(); 261 $this->assertCount(1, $events); 262 $event = reset($events); 263 264 // Check that the event contains the expected values. 265 $this->assertInstanceOf('\mod_forum\event\discussion_updated', $event); 266 $this->assertEquals($context, $event->get_context()); 267 $this->assertEventContextNotUsed($event); 268 269 $this->assertNotEmpty($event->get_name()); 270 } 271 272 /** 273 * Ensure discussion_deleted event validates that forumid is set. 274 */ 275 public function test_discussion_deleted_forumid_validation() { 276 $course = $this->getDataGenerator()->create_course(); 277 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 278 $context = context_module::instance($forum->cmid); 279 280 $params = array( 281 'context' => $context, 282 ); 283 284 $this->setExpectedException('coding_exception', 'The \'forumid\' value must be set in other.'); 285 \mod_forum\event\discussion_deleted::create($params); 286 } 287 288 /** 289 * Ensure discussion_deleted event validates that context is of the correct level. 290 */ 291 public function test_discussion_deleted_context_validation() { 292 $course = $this->getDataGenerator()->create_course(); 293 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 294 295 $params = array( 296 'context' => context_system::instance(), 297 'other' => array('forumid' => $forum->id), 298 ); 299 300 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_MODULE.'); 301 \mod_forum\event\discussion_deleted::create($params); 302 } 303 304 /** 305 * Test discussion_deleted event. 306 */ 307 public function test_discussion_deleted() { 308 309 // Setup test data. 310 $course = $this->getDataGenerator()->create_course(); 311 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 312 $user = $this->getDataGenerator()->create_user(); 313 314 // Add a discussion. 315 $record = array(); 316 $record['course'] = $course->id; 317 $record['forum'] = $forum->id; 318 $record['userid'] = $user->id; 319 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 320 321 $context = context_module::instance($forum->cmid); 322 323 $params = array( 324 'context' => $context, 325 'objectid' => $discussion->id, 326 'other' => array('forumid' => $forum->id), 327 ); 328 329 $event = \mod_forum\event\discussion_deleted::create($params); 330 331 // Trigger and capture the event. 332 $sink = $this->redirectEvents(); 333 $event->trigger(); 334 $events = $sink->get_events(); 335 $this->assertCount(1, $events); 336 $event = reset($events); 337 338 // Checking that the event contains the expected values. 339 $this->assertInstanceOf('\mod_forum\event\discussion_deleted', $event); 340 $this->assertEquals($context, $event->get_context()); 341 $expected = array($course->id, 'forum', 'delete discussion', "view.php?id={$forum->cmid}", $forum->id, $forum->cmid); 342 $this->assertEventLegacyLogData($expected, $event); 343 $this->assertEventContextNotUsed($event); 344 345 $this->assertNotEmpty($event->get_name()); 346 } 347 348 /** 349 * Ensure discussion_moved event validates that fromforumid is set. 350 */ 351 public function test_discussion_moved_fromforumid_validation() { 352 $course = $this->getDataGenerator()->create_course(); 353 $toforum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 354 355 $context = context_module::instance($toforum->cmid); 356 357 $params = array( 358 'context' => $context, 359 'other' => array('toforumid' => $toforum->id) 360 ); 361 362 $this->setExpectedException('coding_exception', 'The \'fromforumid\' value must be set in other.'); 363 \mod_forum\event\discussion_moved::create($params); 364 } 365 366 /** 367 * Ensure discussion_moved event validates that toforumid is set. 368 */ 369 public function test_discussion_moved_toforumid_validation() { 370 $course = $this->getDataGenerator()->create_course(); 371 $fromforum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 372 $toforum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 373 $context = context_module::instance($toforum->cmid); 374 375 $params = array( 376 'context' => $context, 377 'other' => array('fromforumid' => $fromforum->id) 378 ); 379 380 $this->setExpectedException('coding_exception', 'The \'toforumid\' value must be set in other.'); 381 \mod_forum\event\discussion_moved::create($params); 382 } 383 384 /** 385 * Ensure discussion_moved event validates that the context level is correct. 386 */ 387 public function test_discussion_moved_context_validation() { 388 $course = $this->getDataGenerator()->create_course(); 389 $fromforum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 390 $toforum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 391 $user = $this->getDataGenerator()->create_user(); 392 393 // Add a discussion. 394 $record = array(); 395 $record['course'] = $course->id; 396 $record['forum'] = $fromforum->id; 397 $record['userid'] = $user->id; 398 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 399 400 $params = array( 401 'context' => context_system::instance(), 402 'objectid' => $discussion->id, 403 'other' => array('fromforumid' => $fromforum->id, 'toforumid' => $toforum->id) 404 ); 405 406 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_MODULE.'); 407 \mod_forum\event\discussion_moved::create($params); 408 } 409 410 /** 411 * Test discussion_moved event. 412 */ 413 public function test_discussion_moved() { 414 // Setup test data. 415 $course = $this->getDataGenerator()->create_course(); 416 $fromforum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 417 $toforum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 418 $user = $this->getDataGenerator()->create_user(); 419 420 // Add a discussion. 421 $record = array(); 422 $record['course'] = $course->id; 423 $record['forum'] = $fromforum->id; 424 $record['userid'] = $user->id; 425 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 426 427 $context = context_module::instance($toforum->cmid); 428 429 $params = array( 430 'context' => $context, 431 'objectid' => $discussion->id, 432 'other' => array('fromforumid' => $fromforum->id, 'toforumid' => $toforum->id) 433 ); 434 435 $event = \mod_forum\event\discussion_moved::create($params); 436 437 // Trigger and capture the event. 438 $sink = $this->redirectEvents(); 439 $event->trigger(); 440 $events = $sink->get_events(); 441 $this->assertCount(1, $events); 442 $event = reset($events); 443 444 // Checking that the event contains the expected values. 445 $this->assertInstanceOf('\mod_forum\event\discussion_moved', $event); 446 $this->assertEquals($context, $event->get_context()); 447 $expected = array($course->id, 'forum', 'move discussion', "discuss.php?d={$discussion->id}", 448 $discussion->id, $toforum->cmid); 449 $this->assertEventLegacyLogData($expected, $event); 450 $this->assertEventContextNotUsed($event); 451 452 $this->assertNotEmpty($event->get_name()); 453 } 454 455 456 /** 457 * Ensure discussion_viewed event validates that the contextlevel is correct. 458 */ 459 public function test_discussion_viewed_context_validation() { 460 $course = $this->getDataGenerator()->create_course(); 461 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 462 $user = $this->getDataGenerator()->create_user(); 463 464 // Add a discussion. 465 $record = array(); 466 $record['course'] = $course->id; 467 $record['forum'] = $forum->id; 468 $record['userid'] = $user->id; 469 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 470 471 $params = array( 472 'context' => context_system::instance(), 473 'objectid' => $discussion->id, 474 ); 475 476 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_MODULE.'); 477 \mod_forum\event\discussion_viewed::create($params); 478 } 479 480 /** 481 * Test discussion_viewed event. 482 */ 483 public function test_discussion_viewed() { 484 // Setup test data. 485 $course = $this->getDataGenerator()->create_course(); 486 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 487 $user = $this->getDataGenerator()->create_user(); 488 489 // Add a discussion. 490 $record = array(); 491 $record['course'] = $course->id; 492 $record['forum'] = $forum->id; 493 $record['userid'] = $user->id; 494 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 495 496 $context = context_module::instance($forum->cmid); 497 498 $params = array( 499 'context' => $context, 500 'objectid' => $discussion->id, 501 ); 502 503 $event = \mod_forum\event\discussion_viewed::create($params); 504 505 // Trigger and capture the event. 506 $sink = $this->redirectEvents(); 507 $event->trigger(); 508 $events = $sink->get_events(); 509 $this->assertCount(1, $events); 510 $event = reset($events); 511 512 // Checking that the event contains the expected values. 513 $this->assertInstanceOf('\mod_forum\event\discussion_viewed', $event); 514 $this->assertEquals($context, $event->get_context()); 515 $expected = array($course->id, 'forum', 'view discussion', "discuss.php?d={$discussion->id}", 516 $discussion->id, $forum->cmid); 517 $this->assertEventLegacyLogData($expected, $event); 518 $this->assertEventContextNotUsed($event); 519 520 $this->assertNotEmpty($event->get_name()); 521 } 522 523 /** 524 * Ensure course_module_viewed event validates that the contextlevel is correct. 525 */ 526 public function test_course_module_viewed_context_validation() { 527 $course = $this->getDataGenerator()->create_course(); 528 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 529 530 $params = array( 531 'context' => context_system::instance(), 532 'objectid' => $forum->id, 533 ); 534 535 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_MODULE.'); 536 \mod_forum\event\course_module_viewed::create($params); 537 } 538 539 /** 540 * Test the course_module_viewed event. 541 */ 542 public function test_course_module_viewed() { 543 // Setup test data. 544 $course = $this->getDataGenerator()->create_course(); 545 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 546 547 $context = context_module::instance($forum->cmid); 548 549 $params = array( 550 'context' => $context, 551 'objectid' => $forum->id, 552 ); 553 554 $event = \mod_forum\event\course_module_viewed::create($params); 555 556 // Trigger and capture the event. 557 $sink = $this->redirectEvents(); 558 $event->trigger(); 559 $events = $sink->get_events(); 560 $this->assertCount(1, $events); 561 $event = reset($events); 562 563 // Checking that the event contains the expected values. 564 $this->assertInstanceOf('\mod_forum\event\course_module_viewed', $event); 565 $this->assertEquals($context, $event->get_context()); 566 $expected = array($course->id, 'forum', 'view forum', "view.php?f={$forum->id}", $forum->id, $forum->cmid); 567 $this->assertEventLegacyLogData($expected, $event); 568 $url = new \moodle_url('/mod/forum/view.php', array('f' => $forum->id)); 569 $this->assertEquals($url, $event->get_url()); 570 $this->assertEventContextNotUsed($event); 571 572 $this->assertNotEmpty($event->get_name()); 573 } 574 575 /** 576 * Ensure subscription_created event validates that the forumid is set. 577 */ 578 public function test_subscription_created_forumid_validation() { 579 $user = $this->getDataGenerator()->create_user(); 580 $course = $this->getDataGenerator()->create_course(); 581 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 582 583 $params = array( 584 'context' => context_module::instance($forum->cmid), 585 'relateduserid' => $user->id, 586 ); 587 588 $this->setExpectedException('coding_exception', 'The \'forumid\' value must be set in other.'); 589 \mod_forum\event\subscription_created::create($params); 590 } 591 592 /** 593 * Ensure subscription_created event validates that the relateduserid is set. 594 */ 595 public function test_subscription_created_relateduserid_validation() { 596 $course = $this->getDataGenerator()->create_course(); 597 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 598 599 $params = array( 600 'context' => context_module::instance($forum->cmid), 601 'objectid' => $forum->id, 602 ); 603 604 $this->setExpectedException('coding_exception', 'The \'relateduserid\' must be set.'); 605 \mod_forum\event\subscription_created::create($params); 606 } 607 608 /** 609 * Ensure subscription_created event validates that the contextlevel is correct. 610 */ 611 public function test_subscription_created_contextlevel_validation() { 612 $user = $this->getDataGenerator()->create_user(); 613 $course = $this->getDataGenerator()->create_course(); 614 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 615 616 $params = array( 617 'context' => context_system::instance(), 618 'other' => array('forumid' => $forum->id), 619 'relateduserid' => $user->id, 620 ); 621 622 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_MODULE.'); 623 \mod_forum\event\subscription_created::create($params); 624 } 625 626 /** 627 * Test the subscription_created event. 628 */ 629 public function test_subscription_created() { 630 // Setup test data. 631 $user = $this->getDataGenerator()->create_user(); 632 $course = $this->getDataGenerator()->create_course(); 633 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 634 $user = $this->getDataGenerator()->create_user(); 635 $context = context_module::instance($forum->cmid); 636 637 // Add a subscription. 638 $record = array(); 639 $record['course'] = $course->id; 640 $record['forum'] = $forum->id; 641 $record['userid'] = $user->id; 642 $subscription = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_subscription($record); 643 644 $params = array( 645 'context' => $context, 646 'objectid' => $subscription->id, 647 'other' => array('forumid' => $forum->id), 648 'relateduserid' => $user->id, 649 ); 650 651 $event = \mod_forum\event\subscription_created::create($params); 652 653 // Trigger and capturing the event. 654 $sink = $this->redirectEvents(); 655 $event->trigger(); 656 $events = $sink->get_events(); 657 $this->assertCount(1, $events); 658 $event = reset($events); 659 660 // Checking that the event contains the expected values. 661 $this->assertInstanceOf('\mod_forum\event\subscription_created', $event); 662 $this->assertEquals($context, $event->get_context()); 663 $expected = array($course->id, 'forum', 'subscribe', "view.php?f={$forum->id}", $forum->id, $forum->cmid); 664 $this->assertEventLegacyLogData($expected, $event); 665 $url = new \moodle_url('/mod/forum/subscribers.php', array('id' => $forum->id)); 666 $this->assertEquals($url, $event->get_url()); 667 $this->assertEventContextNotUsed($event); 668 669 $this->assertNotEmpty($event->get_name()); 670 } 671 672 /** 673 * Ensure subscription_deleted event validates that the forumid is set. 674 */ 675 public function test_subscription_deleted_forumid_validation() { 676 $user = $this->getDataGenerator()->create_user(); 677 $course = $this->getDataGenerator()->create_course(); 678 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 679 680 $params = array( 681 'context' => context_module::instance($forum->cmid), 682 'relateduserid' => $user->id, 683 ); 684 685 $this->setExpectedException('coding_exception', 'The \'forumid\' value must be set in other.'); 686 \mod_forum\event\subscription_deleted::create($params); 687 } 688 689 /** 690 * Ensure subscription_deleted event validates that the relateduserid is set. 691 */ 692 public function test_subscription_deleted_relateduserid_validation() { 693 $course = $this->getDataGenerator()->create_course(); 694 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 695 696 $params = array( 697 'context' => context_module::instance($forum->cmid), 698 'objectid' => $forum->id, 699 ); 700 701 $this->setExpectedException('coding_exception', 'The \'relateduserid\' must be set.'); 702 \mod_forum\event\subscription_deleted::create($params); 703 } 704 705 /** 706 * Ensure subscription_deleted event validates that the contextlevel is correct. 707 */ 708 public function test_subscription_deleted_contextlevel_validation() { 709 $user = $this->getDataGenerator()->create_user(); 710 $course = $this->getDataGenerator()->create_course(); 711 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 712 713 $params = array( 714 'context' => context_system::instance(), 715 'other' => array('forumid' => $forum->id), 716 'relateduserid' => $user->id, 717 ); 718 719 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_MODULE.'); 720 \mod_forum\event\subscription_deleted::create($params); 721 } 722 723 /** 724 * Test the subscription_deleted event. 725 */ 726 public function test_subscription_deleted() { 727 // Setup test data. 728 $user = $this->getDataGenerator()->create_user(); 729 $course = $this->getDataGenerator()->create_course(); 730 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 731 $user = $this->getDataGenerator()->create_user(); 732 $context = context_module::instance($forum->cmid); 733 734 // Add a subscription. 735 $record = array(); 736 $record['course'] = $course->id; 737 $record['forum'] = $forum->id; 738 $record['userid'] = $user->id; 739 $subscription = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_subscription($record); 740 741 $params = array( 742 'context' => $context, 743 'objectid' => $subscription->id, 744 'other' => array('forumid' => $forum->id), 745 'relateduserid' => $user->id, 746 ); 747 748 $event = \mod_forum\event\subscription_deleted::create($params); 749 750 // Trigger and capturing the event. 751 $sink = $this->redirectEvents(); 752 $event->trigger(); 753 $events = $sink->get_events(); 754 $this->assertCount(1, $events); 755 $event = reset($events); 756 757 // Checking that the event contains the expected values. 758 $this->assertInstanceOf('\mod_forum\event\subscription_deleted', $event); 759 $this->assertEquals($context, $event->get_context()); 760 $expected = array($course->id, 'forum', 'unsubscribe', "view.php?f={$forum->id}", $forum->id, $forum->cmid); 761 $this->assertEventLegacyLogData($expected, $event); 762 $url = new \moodle_url('/mod/forum/subscribers.php', array('id' => $forum->id)); 763 $this->assertEquals($url, $event->get_url()); 764 $this->assertEventContextNotUsed($event); 765 766 $this->assertNotEmpty($event->get_name()); 767 } 768 769 /** 770 * Ensure readtracking_enabled event validates that the forumid is set. 771 */ 772 public function test_readtracking_enabled_forumid_validation() { 773 $user = $this->getDataGenerator()->create_user(); 774 $course = $this->getDataGenerator()->create_course(); 775 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 776 777 $params = array( 778 'context' => context_module::instance($forum->cmid), 779 'relateduserid' => $user->id, 780 ); 781 782 $this->setExpectedException('coding_exception', 'The \'forumid\' value must be set in other.'); 783 \mod_forum\event\readtracking_enabled::create($params); 784 } 785 786 /** 787 * Ensure readtracking_enabled event validates that the relateduserid is set. 788 */ 789 public function test_readtracking_enabled_relateduserid_validation() { 790 $course = $this->getDataGenerator()->create_course(); 791 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 792 793 $params = array( 794 'context' => context_module::instance($forum->cmid), 795 'objectid' => $forum->id, 796 ); 797 798 $this->setExpectedException('coding_exception', 'The \'relateduserid\' must be set.'); 799 \mod_forum\event\readtracking_enabled::create($params); 800 } 801 802 /** 803 * Ensure readtracking_enabled event validates that the contextlevel is correct. 804 */ 805 public function test_readtracking_enabled_contextlevel_validation() { 806 $user = $this->getDataGenerator()->create_user(); 807 $course = $this->getDataGenerator()->create_course(); 808 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 809 810 $params = array( 811 'context' => context_system::instance(), 812 'other' => array('forumid' => $forum->id), 813 'relateduserid' => $user->id, 814 ); 815 816 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_MODULE.'); 817 \mod_forum\event\readtracking_enabled::create($params); 818 } 819 820 /** 821 * Test the readtracking_enabled event. 822 */ 823 public function test_readtracking_enabled() { 824 // Setup test data. 825 $user = $this->getDataGenerator()->create_user(); 826 $course = $this->getDataGenerator()->create_course(); 827 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 828 $context = context_module::instance($forum->cmid); 829 830 $params = array( 831 'context' => $context, 832 'other' => array('forumid' => $forum->id), 833 'relateduserid' => $user->id, 834 ); 835 836 $event = \mod_forum\event\readtracking_enabled::create($params); 837 838 // Trigger and capture the event. 839 $sink = $this->redirectEvents(); 840 $event->trigger(); 841 $events = $sink->get_events(); 842 $this->assertCount(1, $events); 843 $event = reset($events); 844 845 // Checking that the event contains the expected values. 846 $this->assertInstanceOf('\mod_forum\event\readtracking_enabled', $event); 847 $this->assertEquals($context, $event->get_context()); 848 $expected = array($course->id, 'forum', 'start tracking', "view.php?f={$forum->id}", $forum->id, $forum->cmid); 849 $this->assertEventLegacyLogData($expected, $event); 850 $url = new \moodle_url('/mod/forum/view.php', array('f' => $forum->id)); 851 $this->assertEquals($url, $event->get_url()); 852 $this->assertEventContextNotUsed($event); 853 854 $this->assertNotEmpty($event->get_name()); 855 } 856 857 /** 858 * Ensure readtracking_disabled event validates that the forumid is set. 859 */ 860 public function test_readtracking_disabled_forumid_validation() { 861 $user = $this->getDataGenerator()->create_user(); 862 $course = $this->getDataGenerator()->create_course(); 863 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 864 865 $params = array( 866 'context' => context_module::instance($forum->cmid), 867 'relateduserid' => $user->id, 868 ); 869 870 $this->setExpectedException('coding_exception', 'The \'forumid\' value must be set in other.'); 871 \mod_forum\event\readtracking_disabled::create($params); 872 } 873 874 /** 875 * Ensure readtracking_disabled event validates that the relateduserid is set. 876 */ 877 public function test_readtracking_disabled_relateduserid_validation() { 878 $course = $this->getDataGenerator()->create_course(); 879 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 880 881 $params = array( 882 'context' => context_module::instance($forum->cmid), 883 'objectid' => $forum->id, 884 ); 885 886 $this->setExpectedException('coding_exception', 'The \'relateduserid\' must be set.'); 887 \mod_forum\event\readtracking_disabled::create($params); 888 } 889 890 /** 891 * Ensure readtracking_disabled event validates that the contextlevel is correct 892 */ 893 public function test_readtracking_disabled_contextlevel_validation() { 894 $user = $this->getDataGenerator()->create_user(); 895 $course = $this->getDataGenerator()->create_course(); 896 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 897 898 $params = array( 899 'context' => context_system::instance(), 900 'other' => array('forumid' => $forum->id), 901 'relateduserid' => $user->id, 902 ); 903 904 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_MODULE.'); 905 \mod_forum\event\readtracking_disabled::create($params); 906 } 907 908 /** 909 * Test the readtracking_disabled event. 910 */ 911 public function test_readtracking_disabled() { 912 // Setup test data. 913 $user = $this->getDataGenerator()->create_user(); 914 $course = $this->getDataGenerator()->create_course(); 915 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 916 $context = context_module::instance($forum->cmid); 917 918 $params = array( 919 'context' => $context, 920 'other' => array('forumid' => $forum->id), 921 'relateduserid' => $user->id, 922 ); 923 924 $event = \mod_forum\event\readtracking_disabled::create($params); 925 926 // Trigger and capture the event. 927 $sink = $this->redirectEvents(); 928 $event->trigger(); 929 $events = $sink->get_events(); 930 $this->assertCount(1, $events); 931 $event = reset($events); 932 933 // Checking that the event contains the expected values. 934 $this->assertInstanceOf('\mod_forum\event\readtracking_disabled', $event); 935 $this->assertEquals($context, $event->get_context()); 936 $expected = array($course->id, 'forum', 'stop tracking', "view.php?f={$forum->id}", $forum->id, $forum->cmid); 937 $this->assertEventLegacyLogData($expected, $event); 938 $url = new \moodle_url('/mod/forum/view.php', array('f' => $forum->id)); 939 $this->assertEquals($url, $event->get_url()); 940 $this->assertEventContextNotUsed($event); 941 942 $this->assertNotEmpty($event->get_name()); 943 } 944 945 /** 946 * Ensure subscribers_viewed event validates that the forumid is set. 947 */ 948 public function test_subscribers_viewed_forumid_validation() { 949 $user = $this->getDataGenerator()->create_user(); 950 $course = $this->getDataGenerator()->create_course(); 951 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 952 953 $params = array( 954 'context' => context_module::instance($forum->cmid), 955 'relateduserid' => $user->id, 956 ); 957 958 $this->setExpectedException('coding_exception', 'The \'forumid\' value must be set in other.'); 959 \mod_forum\event\subscribers_viewed::create($params); 960 } 961 962 /** 963 * Ensure subscribers_viewed event validates that the contextlevel is correct. 964 */ 965 public function test_subscribers_viewed_contextlevel_validation() { 966 $user = $this->getDataGenerator()->create_user(); 967 $course = $this->getDataGenerator()->create_course(); 968 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 969 970 $params = array( 971 'context' => context_system::instance(), 972 'other' => array('forumid' => $forum->id), 973 'relateduserid' => $user->id, 974 ); 975 976 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_MODULE.'); 977 \mod_forum\event\subscribers_viewed::create($params); 978 } 979 980 /** 981 * Test the subscribers_viewed event. 982 */ 983 public function test_subscribers_viewed() { 984 // Setup test data. 985 $course = $this->getDataGenerator()->create_course(); 986 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 987 $context = context_module::instance($forum->cmid); 988 989 $params = array( 990 'context' => $context, 991 'other' => array('forumid' => $forum->id), 992 ); 993 994 $event = \mod_forum\event\subscribers_viewed::create($params); 995 996 // Trigger and capture the event. 997 $sink = $this->redirectEvents(); 998 $event->trigger(); 999 $events = $sink->get_events(); 1000 $this->assertCount(1, $events); 1001 $event = reset($events); 1002 1003 // Checking that the event contains the expected values. 1004 $this->assertInstanceOf('\mod_forum\event\subscribers_viewed', $event); 1005 $this->assertEquals($context, $event->get_context()); 1006 $expected = array($course->id, 'forum', 'view subscribers', "subscribers.php?id={$forum->id}", $forum->id, $forum->cmid); 1007 $this->assertEventLegacyLogData($expected, $event); 1008 $this->assertEventContextNotUsed($event); 1009 1010 $this->assertNotEmpty($event->get_name()); 1011 } 1012 1013 /** 1014 * Ensure user_report_viewed event validates that the reportmode is set. 1015 */ 1016 public function test_user_report_viewed_reportmode_validation() { 1017 $user = $this->getDataGenerator()->create_user(); 1018 $course = $this->getDataGenerator()->create_course(); 1019 1020 $params = array( 1021 'context' => context_course::instance($course->id), 1022 'relateduserid' => $user->id, 1023 ); 1024 1025 $this->setExpectedException('coding_exception', 'The \'reportmode\' value must be set in other.'); 1026 \mod_forum\event\user_report_viewed::create($params); 1027 } 1028 1029 /** 1030 * Ensure user_report_viewed event validates that the contextlevel is correct. 1031 */ 1032 public function test_user_report_viewed_contextlevel_validation() { 1033 $user = $this->getDataGenerator()->create_user(); 1034 $course = $this->getDataGenerator()->create_course(); 1035 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1036 1037 $params = array( 1038 'context' => context_module::instance($forum->cmid), 1039 'other' => array('reportmode' => 'posts'), 1040 'relateduserid' => $user->id, 1041 ); 1042 1043 $this->setExpectedException('coding_exception', 'Context level must be either CONTEXT_SYSTEM or CONTEXT_COURSE.'); 1044 \mod_forum\event\user_report_viewed::create($params); 1045 } 1046 1047 /** 1048 * Ensure user_report_viewed event validates that the relateduserid is set. 1049 */ 1050 public function test_user_report_viewed_relateduserid_validation() { 1051 1052 $params = array( 1053 'context' => context_system::instance(), 1054 'other' => array('reportmode' => 'posts'), 1055 ); 1056 1057 $this->setExpectedException('coding_exception', 'The \'relateduserid\' must be set.'); 1058 \mod_forum\event\user_report_viewed::create($params); 1059 } 1060 1061 /** 1062 * Test the user_report_viewed event. 1063 */ 1064 public function test_user_report_viewed() { 1065 // Setup test data. 1066 $user = $this->getDataGenerator()->create_user(); 1067 $course = $this->getDataGenerator()->create_course(); 1068 $context = context_course::instance($course->id); 1069 1070 $params = array( 1071 'context' => $context, 1072 'relateduserid' => $user->id, 1073 'other' => array('reportmode' => 'discussions'), 1074 ); 1075 1076 $event = \mod_forum\event\user_report_viewed::create($params); 1077 1078 // Trigger and capture the event. 1079 $sink = $this->redirectEvents(); 1080 $event->trigger(); 1081 $events = $sink->get_events(); 1082 $this->assertCount(1, $events); 1083 $event = reset($events); 1084 1085 // Checking that the event contains the expected values. 1086 $this->assertInstanceOf('\mod_forum\event\user_report_viewed', $event); 1087 $this->assertEquals($context, $event->get_context()); 1088 $expected = array($course->id, 'forum', 'user report', 1089 "user.php?id={$user->id}&mode=discussions&course={$course->id}", $user->id); 1090 $this->assertEventLegacyLogData($expected, $event); 1091 $this->assertEventContextNotUsed($event); 1092 1093 $this->assertNotEmpty($event->get_name()); 1094 } 1095 1096 /** 1097 * Ensure post_created event validates that the postid is set. 1098 */ 1099 public function test_post_created_postid_validation() { 1100 $course = $this->getDataGenerator()->create_course(); 1101 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1102 $user = $this->getDataGenerator()->create_user(); 1103 1104 // Add a discussion. 1105 $record = array(); 1106 $record['course'] = $course->id; 1107 $record['forum'] = $forum->id; 1108 $record['userid'] = $user->id; 1109 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1110 1111 $params = array( 1112 'context' => context_module::instance($forum->cmid), 1113 'other' => array('forumid' => $forum->id, 'forumtype' => $forum->type, 'discussionid' => $discussion->id) 1114 ); 1115 1116 \mod_forum\event\post_created::create($params); 1117 } 1118 1119 /** 1120 * Ensure post_created event validates that the discussionid is set. 1121 */ 1122 public function test_post_created_discussionid_validation() { 1123 $course = $this->getDataGenerator()->create_course(); 1124 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1125 $user = $this->getDataGenerator()->create_user(); 1126 1127 // Add a discussion. 1128 $record = array(); 1129 $record['course'] = $course->id; 1130 $record['forum'] = $forum->id; 1131 $record['userid'] = $user->id; 1132 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1133 1134 // Add a post. 1135 $record = array(); 1136 $record['discussion'] = $discussion->id; 1137 $record['userid'] = $user->id; 1138 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1139 1140 $params = array( 1141 'context' => context_module::instance($forum->cmid), 1142 'objectid' => $post->id, 1143 'other' => array('forumid' => $forum->id, 'forumtype' => $forum->type) 1144 ); 1145 1146 $this->setExpectedException('coding_exception', 'The \'discussionid\' value must be set in other.'); 1147 \mod_forum\event\post_created::create($params); 1148 } 1149 1150 /** 1151 * Ensure post_created event validates that the forumid is set. 1152 */ 1153 public function test_post_created_forumid_validation() { 1154 $course = $this->getDataGenerator()->create_course(); 1155 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1156 $user = $this->getDataGenerator()->create_user(); 1157 1158 // Add a discussion. 1159 $record = array(); 1160 $record['course'] = $course->id; 1161 $record['forum'] = $forum->id; 1162 $record['userid'] = $user->id; 1163 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1164 1165 // Add a post. 1166 $record = array(); 1167 $record['discussion'] = $discussion->id; 1168 $record['userid'] = $user->id; 1169 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1170 1171 $params = array( 1172 'context' => context_module::instance($forum->cmid), 1173 'objectid' => $post->id, 1174 'other' => array('discussionid' => $discussion->id, 'forumtype' => $forum->type) 1175 ); 1176 1177 $this->setExpectedException('coding_exception', 'The \'forumid\' value must be set in other.'); 1178 \mod_forum\event\post_created::create($params); 1179 } 1180 1181 /** 1182 * Ensure post_created event validates that the forumtype is set. 1183 */ 1184 public function test_post_created_forumtype_validation() { 1185 $course = $this->getDataGenerator()->create_course(); 1186 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1187 $user = $this->getDataGenerator()->create_user(); 1188 1189 // Add a discussion. 1190 $record = array(); 1191 $record['course'] = $course->id; 1192 $record['forum'] = $forum->id; 1193 $record['userid'] = $user->id; 1194 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1195 1196 // Add a post. 1197 $record = array(); 1198 $record['discussion'] = $discussion->id; 1199 $record['userid'] = $user->id; 1200 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1201 1202 $params = array( 1203 'context' => context_module::instance($forum->cmid), 1204 'objectid' => $post->id, 1205 'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id) 1206 ); 1207 1208 $this->setExpectedException('coding_exception', 'The \'forumtype\' value must be set in other.'); 1209 \mod_forum\event\post_created::create($params); 1210 } 1211 1212 /** 1213 * Ensure post_created event validates that the contextlevel is correct. 1214 */ 1215 public function test_post_created_context_validation() { 1216 $course = $this->getDataGenerator()->create_course(); 1217 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1218 $user = $this->getDataGenerator()->create_user(); 1219 1220 // Add a discussion. 1221 $record = array(); 1222 $record['course'] = $course->id; 1223 $record['forum'] = $forum->id; 1224 $record['userid'] = $user->id; 1225 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1226 1227 // Add a post. 1228 $record = array(); 1229 $record['discussion'] = $discussion->id; 1230 $record['userid'] = $user->id; 1231 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1232 1233 $params = array( 1234 'context' => context_system::instance(), 1235 'objectid' => $post->id, 1236 'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id, 'forumtype' => $forum->type) 1237 ); 1238 1239 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_MODULE'); 1240 \mod_forum\event\post_created::create($params); 1241 } 1242 1243 /** 1244 * Test the post_created event. 1245 */ 1246 public function test_post_created() { 1247 // Setup test data. 1248 $course = $this->getDataGenerator()->create_course(); 1249 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1250 $user = $this->getDataGenerator()->create_user(); 1251 1252 // Add a discussion. 1253 $record = array(); 1254 $record['course'] = $course->id; 1255 $record['forum'] = $forum->id; 1256 $record['userid'] = $user->id; 1257 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1258 1259 // Add a post. 1260 $record = array(); 1261 $record['discussion'] = $discussion->id; 1262 $record['userid'] = $user->id; 1263 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1264 1265 $context = context_module::instance($forum->cmid); 1266 1267 $params = array( 1268 'context' => $context, 1269 'objectid' => $post->id, 1270 'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id, 'forumtype' => $forum->type) 1271 ); 1272 1273 $event = \mod_forum\event\post_created::create($params); 1274 1275 // Trigger and capturing the event. 1276 $sink = $this->redirectEvents(); 1277 $event->trigger(); 1278 $events = $sink->get_events(); 1279 $this->assertCount(1, $events); 1280 $event = reset($events); 1281 1282 // Checking that the event contains the expected values. 1283 $this->assertInstanceOf('\mod_forum\event\post_created', $event); 1284 $this->assertEquals($context, $event->get_context()); 1285 $expected = array($course->id, 'forum', 'add post', "discuss.php?d={$discussion->id}#p{$post->id}", 1286 $forum->id, $forum->cmid); 1287 $this->assertEventLegacyLogData($expected, $event); 1288 $url = new \moodle_url('/mod/forum/discuss.php', array('d' => $discussion->id)); 1289 $url->set_anchor('p'.$event->objectid); 1290 $this->assertEquals($url, $event->get_url()); 1291 $this->assertEventContextNotUsed($event); 1292 1293 $this->assertNotEmpty($event->get_name()); 1294 } 1295 1296 /** 1297 * Test the post_created event for a single discussion forum. 1298 */ 1299 public function test_post_created_single() { 1300 // Setup test data. 1301 $course = $this->getDataGenerator()->create_course(); 1302 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id, 'type' => 'single')); 1303 $user = $this->getDataGenerator()->create_user(); 1304 1305 // Add a discussion. 1306 $record = array(); 1307 $record['course'] = $course->id; 1308 $record['forum'] = $forum->id; 1309 $record['userid'] = $user->id; 1310 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1311 1312 // Add a post. 1313 $record = array(); 1314 $record['discussion'] = $discussion->id; 1315 $record['userid'] = $user->id; 1316 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1317 1318 $context = context_module::instance($forum->cmid); 1319 1320 $params = array( 1321 'context' => $context, 1322 'objectid' => $post->id, 1323 'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id, 'forumtype' => $forum->type) 1324 ); 1325 1326 $event = \mod_forum\event\post_created::create($params); 1327 1328 // Trigger and capturing the event. 1329 $sink = $this->redirectEvents(); 1330 $event->trigger(); 1331 $events = $sink->get_events(); 1332 $this->assertCount(1, $events); 1333 $event = reset($events); 1334 1335 // Checking that the event contains the expected values. 1336 $this->assertInstanceOf('\mod_forum\event\post_created', $event); 1337 $this->assertEquals($context, $event->get_context()); 1338 $expected = array($course->id, 'forum', 'add post', "view.php?f={$forum->id}#p{$post->id}", 1339 $forum->id, $forum->cmid); 1340 $this->assertEventLegacyLogData($expected, $event); 1341 $url = new \moodle_url('/mod/forum/view.php', array('f' => $forum->id)); 1342 $url->set_anchor('p'.$event->objectid); 1343 $this->assertEquals($url, $event->get_url()); 1344 $this->assertEventContextNotUsed($event); 1345 1346 $this->assertNotEmpty($event->get_name()); 1347 } 1348 1349 /** 1350 * Ensure post_deleted event validates that the postid is set. 1351 */ 1352 public function test_post_deleted_postid_validation() { 1353 $course = $this->getDataGenerator()->create_course(); 1354 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1355 $user = $this->getDataGenerator()->create_user(); 1356 1357 // Add a discussion. 1358 $record = array(); 1359 $record['course'] = $course->id; 1360 $record['forum'] = $forum->id; 1361 $record['userid'] = $user->id; 1362 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1363 1364 $params = array( 1365 'context' => context_module::instance($forum->cmid), 1366 'other' => array('forumid' => $forum->id, 'forumtype' => $forum->type, 'discussionid' => $discussion->id) 1367 ); 1368 1369 \mod_forum\event\post_deleted::create($params); 1370 } 1371 1372 /** 1373 * Ensure post_deleted event validates that the discussionid is set. 1374 */ 1375 public function test_post_deleted_discussionid_validation() { 1376 $course = $this->getDataGenerator()->create_course(); 1377 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1378 $user = $this->getDataGenerator()->create_user(); 1379 1380 // Add a discussion. 1381 $record = array(); 1382 $record['course'] = $course->id; 1383 $record['forum'] = $forum->id; 1384 $record['userid'] = $user->id; 1385 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1386 1387 // Add a post. 1388 $record = array(); 1389 $record['discussion'] = $discussion->id; 1390 $record['userid'] = $user->id; 1391 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1392 1393 $params = array( 1394 'context' => context_module::instance($forum->cmid), 1395 'objectid' => $post->id, 1396 'other' => array('forumid' => $forum->id, 'forumtype' => $forum->type) 1397 ); 1398 1399 $this->setExpectedException('coding_exception', 'The \'discussionid\' value must be set in other.'); 1400 \mod_forum\event\post_deleted::create($params); 1401 } 1402 1403 /** 1404 * Ensure post_deleted event validates that the forumid is set. 1405 */ 1406 public function test_post_deleted_forumid_validation() { 1407 $course = $this->getDataGenerator()->create_course(); 1408 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1409 $user = $this->getDataGenerator()->create_user(); 1410 1411 // Add a discussion. 1412 $record = array(); 1413 $record['course'] = $course->id; 1414 $record['forum'] = $forum->id; 1415 $record['userid'] = $user->id; 1416 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1417 1418 // Add a post. 1419 $record = array(); 1420 $record['discussion'] = $discussion->id; 1421 $record['userid'] = $user->id; 1422 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1423 1424 $params = array( 1425 'context' => context_module::instance($forum->cmid), 1426 'objectid' => $post->id, 1427 'other' => array('discussionid' => $discussion->id, 'forumtype' => $forum->type) 1428 ); 1429 1430 $this->setExpectedException('coding_exception', 'The \'forumid\' value must be set in other.'); 1431 \mod_forum\event\post_deleted::create($params); 1432 } 1433 1434 /** 1435 * Ensure post_deleted event validates that the forumtype is set. 1436 */ 1437 public function test_post_deleted_forumtype_validation() { 1438 $course = $this->getDataGenerator()->create_course(); 1439 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1440 $user = $this->getDataGenerator()->create_user(); 1441 1442 // Add a discussion. 1443 $record = array(); 1444 $record['course'] = $course->id; 1445 $record['forum'] = $forum->id; 1446 $record['userid'] = $user->id; 1447 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1448 1449 // Add a post. 1450 $record = array(); 1451 $record['discussion'] = $discussion->id; 1452 $record['userid'] = $user->id; 1453 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1454 1455 $params = array( 1456 'context' => context_module::instance($forum->cmid), 1457 'objectid' => $post->id, 1458 'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id) 1459 ); 1460 1461 $this->setExpectedException('coding_exception', 'The \'forumtype\' value must be set in other.'); 1462 \mod_forum\event\post_deleted::create($params); 1463 } 1464 1465 /** 1466 * Ensure post_deleted event validates that the contextlevel is correct. 1467 */ 1468 public function test_post_deleted_context_validation() { 1469 $course = $this->getDataGenerator()->create_course(); 1470 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1471 $user = $this->getDataGenerator()->create_user(); 1472 1473 // Add a discussion. 1474 $record = array(); 1475 $record['course'] = $course->id; 1476 $record['forum'] = $forum->id; 1477 $record['userid'] = $user->id; 1478 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1479 1480 // Add a post. 1481 $record = array(); 1482 $record['discussion'] = $discussion->id; 1483 $record['userid'] = $user->id; 1484 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1485 1486 $params = array( 1487 'context' => context_system::instance(), 1488 'objectid' => $post->id, 1489 'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id, 'forumtype' => $forum->type) 1490 ); 1491 1492 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_MODULE'); 1493 \mod_forum\event\post_deleted::create($params); 1494 } 1495 1496 /** 1497 * Test post_deleted event. 1498 */ 1499 public function test_post_deleted() { 1500 // Setup test data. 1501 $course = $this->getDataGenerator()->create_course(); 1502 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1503 $user = $this->getDataGenerator()->create_user(); 1504 1505 // Add a discussion. 1506 $record = array(); 1507 $record['course'] = $course->id; 1508 $record['forum'] = $forum->id; 1509 $record['userid'] = $user->id; 1510 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1511 1512 // Add a post. 1513 $record = array(); 1514 $record['discussion'] = $discussion->id; 1515 $record['userid'] = $user->id; 1516 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1517 1518 $context = context_module::instance($forum->cmid); 1519 1520 $params = array( 1521 'context' => $context, 1522 'objectid' => $post->id, 1523 'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id, 'forumtype' => $forum->type) 1524 ); 1525 1526 $event = \mod_forum\event\post_deleted::create($params); 1527 1528 // Trigger and capture the event. 1529 $sink = $this->redirectEvents(); 1530 $event->trigger(); 1531 $events = $sink->get_events(); 1532 $this->assertCount(1, $events); 1533 $event = reset($events); 1534 1535 // Checking that the event contains the expected values. 1536 $this->assertInstanceOf('\mod_forum\event\post_deleted', $event); 1537 $this->assertEquals($context, $event->get_context()); 1538 $expected = array($course->id, 'forum', 'delete post', "discuss.php?d={$discussion->id}", $post->id, $forum->cmid); 1539 $this->assertEventLegacyLogData($expected, $event); 1540 $url = new \moodle_url('/mod/forum/discuss.php', array('d' => $discussion->id)); 1541 $this->assertEquals($url, $event->get_url()); 1542 $this->assertEventContextNotUsed($event); 1543 1544 $this->assertNotEmpty($event->get_name()); 1545 } 1546 1547 /** 1548 * Test post_deleted event for a single discussion forum. 1549 */ 1550 public function test_post_deleted_single() { 1551 // Setup test data. 1552 $course = $this->getDataGenerator()->create_course(); 1553 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id, 'type' => 'single')); 1554 $user = $this->getDataGenerator()->create_user(); 1555 1556 // Add a discussion. 1557 $record = array(); 1558 $record['course'] = $course->id; 1559 $record['forum'] = $forum->id; 1560 $record['userid'] = $user->id; 1561 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1562 1563 // Add a post. 1564 $record = array(); 1565 $record['discussion'] = $discussion->id; 1566 $record['userid'] = $user->id; 1567 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1568 1569 $context = context_module::instance($forum->cmid); 1570 1571 $params = array( 1572 'context' => $context, 1573 'objectid' => $post->id, 1574 'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id, 'forumtype' => $forum->type) 1575 ); 1576 1577 $event = \mod_forum\event\post_deleted::create($params); 1578 1579 // Trigger and capture the event. 1580 $sink = $this->redirectEvents(); 1581 $event->trigger(); 1582 $events = $sink->get_events(); 1583 $this->assertCount(1, $events); 1584 $event = reset($events); 1585 1586 // Checking that the event contains the expected values. 1587 $this->assertInstanceOf('\mod_forum\event\post_deleted', $event); 1588 $this->assertEquals($context, $event->get_context()); 1589 $expected = array($course->id, 'forum', 'delete post', "view.php?f={$forum->id}", $post->id, $forum->cmid); 1590 $this->assertEventLegacyLogData($expected, $event); 1591 $url = new \moodle_url('/mod/forum/view.php', array('f' => $forum->id)); 1592 $this->assertEquals($url, $event->get_url()); 1593 $this->assertEventContextNotUsed($event); 1594 1595 $this->assertNotEmpty($event->get_name()); 1596 } 1597 1598 /** 1599 * Ensure post_updated event validates that the discussionid is set. 1600 */ 1601 public function test_post_updated_discussionid_validation() { 1602 $course = $this->getDataGenerator()->create_course(); 1603 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1604 $user = $this->getDataGenerator()->create_user(); 1605 1606 // Add a discussion. 1607 $record = array(); 1608 $record['course'] = $course->id; 1609 $record['forum'] = $forum->id; 1610 $record['userid'] = $user->id; 1611 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1612 1613 // Add a post. 1614 $record = array(); 1615 $record['discussion'] = $discussion->id; 1616 $record['userid'] = $user->id; 1617 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1618 1619 $params = array( 1620 'context' => context_module::instance($forum->cmid), 1621 'objectid' => $post->id, 1622 'other' => array('forumid' => $forum->id, 'forumtype' => $forum->type) 1623 ); 1624 1625 $this->setExpectedException('coding_exception', 'The \'discussionid\' value must be set in other.'); 1626 \mod_forum\event\post_updated::create($params); 1627 } 1628 1629 /** 1630 * Ensure post_updated event validates that the forumid is set. 1631 */ 1632 public function test_post_updated_forumid_validation() { 1633 $course = $this->getDataGenerator()->create_course(); 1634 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1635 $user = $this->getDataGenerator()->create_user(); 1636 1637 // Add a discussion. 1638 $record = array(); 1639 $record['course'] = $course->id; 1640 $record['forum'] = $forum->id; 1641 $record['userid'] = $user->id; 1642 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1643 1644 // Add a post. 1645 $record = array(); 1646 $record['discussion'] = $discussion->id; 1647 $record['userid'] = $user->id; 1648 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1649 1650 $params = array( 1651 'context' => context_module::instance($forum->cmid), 1652 'objectid' => $post->id, 1653 'other' => array('discussionid' => $discussion->id, 'forumtype' => $forum->type) 1654 ); 1655 1656 $this->setExpectedException('coding_exception', 'The \'forumid\' value must be set in other.'); 1657 \mod_forum\event\post_updated::create($params); 1658 } 1659 1660 /** 1661 * Ensure post_updated event validates that the forumtype is set. 1662 */ 1663 public function test_post_updated_forumtype_validation() { 1664 $course = $this->getDataGenerator()->create_course(); 1665 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1666 $user = $this->getDataGenerator()->create_user(); 1667 1668 // Add a discussion. 1669 $record = array(); 1670 $record['course'] = $course->id; 1671 $record['forum'] = $forum->id; 1672 $record['userid'] = $user->id; 1673 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1674 1675 // Add a post. 1676 $record = array(); 1677 $record['discussion'] = $discussion->id; 1678 $record['userid'] = $user->id; 1679 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1680 1681 $params = array( 1682 'context' => context_module::instance($forum->cmid), 1683 'objectid' => $post->id, 1684 'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id) 1685 ); 1686 1687 $this->setExpectedException('coding_exception', 'The \'forumtype\' value must be set in other.'); 1688 \mod_forum\event\post_updated::create($params); 1689 } 1690 1691 /** 1692 * Ensure post_updated event validates that the contextlevel is correct. 1693 */ 1694 public function test_post_updated_context_validation() { 1695 $course = $this->getDataGenerator()->create_course(); 1696 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1697 $user = $this->getDataGenerator()->create_user(); 1698 1699 // Add a discussion. 1700 $record = array(); 1701 $record['course'] = $course->id; 1702 $record['forum'] = $forum->id; 1703 $record['userid'] = $user->id; 1704 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1705 1706 // Add a post. 1707 $record = array(); 1708 $record['discussion'] = $discussion->id; 1709 $record['userid'] = $user->id; 1710 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1711 1712 $params = array( 1713 'context' => context_system::instance(), 1714 'objectid' => $post->id, 1715 'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id, 'forumtype' => $forum->type) 1716 ); 1717 1718 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_MODULE'); 1719 \mod_forum\event\post_updated::create($params); 1720 } 1721 1722 /** 1723 * Test post_updated event. 1724 */ 1725 public function test_post_updated() { 1726 // Setup test data. 1727 $course = $this->getDataGenerator()->create_course(); 1728 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); 1729 $user = $this->getDataGenerator()->create_user(); 1730 1731 // Add a discussion. 1732 $record = array(); 1733 $record['course'] = $course->id; 1734 $record['forum'] = $forum->id; 1735 $record['userid'] = $user->id; 1736 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1737 1738 // Add a post. 1739 $record = array(); 1740 $record['discussion'] = $discussion->id; 1741 $record['userid'] = $user->id; 1742 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1743 1744 $context = context_module::instance($forum->cmid); 1745 1746 $params = array( 1747 'context' => $context, 1748 'objectid' => $post->id, 1749 'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id, 'forumtype' => $forum->type) 1750 ); 1751 1752 $event = \mod_forum\event\post_updated::create($params); 1753 1754 // Trigger and capturing the event. 1755 $sink = $this->redirectEvents(); 1756 $event->trigger(); 1757 $events = $sink->get_events(); 1758 $this->assertCount(1, $events); 1759 $event = reset($events); 1760 1761 // Checking that the event contains the expected values. 1762 $this->assertInstanceOf('\mod_forum\event\post_updated', $event); 1763 $this->assertEquals($context, $event->get_context()); 1764 $expected = array($course->id, 'forum', 'update post', "discuss.php?d={$discussion->id}#p{$post->id}", 1765 $post->id, $forum->cmid); 1766 $this->assertEventLegacyLogData($expected, $event); 1767 $url = new \moodle_url('/mod/forum/discuss.php', array('d' => $discussion->id)); 1768 $url->set_anchor('p'.$event->objectid); 1769 $this->assertEquals($url, $event->get_url()); 1770 $this->assertEventContextNotUsed($event); 1771 1772 $this->assertNotEmpty($event->get_name()); 1773 } 1774 1775 /** 1776 * Test post_updated event. 1777 */ 1778 public function test_post_updated_single() { 1779 // Setup test data. 1780 $course = $this->getDataGenerator()->create_course(); 1781 $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id, 'type' => 'single')); 1782 $user = $this->getDataGenerator()->create_user(); 1783 1784 // Add a discussion. 1785 $record = array(); 1786 $record['course'] = $course->id; 1787 $record['forum'] = $forum->id; 1788 $record['userid'] = $user->id; 1789 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1790 1791 // Add a post. 1792 $record = array(); 1793 $record['discussion'] = $discussion->id; 1794 $record['userid'] = $user->id; 1795 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1796 1797 $context = context_module::instance($forum->cmid); 1798 1799 $params = array( 1800 'context' => $context, 1801 'objectid' => $post->id, 1802 'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id, 'forumtype' => $forum->type) 1803 ); 1804 1805 $event = \mod_forum\event\post_updated::create($params); 1806 1807 // Trigger and capturing the event. 1808 $sink = $this->redirectEvents(); 1809 $event->trigger(); 1810 $events = $sink->get_events(); 1811 $this->assertCount(1, $events); 1812 $event = reset($events); 1813 1814 // Checking that the event contains the expected values. 1815 $this->assertInstanceOf('\mod_forum\event\post_updated', $event); 1816 $this->assertEquals($context, $event->get_context()); 1817 $expected = array($course->id, 'forum', 'update post', "view.php?f={$forum->id}#p{$post->id}", 1818 $post->id, $forum->cmid); 1819 $this->assertEventLegacyLogData($expected, $event); 1820 $url = new \moodle_url('/mod/forum/view.php', array('f' => $forum->id)); 1821 $url->set_anchor('p'.$post->id); 1822 $this->assertEquals($url, $event->get_url()); 1823 $this->assertEventContextNotUsed($event); 1824 1825 $this->assertNotEmpty($event->get_name()); 1826 } 1827 1828 /** 1829 * Test discussion_subscription_created event. 1830 */ 1831 public function test_discussion_subscription_created() { 1832 global $CFG; 1833 require_once($CFG->dirroot . '/mod/forum/lib.php'); 1834 1835 // Setup test data. 1836 $course = $this->getDataGenerator()->create_course(); 1837 $user = $this->getDataGenerator()->create_user(); 1838 $this->getDataGenerator()->enrol_user($user->id, $course->id); 1839 1840 $options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE); 1841 $forum = $this->getDataGenerator()->create_module('forum', $options); 1842 1843 // Add a discussion. 1844 $record = array(); 1845 $record['course'] = $course->id; 1846 $record['forum'] = $forum->id; 1847 $record['userid'] = $user->id; 1848 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1849 1850 // Add a post. 1851 $record = array(); 1852 $record['discussion'] = $discussion->id; 1853 $record['userid'] = $user->id; 1854 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1855 1856 // Trigger and capturing the event. 1857 $sink = $this->redirectEvents(); 1858 1859 // Trigger the event by subscribing the user to the forum discussion. 1860 \mod_forum\subscriptions::subscribe_user_to_discussion($user->id, $discussion); 1861 1862 $events = $sink->get_events(); 1863 $this->assertCount(1, $events); 1864 $event = reset($events); 1865 1866 // Checking that the event contains the expected values. 1867 $this->assertInstanceOf('\mod_forum\event\discussion_subscription_created', $event); 1868 1869 1870 $cm = get_coursemodule_from_instance('forum', $discussion->forum); 1871 $context = \context_module::instance($cm->id); 1872 $this->assertEquals($context, $event->get_context()); 1873 1874 $url = new \moodle_url('/mod/forum/subscribe.php', array( 1875 'id' => $forum->id, 1876 'd' => $discussion->id 1877 )); 1878 1879 $this->assertEquals($url, $event->get_url()); 1880 $this->assertEventContextNotUsed($event); 1881 $this->assertNotEmpty($event->get_name()); 1882 } 1883 1884 /** 1885 * Test validation of discussion_subscription_created event. 1886 */ 1887 public function test_discussion_subscription_created_validation() { 1888 global $CFG, $DB; 1889 require_once($CFG->dirroot . '/mod/forum/lib.php'); 1890 1891 // Setup test data. 1892 $course = $this->getDataGenerator()->create_course(); 1893 $user = $this->getDataGenerator()->create_user(); 1894 $this->getDataGenerator()->enrol_user($user->id, $course->id); 1895 1896 $options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE); 1897 $forum = $this->getDataGenerator()->create_module('forum', $options); 1898 1899 // Add a discussion. 1900 $record = array(); 1901 $record['course'] = $course->id; 1902 $record['forum'] = $forum->id; 1903 $record['userid'] = $user->id; 1904 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1905 1906 // Add a post. 1907 $record = array(); 1908 $record['discussion'] = $discussion->id; 1909 $record['userid'] = $user->id; 1910 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1911 1912 // The user is not subscribed to the forum. Insert a new discussion subscription. 1913 $subscription = new \stdClass(); 1914 $subscription->userid = $user->id; 1915 $subscription->forum = $forum->id; 1916 $subscription->discussion = $discussion->id; 1917 $subscription->preference = time(); 1918 1919 $subscription->id = $DB->insert_record('forum_discussion_subs', $subscription); 1920 1921 $context = context_module::instance($forum->cmid); 1922 1923 $params = array( 1924 'context' => $context, 1925 'objectid' => $subscription->id, 1926 'relateduserid' => $user->id, 1927 'other' => array( 1928 'forumid' => $forum->id, 1929 'discussion' => $discussion->id, 1930 ) 1931 ); 1932 1933 $event = \mod_forum\event\discussion_subscription_created::create($params); 1934 1935 // Trigger and capturing the event. 1936 $sink = $this->redirectEvents(); 1937 $event->trigger(); 1938 $events = $sink->get_events(); 1939 $this->assertCount(1, $events); 1940 $event = reset($events); 1941 } 1942 1943 /** 1944 * Test contextlevel validation of discussion_subscription_created event. 1945 */ 1946 public function test_discussion_subscription_created_validation_contextlevel() { 1947 global $CFG, $DB; 1948 require_once($CFG->dirroot . '/mod/forum/lib.php'); 1949 1950 // Setup test data. 1951 $course = $this->getDataGenerator()->create_course(); 1952 $user = $this->getDataGenerator()->create_user(); 1953 $this->getDataGenerator()->enrol_user($user->id, $course->id); 1954 1955 $options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE); 1956 $forum = $this->getDataGenerator()->create_module('forum', $options); 1957 1958 // Add a discussion. 1959 $record = array(); 1960 $record['course'] = $course->id; 1961 $record['forum'] = $forum->id; 1962 $record['userid'] = $user->id; 1963 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 1964 1965 // Add a post. 1966 $record = array(); 1967 $record['discussion'] = $discussion->id; 1968 $record['userid'] = $user->id; 1969 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 1970 1971 // The user is not subscribed to the forum. Insert a new discussion subscription. 1972 $subscription = new \stdClass(); 1973 $subscription->userid = $user->id; 1974 $subscription->forum = $forum->id; 1975 $subscription->discussion = $discussion->id; 1976 $subscription->preference = time(); 1977 1978 $subscription->id = $DB->insert_record('forum_discussion_subs', $subscription); 1979 1980 $context = context_module::instance($forum->cmid); 1981 1982 $params = array( 1983 'context' => \context_course::instance($course->id), 1984 'objectid' => $subscription->id, 1985 'relateduserid' => $user->id, 1986 'other' => array( 1987 'forumid' => $forum->id, 1988 'discussion' => $discussion->id, 1989 ) 1990 ); 1991 1992 // Without an invalid context. 1993 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_MODULE.'); 1994 \mod_forum\event\discussion_subscription_created::create($params); 1995 } 1996 1997 /** 1998 * Test discussion validation of discussion_subscription_created event. 1999 */ 2000 public function test_discussion_subscription_created_validation_discussion() { 2001 global $CFG, $DB; 2002 require_once($CFG->dirroot . '/mod/forum/lib.php'); 2003 2004 // Setup test data. 2005 $course = $this->getDataGenerator()->create_course(); 2006 $user = $this->getDataGenerator()->create_user(); 2007 $this->getDataGenerator()->enrol_user($user->id, $course->id); 2008 2009 $options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE); 2010 $forum = $this->getDataGenerator()->create_module('forum', $options); 2011 2012 // Add a discussion. 2013 $record = array(); 2014 $record['course'] = $course->id; 2015 $record['forum'] = $forum->id; 2016 $record['userid'] = $user->id; 2017 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 2018 2019 // Add a post. 2020 $record = array(); 2021 $record['discussion'] = $discussion->id; 2022 $record['userid'] = $user->id; 2023 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 2024 2025 // The user is not subscribed to the forum. Insert a new discussion subscription. 2026 $subscription = new \stdClass(); 2027 $subscription->userid = $user->id; 2028 $subscription->forum = $forum->id; 2029 $subscription->discussion = $discussion->id; 2030 $subscription->preference = time(); 2031 2032 $subscription->id = $DB->insert_record('forum_discussion_subs', $subscription); 2033 2034 // Without the discussion. 2035 $params = array( 2036 'context' => context_module::instance($forum->cmid), 2037 'objectid' => $subscription->id, 2038 'relateduserid' => $user->id, 2039 'other' => array( 2040 'forumid' => $forum->id, 2041 ) 2042 ); 2043 2044 $this->setExpectedException('coding_exception', "The 'discussion' value must be set in other."); 2045 \mod_forum\event\discussion_subscription_created::create($params); 2046 } 2047 2048 /** 2049 * Test forumid validation of discussion_subscription_created event. 2050 */ 2051 public function test_discussion_subscription_created_validation_forumid() { 2052 global $CFG, $DB; 2053 require_once($CFG->dirroot . '/mod/forum/lib.php'); 2054 2055 // Setup test data. 2056 $course = $this->getDataGenerator()->create_course(); 2057 $user = $this->getDataGenerator()->create_user(); 2058 $this->getDataGenerator()->enrol_user($user->id, $course->id); 2059 2060 $options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE); 2061 $forum = $this->getDataGenerator()->create_module('forum', $options); 2062 2063 // Add a discussion. 2064 $record = array(); 2065 $record['course'] = $course->id; 2066 $record['forum'] = $forum->id; 2067 $record['userid'] = $user->id; 2068 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 2069 2070 // Add a post. 2071 $record = array(); 2072 $record['discussion'] = $discussion->id; 2073 $record['userid'] = $user->id; 2074 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 2075 2076 // The user is not subscribed to the forum. Insert a new discussion subscription. 2077 $subscription = new \stdClass(); 2078 $subscription->userid = $user->id; 2079 $subscription->forum = $forum->id; 2080 $subscription->discussion = $discussion->id; 2081 $subscription->preference = time(); 2082 2083 $subscription->id = $DB->insert_record('forum_discussion_subs', $subscription); 2084 2085 // Without the forumid. 2086 $params = array( 2087 'context' => context_module::instance($forum->cmid), 2088 'objectid' => $subscription->id, 2089 'relateduserid' => $user->id, 2090 'other' => array( 2091 'discussion' => $discussion->id, 2092 ) 2093 ); 2094 2095 $this->setExpectedException('coding_exception', "The 'forumid' value must be set in other."); 2096 \mod_forum\event\discussion_subscription_created::create($params); 2097 } 2098 2099 /** 2100 * Test relateduserid validation of discussion_subscription_created event. 2101 */ 2102 public function test_discussion_subscription_created_validation_relateduserid() { 2103 global $CFG, $DB; 2104 require_once($CFG->dirroot . '/mod/forum/lib.php'); 2105 2106 // Setup test data. 2107 $course = $this->getDataGenerator()->create_course(); 2108 $user = $this->getDataGenerator()->create_user(); 2109 $this->getDataGenerator()->enrol_user($user->id, $course->id); 2110 2111 $options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE); 2112 $forum = $this->getDataGenerator()->create_module('forum', $options); 2113 2114 // Add a discussion. 2115 $record = array(); 2116 $record['course'] = $course->id; 2117 $record['forum'] = $forum->id; 2118 $record['userid'] = $user->id; 2119 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 2120 2121 // Add a post. 2122 $record = array(); 2123 $record['discussion'] = $discussion->id; 2124 $record['userid'] = $user->id; 2125 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 2126 2127 // The user is not subscribed to the forum. Insert a new discussion subscription. 2128 $subscription = new \stdClass(); 2129 $subscription->userid = $user->id; 2130 $subscription->forum = $forum->id; 2131 $subscription->discussion = $discussion->id; 2132 $subscription->preference = time(); 2133 2134 $subscription->id = $DB->insert_record('forum_discussion_subs', $subscription); 2135 2136 $context = context_module::instance($forum->cmid); 2137 2138 // Without the relateduserid. 2139 $params = array( 2140 'context' => context_module::instance($forum->cmid), 2141 'objectid' => $subscription->id, 2142 'other' => array( 2143 'forumid' => $forum->id, 2144 'discussion' => $discussion->id, 2145 ) 2146 ); 2147 2148 $this->setExpectedException('coding_exception', "The 'relateduserid' must be set."); 2149 \mod_forum\event\discussion_subscription_created::create($params); 2150 } 2151 2152 /** 2153 * Test discussion_subscription_deleted event. 2154 */ 2155 public function test_discussion_subscription_deleted() { 2156 global $CFG; 2157 require_once($CFG->dirroot . '/mod/forum/lib.php'); 2158 2159 // Setup test data. 2160 $course = $this->getDataGenerator()->create_course(); 2161 $user = $this->getDataGenerator()->create_user(); 2162 $this->getDataGenerator()->enrol_user($user->id, $course->id); 2163 2164 $options = array('course' => $course->id, 'forcesubscribe' => FORUM_INITIALSUBSCRIBE); 2165 $forum = $this->getDataGenerator()->create_module('forum', $options); 2166 2167 // Add a discussion. 2168 $record = array(); 2169 $record['course'] = $course->id; 2170 $record['forum'] = $forum->id; 2171 $record['userid'] = $user->id; 2172 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 2173 2174 // Add a post. 2175 $record = array(); 2176 $record['discussion'] = $discussion->id; 2177 $record['userid'] = $user->id; 2178 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 2179 2180 // Trigger and capturing the event. 2181 $sink = $this->redirectEvents(); 2182 2183 // Trigger the event by unsubscribing the user to the forum discussion. 2184 \mod_forum\subscriptions::unsubscribe_user_from_discussion($user->id, $discussion); 2185 2186 $events = $sink->get_events(); 2187 $this->assertCount(1, $events); 2188 $event = reset($events); 2189 2190 // Checking that the event contains the expected values. 2191 $this->assertInstanceOf('\mod_forum\event\discussion_subscription_deleted', $event); 2192 2193 2194 $cm = get_coursemodule_from_instance('forum', $discussion->forum); 2195 $context = \context_module::instance($cm->id); 2196 $this->assertEquals($context, $event->get_context()); 2197 2198 $url = new \moodle_url('/mod/forum/subscribe.php', array( 2199 'id' => $forum->id, 2200 'd' => $discussion->id 2201 )); 2202 2203 $this->assertEquals($url, $event->get_url()); 2204 $this->assertEventContextNotUsed($event); 2205 $this->assertNotEmpty($event->get_name()); 2206 } 2207 2208 /** 2209 * Test validation of discussion_subscription_deleted event. 2210 */ 2211 public function test_discussion_subscription_deleted_validation() { 2212 global $CFG, $DB; 2213 require_once($CFG->dirroot . '/mod/forum/lib.php'); 2214 2215 // Setup test data. 2216 $course = $this->getDataGenerator()->create_course(); 2217 $user = $this->getDataGenerator()->create_user(); 2218 $this->getDataGenerator()->enrol_user($user->id, $course->id); 2219 2220 $options = array('course' => $course->id, 'forcesubscribe' => FORUM_INITIALSUBSCRIBE); 2221 $forum = $this->getDataGenerator()->create_module('forum', $options); 2222 2223 // Add a discussion. 2224 $record = array(); 2225 $record['course'] = $course->id; 2226 $record['forum'] = $forum->id; 2227 $record['userid'] = $user->id; 2228 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 2229 2230 // Add a post. 2231 $record = array(); 2232 $record['discussion'] = $discussion->id; 2233 $record['userid'] = $user->id; 2234 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 2235 2236 // The user is not subscribed to the forum. Insert a new discussion subscription. 2237 $subscription = new \stdClass(); 2238 $subscription->userid = $user->id; 2239 $subscription->forum = $forum->id; 2240 $subscription->discussion = $discussion->id; 2241 $subscription->preference = \mod_forum\subscriptions::FORUM_DISCUSSION_UNSUBSCRIBED; 2242 2243 $subscription->id = $DB->insert_record('forum_discussion_subs', $subscription); 2244 2245 $context = context_module::instance($forum->cmid); 2246 2247 $params = array( 2248 'context' => $context, 2249 'objectid' => $subscription->id, 2250 'relateduserid' => $user->id, 2251 'other' => array( 2252 'forumid' => $forum->id, 2253 'discussion' => $discussion->id, 2254 ) 2255 ); 2256 2257 $event = \mod_forum\event\discussion_subscription_deleted::create($params); 2258 2259 // Trigger and capturing the event. 2260 $sink = $this->redirectEvents(); 2261 $event->trigger(); 2262 $events = $sink->get_events(); 2263 $this->assertCount(1, $events); 2264 $event = reset($events); 2265 2266 // Without an invalid context. 2267 $params['context'] = \context_course::instance($course->id); 2268 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_MODULE.'); 2269 \mod_forum\event\discussion_deleted::create($params); 2270 2271 // Without the discussion. 2272 unset($params['discussion']); 2273 $this->setExpectedException('coding_exception', 'The \'discussion\' value must be set in other.'); 2274 \mod_forum\event\discussion_deleted::create($params); 2275 2276 // Without the forumid. 2277 unset($params['forumid']); 2278 $this->setExpectedException('coding_exception', 'The \'forumid\' value must be set in other.'); 2279 \mod_forum\event\discussion_deleted::create($params); 2280 2281 // Without the relateduserid. 2282 unset($params['relateduserid']); 2283 $this->setExpectedException('coding_exception', 'The \'relateduserid\' value must be set in other.'); 2284 \mod_forum\event\discussion_deleted::create($params); 2285 } 2286 2287 /** 2288 * Test contextlevel validation of discussion_subscription_deleted event. 2289 */ 2290 public function test_discussion_subscription_deleted_validation_contextlevel() { 2291 global $CFG, $DB; 2292 require_once($CFG->dirroot . '/mod/forum/lib.php'); 2293 2294 // Setup test data. 2295 $course = $this->getDataGenerator()->create_course(); 2296 $user = $this->getDataGenerator()->create_user(); 2297 $this->getDataGenerator()->enrol_user($user->id, $course->id); 2298 2299 $options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE); 2300 $forum = $this->getDataGenerator()->create_module('forum', $options); 2301 2302 // Add a discussion. 2303 $record = array(); 2304 $record['course'] = $course->id; 2305 $record['forum'] = $forum->id; 2306 $record['userid'] = $user->id; 2307 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 2308 2309 // Add a post. 2310 $record = array(); 2311 $record['discussion'] = $discussion->id; 2312 $record['userid'] = $user->id; 2313 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 2314 2315 // The user is not subscribed to the forum. Insert a new discussion subscription. 2316 $subscription = new \stdClass(); 2317 $subscription->userid = $user->id; 2318 $subscription->forum = $forum->id; 2319 $subscription->discussion = $discussion->id; 2320 $subscription->preference = time(); 2321 2322 $subscription->id = $DB->insert_record('forum_discussion_subs', $subscription); 2323 2324 $context = context_module::instance($forum->cmid); 2325 2326 $params = array( 2327 'context' => \context_course::instance($course->id), 2328 'objectid' => $subscription->id, 2329 'relateduserid' => $user->id, 2330 'other' => array( 2331 'forumid' => $forum->id, 2332 'discussion' => $discussion->id, 2333 ) 2334 ); 2335 2336 // Without an invalid context. 2337 $this->setExpectedException('coding_exception', 'Context level must be CONTEXT_MODULE.'); 2338 \mod_forum\event\discussion_subscription_deleted::create($params); 2339 } 2340 2341 /** 2342 * Test discussion validation of discussion_subscription_deleted event. 2343 */ 2344 public function test_discussion_subscription_deleted_validation_discussion() { 2345 global $CFG, $DB; 2346 require_once($CFG->dirroot . '/mod/forum/lib.php'); 2347 2348 // Setup test data. 2349 $course = $this->getDataGenerator()->create_course(); 2350 $user = $this->getDataGenerator()->create_user(); 2351 $this->getDataGenerator()->enrol_user($user->id, $course->id); 2352 2353 $options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE); 2354 $forum = $this->getDataGenerator()->create_module('forum', $options); 2355 2356 // Add a discussion. 2357 $record = array(); 2358 $record['course'] = $course->id; 2359 $record['forum'] = $forum->id; 2360 $record['userid'] = $user->id; 2361 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 2362 2363 // Add a post. 2364 $record = array(); 2365 $record['discussion'] = $discussion->id; 2366 $record['userid'] = $user->id; 2367 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 2368 2369 // The user is not subscribed to the forum. Insert a new discussion subscription. 2370 $subscription = new \stdClass(); 2371 $subscription->userid = $user->id; 2372 $subscription->forum = $forum->id; 2373 $subscription->discussion = $discussion->id; 2374 $subscription->preference = time(); 2375 2376 $subscription->id = $DB->insert_record('forum_discussion_subs', $subscription); 2377 2378 // Without the discussion. 2379 $params = array( 2380 'context' => context_module::instance($forum->cmid), 2381 'objectid' => $subscription->id, 2382 'relateduserid' => $user->id, 2383 'other' => array( 2384 'forumid' => $forum->id, 2385 ) 2386 ); 2387 2388 $this->setExpectedException('coding_exception', "The 'discussion' value must be set in other."); 2389 \mod_forum\event\discussion_subscription_deleted::create($params); 2390 } 2391 2392 /** 2393 * Test forumid validation of discussion_subscription_deleted event. 2394 */ 2395 public function test_discussion_subscription_deleted_validation_forumid() { 2396 global $CFG, $DB; 2397 require_once($CFG->dirroot . '/mod/forum/lib.php'); 2398 2399 // Setup test data. 2400 $course = $this->getDataGenerator()->create_course(); 2401 $user = $this->getDataGenerator()->create_user(); 2402 $this->getDataGenerator()->enrol_user($user->id, $course->id); 2403 2404 $options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE); 2405 $forum = $this->getDataGenerator()->create_module('forum', $options); 2406 2407 // Add a discussion. 2408 $record = array(); 2409 $record['course'] = $course->id; 2410 $record['forum'] = $forum->id; 2411 $record['userid'] = $user->id; 2412 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 2413 2414 // Add a post. 2415 $record = array(); 2416 $record['discussion'] = $discussion->id; 2417 $record['userid'] = $user->id; 2418 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 2419 2420 // The user is not subscribed to the forum. Insert a new discussion subscription. 2421 $subscription = new \stdClass(); 2422 $subscription->userid = $user->id; 2423 $subscription->forum = $forum->id; 2424 $subscription->discussion = $discussion->id; 2425 $subscription->preference = time(); 2426 2427 $subscription->id = $DB->insert_record('forum_discussion_subs', $subscription); 2428 2429 // Without the forumid. 2430 $params = array( 2431 'context' => context_module::instance($forum->cmid), 2432 'objectid' => $subscription->id, 2433 'relateduserid' => $user->id, 2434 'other' => array( 2435 'discussion' => $discussion->id, 2436 ) 2437 ); 2438 2439 $this->setExpectedException('coding_exception', "The 'forumid' value must be set in other."); 2440 \mod_forum\event\discussion_subscription_deleted::create($params); 2441 } 2442 2443 /** 2444 * Test relateduserid validation of discussion_subscription_deleted event. 2445 */ 2446 public function test_discussion_subscription_deleted_validation_relateduserid() { 2447 global $CFG, $DB; 2448 require_once($CFG->dirroot . '/mod/forum/lib.php'); 2449 2450 // Setup test data. 2451 $course = $this->getDataGenerator()->create_course(); 2452 $user = $this->getDataGenerator()->create_user(); 2453 $this->getDataGenerator()->enrol_user($user->id, $course->id); 2454 2455 $options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE); 2456 $forum = $this->getDataGenerator()->create_module('forum', $options); 2457 2458 // Add a discussion. 2459 $record = array(); 2460 $record['course'] = $course->id; 2461 $record['forum'] = $forum->id; 2462 $record['userid'] = $user->id; 2463 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 2464 2465 // Add a post. 2466 $record = array(); 2467 $record['discussion'] = $discussion->id; 2468 $record['userid'] = $user->id; 2469 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 2470 2471 // The user is not subscribed to the forum. Insert a new discussion subscription. 2472 $subscription = new \stdClass(); 2473 $subscription->userid = $user->id; 2474 $subscription->forum = $forum->id; 2475 $subscription->discussion = $discussion->id; 2476 $subscription->preference = time(); 2477 2478 $subscription->id = $DB->insert_record('forum_discussion_subs', $subscription); 2479 2480 $context = context_module::instance($forum->cmid); 2481 2482 // Without the relateduserid. 2483 $params = array( 2484 'context' => context_module::instance($forum->cmid), 2485 'objectid' => $subscription->id, 2486 'other' => array( 2487 'forumid' => $forum->id, 2488 'discussion' => $discussion->id, 2489 ) 2490 ); 2491 2492 $this->setExpectedException('coding_exception', "The 'relateduserid' must be set."); 2493 \mod_forum\event\discussion_subscription_deleted::create($params); 2494 } 2495 2496 /** 2497 * Test that the correct context is used in the events when subscribing 2498 * users. 2499 */ 2500 public function test_forum_subscription_page_context_valid() { 2501 global $CFG, $PAGE; 2502 require_once($CFG->dirroot . '/mod/forum/lib.php'); 2503 2504 // Setup test data. 2505 $course = $this->getDataGenerator()->create_course(); 2506 $user = $this->getDataGenerator()->create_user(); 2507 $this->getDataGenerator()->enrol_user($user->id, $course->id); 2508 2509 $options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE); 2510 $forum = $this->getDataGenerator()->create_module('forum', $options); 2511 $quiz = $this->getDataGenerator()->create_module('quiz', $options); 2512 2513 // Add a discussion. 2514 $record = array(); 2515 $record['course'] = $course->id; 2516 $record['forum'] = $forum->id; 2517 $record['userid'] = $user->id; 2518 $discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record); 2519 2520 // Add a post. 2521 $record = array(); 2522 $record['discussion'] = $discussion->id; 2523 $record['userid'] = $user->id; 2524 $post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record); 2525 2526 // Set up the default page event to use this forum. 2527 $PAGE = new moodle_page(); 2528 $cm = get_coursemodule_from_instance('forum', $discussion->forum); 2529 $context = \context_module::instance($cm->id); 2530 $PAGE->set_context($context); 2531 $PAGE->set_cm($cm, $course, $forum); 2532 2533 // Trigger and capturing the event. 2534 $sink = $this->redirectEvents(); 2535 2536 // Trigger the event by subscribing the user to the forum. 2537 \mod_forum\subscriptions::subscribe_user($user->id, $forum); 2538 2539 $events = $sink->get_events(); 2540 $sink->clear(); 2541 $this->assertCount(1, $events); 2542 $event = reset($events); 2543 2544 // Checking that the event contains the expected values. 2545 $this->assertInstanceOf('\mod_forum\event\subscription_created', $event); 2546 $this->assertEquals($context, $event->get_context()); 2547 2548 // Trigger the event by unsubscribing the user to the forum. 2549 \mod_forum\subscriptions::unsubscribe_user($user->id, $forum); 2550 2551 $events = $sink->get_events(); 2552 $sink->clear(); 2553 $this->assertCount(1, $events); 2554 $event = reset($events); 2555 2556 // Checking that the event contains the expected values. 2557 $this->assertInstanceOf('\mod_forum\event\subscription_deleted', $event); 2558 $this->assertEquals($context, $event->get_context()); 2559 2560 // Trigger the event by subscribing the user to the discussion. 2561 \mod_forum\subscriptions::subscribe_user_to_discussion($user->id, $discussion); 2562 2563 $events = $sink->get_events(); 2564 $sink->clear(); 2565 $this->assertCount(1, $events); 2566 $event = reset($events); 2567 2568 // Checking that the event contains the expected values. 2569 $this->assertInstanceOf('\mod_forum\event\discussion_subscription_created', $event); 2570 $this->assertEquals($context, $event->get_context()); 2571 2572 // Trigger the event by unsubscribing the user from the discussion. 2573 \mod_forum\subscriptions::unsubscribe_user_from_discussion($user->id, $discussion); 2574 2575 $events = $sink->get_events(); 2576 $sink->clear(); 2577 $this->assertCount(1, $events); 2578 $event = reset($events); 2579 2580 // Checking that the event contains the expected values. 2581 $this->assertInstanceOf('\mod_forum\event\discussion_subscription_deleted', $event); 2582 $this->assertEquals($context, $event->get_context()); 2583 2584 // Now try with the context for a different module (quiz). 2585 $PAGE = new moodle_page(); 2586 $cm = get_coursemodule_from_instance('quiz', $quiz->id); 2587 $quizcontext = \context_module::instance($cm->id); 2588 $PAGE->set_context($quizcontext); 2589 $PAGE->set_cm($cm, $course, $quiz); 2590 2591 // Trigger and capturing the event. 2592 $sink = $this->redirectEvents(); 2593 2594 // Trigger the event by subscribing the user to the forum. 2595 \mod_forum\subscriptions::subscribe_user($user->id, $forum); 2596 2597 $events = $sink->get_events(); 2598 $sink->clear(); 2599 $this->assertCount(1, $events); 2600 $event = reset($events); 2601 2602 // Checking that the event contains the expected values. 2603 $this->assertInstanceOf('\mod_forum\event\subscription_created', $event); 2604 $this->assertEquals($context, $event->get_context()); 2605 2606 // Trigger the event by unsubscribing the user to the forum. 2607 \mod_forum\subscriptions::unsubscribe_user($user->id, $forum); 2608 2609 $events = $sink->get_events(); 2610 $sink->clear(); 2611 $this->assertCount(1, $events); 2612 $event = reset($events); 2613 2614 // Checking that the event contains the expected values. 2615 $this->assertInstanceOf('\mod_forum\event\subscription_deleted', $event); 2616 $this->assertEquals($context, $event->get_context()); 2617 2618 // Trigger the event by subscribing the user to the discussion. 2619 \mod_forum\subscriptions::subscribe_user_to_discussion($user->id, $discussion); 2620 2621 $events = $sink->get_events(); 2622 $sink->clear(); 2623 $this->assertCount(1, $events); 2624 $event = reset($events); 2625 2626 // Checking that the event contains the expected values. 2627 $this->assertInstanceOf('\mod_forum\event\discussion_subscription_created', $event); 2628 $this->assertEquals($context, $event->get_context()); 2629 2630 // Trigger the event by unsubscribing the user from the discussion. 2631 \mod_forum\subscriptions::unsubscribe_user_from_discussion($user->id, $discussion); 2632 2633 $events = $sink->get_events(); 2634 $sink->clear(); 2635 $this->assertCount(1, $events); 2636 $event = reset($events); 2637 2638 // Checking that the event contains the expected values. 2639 $this->assertInstanceOf('\mod_forum\event\discussion_subscription_deleted', $event); 2640 $this->assertEquals($context, $event->get_context()); 2641 2642 // Now try with the course context - the module context should still be used. 2643 $PAGE = new moodle_page(); 2644 $coursecontext = \context_course::instance($course->id); 2645 $PAGE->set_context($coursecontext); 2646 2647 // Trigger the event by subscribing the user to the forum. 2648 \mod_forum\subscriptions::subscribe_user($user->id, $forum); 2649 2650 $events = $sink->get_events(); 2651 $sink->clear(); 2652 $this->assertCount(1, $events); 2653 $event = reset($events); 2654 2655 // Checking that the event contains the expected values. 2656 $this->assertInstanceOf('\mod_forum\event\subscription_created', $event); 2657 $this->assertEquals($context, $event->get_context()); 2658 2659 // Trigger the event by unsubscribing the user to the forum. 2660 \mod_forum\subscriptions::unsubscribe_user($user->id, $forum); 2661 2662 $events = $sink->get_events(); 2663 $sink->clear(); 2664 $this->assertCount(1, $events); 2665 $event = reset($events); 2666 2667 // Checking that the event contains the expected values. 2668 $this->assertInstanceOf('\mod_forum\event\subscription_deleted', $event); 2669 $this->assertEquals($context, $event->get_context()); 2670 2671 // Trigger the event by subscribing the user to the discussion. 2672 \mod_forum\subscriptions::subscribe_user_to_discussion($user->id, $discussion); 2673 2674 $events = $sink->get_events(); 2675 $sink->clear(); 2676 $this->assertCount(1, $events); 2677 $event = reset($events); 2678 2679 // Checking that the event contains the expected values. 2680 $this->assertInstanceOf('\mod_forum\event\discussion_subscription_created', $event); 2681 $this->assertEquals($context, $event->get_context()); 2682 2683 // Trigger the event by unsubscribing the user from the discussion. 2684 \mod_forum\subscriptions::unsubscribe_user_from_discussion($user->id, $discussion); 2685 2686 $events = $sink->get_events(); 2687 $sink->clear(); 2688 $this->assertCount(1, $events); 2689 $event = reset($events); 2690 2691 // Checking that the event contains the expected values. 2692 $this->assertInstanceOf('\mod_forum\event\discussion_subscription_deleted', $event); 2693 $this->assertEquals($context, $event->get_context()); 2694 2695 } 2696 2697 /** 2698 * Test mod_forum_observer methods. 2699 */ 2700 public function test_observers() { 2701 global $DB, $CFG; 2702 2703 require_once($CFG->dirroot . '/mod/forum/lib.php'); 2704 2705 $forumgen = $this->getDataGenerator()->get_plugin_generator('mod_forum'); 2706 2707 $course = $this->getDataGenerator()->create_course(); 2708 $trackedrecord = array('course' => $course->id, 'type' => 'general', 'forcesubscribe' => FORUM_INITIALSUBSCRIBE); 2709 $untrackedrecord = array('course' => $course->id, 'type' => 'general'); 2710 $trackedforum = $this->getDataGenerator()->create_module('forum', $trackedrecord); 2711 $untrackedforum = $this->getDataGenerator()->create_module('forum', $untrackedrecord); 2712 2713 // Used functions don't require these settings; adding 2714 // them just in case there are APIs changes in future. 2715 $user = $this->getDataGenerator()->create_user(array( 2716 'maildigest' => 1, 2717 'trackforums' => 1 2718 )); 2719 2720 $manplugin = enrol_get_plugin('manual'); 2721 $manualenrol = $DB->get_record('enrol', array('courseid' => $course->id, 'enrol' => 'manual')); 2722 $student = $DB->get_record('role', array('shortname' => 'student')); 2723 2724 // The role_assign observer does it's job adding the forum_subscriptions record. 2725 $manplugin->enrol_user($manualenrol, $user->id, $student->id); 2726 2727 // They are not required, but in a real environment they are supposed to be required; 2728 // adding them just in case there are APIs changes in future. 2729 set_config('forum_trackingtype', 1); 2730 set_config('forum_trackreadposts', 1); 2731 2732 $record = array(); 2733 $record['course'] = $course->id; 2734 $record['forum'] = $trackedforum->id; 2735 $record['userid'] = $user->id; 2736 $discussion = $forumgen->create_discussion($record); 2737 2738 $record = array(); 2739 $record['discussion'] = $discussion->id; 2740 $record['userid'] = $user->id; 2741 $post = $forumgen->create_post($record); 2742 2743 forum_tp_add_read_record($user->id, $post->id); 2744 forum_set_user_maildigest($trackedforum, 2, $user); 2745 forum_tp_stop_tracking($untrackedforum->id, $user->id); 2746 2747 $this->assertEquals(1, $DB->count_records('forum_subscriptions')); 2748 $this->assertEquals(1, $DB->count_records('forum_digests')); 2749 $this->assertEquals(1, $DB->count_records('forum_track_prefs')); 2750 $this->assertEquals(1, $DB->count_records('forum_read')); 2751 2752 // The course_module_created observer does it's job adding a subscription. 2753 $forumrecord = array('course' => $course->id, 'type' => 'general', 'forcesubscribe' => FORUM_INITIALSUBSCRIBE); 2754 $extraforum = $this->getDataGenerator()->create_module('forum', $forumrecord); 2755 $this->assertEquals(2, $DB->count_records('forum_subscriptions')); 2756 2757 $manplugin->unenrol_user($manualenrol, $user->id); 2758 2759 $this->assertEquals(0, $DB->count_records('forum_digests')); 2760 $this->assertEquals(0, $DB->count_records('forum_subscriptions')); 2761 $this->assertEquals(0, $DB->count_records('forum_track_prefs')); 2762 $this->assertEquals(0, $DB->count_records('forum_read')); 2763 } 2764 2765 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |