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