You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2894 lines
112 KiB
2894 lines
112 KiB
<?php
|
|
// This file is part of Moodle - http://moodle.org/
|
|
//
|
|
// Moodle is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// Moodle is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
/**
|
|
* Tests for forum events.
|
|
*
|
|
* @package mod_forum
|
|
* @category test
|
|
* @copyright 2014 Dan Poltawski <dan@moodle.com>
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
*/
|
|
|
|
defined('MOODLE_INTERNAL') || die();
|
|
|
|
/**
|
|
* Tests for forum events.
|
|
*
|
|
* @package mod_forum
|
|
* @category test
|
|
* @copyright 2014 Dan Poltawski <dan@moodle.com>
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
*/
|
|
class mod_forum_events_testcase extends advanced_testcase {
|
|
|
|
/**
|
|
* Tests set up.
|
|
*/
|
|
public function setUp() {
|
|
// We must clear the subscription caches. This has to be done both before each test, and after in case of other
|
|
// tests using these functions.
|
|
\mod_forum\subscriptions::reset_forum_cache();
|
|
|
|
$this->resetAfterTest();
|
|
}
|
|
|
|
public function tearDown() {
|
|
// We must clear the subscription caches. This has to be done both before each test, and after in case of other
|
|
// tests using these functions.
|
|
\mod_forum\subscriptions::reset_forum_cache();
|
|
}
|
|
|
|
/**
|
|
* Ensure course_searched event validates that searchterm is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'searchterm' value must be set in other.
|
|
*/
|
|
public function test_course_searched_searchterm_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$coursectx = context_course::instance($course->id);
|
|
$params = array(
|
|
'context' => $coursectx,
|
|
);
|
|
|
|
\mod_forum\event\course_searched::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure course_searched event validates that context is the correct level.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be CONTEXT_COURSE.
|
|
*/
|
|
public function test_course_searched_context_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$context = context_module::instance($forum->cmid);
|
|
$params = array(
|
|
'context' => $context,
|
|
'other' => array('searchterm' => 'testing'),
|
|
);
|
|
|
|
\mod_forum\event\course_searched::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test course_searched event.
|
|
*/
|
|
public function test_course_searched() {
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$coursectx = context_course::instance($course->id);
|
|
$searchterm = 'testing123';
|
|
|
|
$params = array(
|
|
'context' => $coursectx,
|
|
'other' => array('searchterm' => $searchterm),
|
|
);
|
|
|
|
// Create event.
|
|
$event = \mod_forum\event\course_searched::create($params);
|
|
|
|
// Trigger and capture the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\course_searched', $event);
|
|
$this->assertEquals($coursectx, $event->get_context());
|
|
$expected = array($course->id, 'forum', 'search', "search.php?id={$course->id}&search={$searchterm}", $searchterm);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Ensure discussion_created event validates that forumid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'forumid' value must be set in other.
|
|
*/
|
|
public function test_discussion_created_forumid_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
);
|
|
|
|
\mod_forum\event\discussion_created::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure discussion_created event validates that the context is the correct level.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be CONTEXT_MODULE.
|
|
*/
|
|
public function test_discussion_created_context_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_system::instance(),
|
|
'other' => array('forumid' => $forum->id),
|
|
);
|
|
|
|
\mod_forum\event\discussion_created::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test discussion_created event.
|
|
*/
|
|
public function test_discussion_created() {
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'objectid' => $discussion->id,
|
|
'other' => array('forumid' => $forum->id),
|
|
);
|
|
|
|
// Create the event.
|
|
$event = \mod_forum\event\discussion_created::create($params);
|
|
|
|
// Trigger and capturing the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Check that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\discussion_created', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
$expected = array($course->id, 'forum', 'add discussion', "discuss.php?d={$discussion->id}", $discussion->id, $forum->cmid);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Ensure discussion_updated event validates that forumid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'forumid' value must be set in other.
|
|
*/
|
|
public function test_discussion_updated_forumid_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
);
|
|
|
|
\mod_forum\event\discussion_updated::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure discussion_created event validates that the context is the correct level.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be CONTEXT_MODULE.
|
|
*/
|
|
public function test_discussion_updated_context_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_system::instance(),
|
|
'other' => array('forumid' => $forum->id),
|
|
);
|
|
|
|
\mod_forum\event\discussion_updated::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test discussion_created event.
|
|
*/
|
|
public function test_discussion_updated() {
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'objectid' => $discussion->id,
|
|
'other' => array('forumid' => $forum->id),
|
|
);
|
|
|
|
// Create the event.
|
|
$event = \mod_forum\event\discussion_updated::create($params);
|
|
|
|
// Trigger and capturing the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Check that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\discussion_updated', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Ensure discussion_deleted event validates that forumid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'forumid' value must be set in other.
|
|
*/
|
|
public function test_discussion_deleted_forumid_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
);
|
|
|
|
\mod_forum\event\discussion_deleted::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure discussion_deleted event validates that context is of the correct level.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be CONTEXT_MODULE.
|
|
*/
|
|
public function test_discussion_deleted_context_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_system::instance(),
|
|
'other' => array('forumid' => $forum->id),
|
|
);
|
|
|
|
\mod_forum\event\discussion_deleted::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test discussion_deleted event.
|
|
*/
|
|
public function test_discussion_deleted() {
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'objectid' => $discussion->id,
|
|
'other' => array('forumid' => $forum->id),
|
|
);
|
|
|
|
$event = \mod_forum\event\discussion_deleted::create($params);
|
|
|
|
// Trigger and capture the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\discussion_deleted', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
$expected = array($course->id, 'forum', 'delete discussion', "view.php?id={$forum->cmid}", $forum->id, $forum->cmid);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Ensure discussion_moved event validates that fromforumid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'fromforumid' value must be set in other.
|
|
*/
|
|
public function test_discussion_moved_fromforumid_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$toforum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$context = context_module::instance($toforum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'other' => array('toforumid' => $toforum->id)
|
|
);
|
|
|
|
\mod_forum\event\discussion_moved::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure discussion_moved event validates that toforumid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'toforumid' value must be set in other.
|
|
*/
|
|
public function test_discussion_moved_toforumid_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$fromforum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$toforum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$context = context_module::instance($toforum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'other' => array('fromforumid' => $fromforum->id)
|
|
);
|
|
|
|
\mod_forum\event\discussion_moved::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure discussion_moved event validates that the context level is correct.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be CONTEXT_MODULE.
|
|
*/
|
|
public function test_discussion_moved_context_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$fromforum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$toforum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $fromforum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
$params = array(
|
|
'context' => context_system::instance(),
|
|
'objectid' => $discussion->id,
|
|
'other' => array('fromforumid' => $fromforum->id, 'toforumid' => $toforum->id)
|
|
);
|
|
|
|
\mod_forum\event\discussion_moved::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test discussion_moved event.
|
|
*/
|
|
public function test_discussion_moved() {
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$fromforum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$toforum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $fromforum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
$context = context_module::instance($toforum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'objectid' => $discussion->id,
|
|
'other' => array('fromforumid' => $fromforum->id, 'toforumid' => $toforum->id)
|
|
);
|
|
|
|
$event = \mod_forum\event\discussion_moved::create($params);
|
|
|
|
// Trigger and capture the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\discussion_moved', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
$expected = array($course->id, 'forum', 'move discussion', "discuss.php?d={$discussion->id}",
|
|
$discussion->id, $toforum->cmid);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
|
|
/**
|
|
* Ensure discussion_viewed event validates that the contextlevel is correct.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be CONTEXT_MODULE.
|
|
*/
|
|
public function test_discussion_viewed_context_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
$params = array(
|
|
'context' => context_system::instance(),
|
|
'objectid' => $discussion->id,
|
|
);
|
|
|
|
\mod_forum\event\discussion_viewed::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test discussion_viewed event.
|
|
*/
|
|
public function test_discussion_viewed() {
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'objectid' => $discussion->id,
|
|
);
|
|
|
|
$event = \mod_forum\event\discussion_viewed::create($params);
|
|
|
|
// Trigger and capture the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\discussion_viewed', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
$expected = array($course->id, 'forum', 'view discussion', "discuss.php?d={$discussion->id}",
|
|
$discussion->id, $forum->cmid);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Ensure course_module_viewed event validates that the contextlevel is correct.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be CONTEXT_MODULE.
|
|
*/
|
|
public function test_course_module_viewed_context_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_system::instance(),
|
|
'objectid' => $forum->id,
|
|
);
|
|
|
|
\mod_forum\event\course_module_viewed::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test the course_module_viewed event.
|
|
*/
|
|
public function test_course_module_viewed() {
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'objectid' => $forum->id,
|
|
);
|
|
|
|
$event = \mod_forum\event\course_module_viewed::create($params);
|
|
|
|
// Trigger and capture the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\course_module_viewed', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
$expected = array($course->id, 'forum', 'view forum', "view.php?f={$forum->id}", $forum->id, $forum->cmid);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$url = new \moodle_url('/mod/forum/view.php', array('f' => $forum->id));
|
|
$this->assertEquals($url, $event->get_url());
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Ensure subscription_created event validates that the forumid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'forumid' value must be set in other.
|
|
*/
|
|
public function test_subscription_created_forumid_validation() {
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'relateduserid' => $user->id,
|
|
);
|
|
|
|
\mod_forum\event\subscription_created::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure subscription_created event validates that the relateduserid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'relateduserid' must be set.
|
|
*/
|
|
public function test_subscription_created_relateduserid_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $forum->id,
|
|
);
|
|
|
|
\mod_forum\event\subscription_created::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure subscription_created event validates that the contextlevel is correct.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be CONTEXT_MODULE.
|
|
*/
|
|
public function test_subscription_created_contextlevel_validation() {
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_system::instance(),
|
|
'other' => array('forumid' => $forum->id),
|
|
'relateduserid' => $user->id,
|
|
);
|
|
|
|
\mod_forum\event\subscription_created::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test the subscription_created event.
|
|
*/
|
|
public function test_subscription_created() {
|
|
// Setup test data.
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
// Add a subscription.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$subscription = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_subscription($record);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'objectid' => $subscription->id,
|
|
'other' => array('forumid' => $forum->id),
|
|
'relateduserid' => $user->id,
|
|
);
|
|
|
|
$event = \mod_forum\event\subscription_created::create($params);
|
|
|
|
// Trigger and capturing the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\subscription_created', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
$expected = array($course->id, 'forum', 'subscribe', "view.php?f={$forum->id}", $forum->id, $forum->cmid);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$url = new \moodle_url('/mod/forum/subscribers.php', array('id' => $forum->id));
|
|
$this->assertEquals($url, $event->get_url());
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Ensure subscription_deleted event validates that the forumid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'forumid' value must be set in other.
|
|
*/
|
|
public function test_subscription_deleted_forumid_validation() {
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'relateduserid' => $user->id,
|
|
);
|
|
|
|
\mod_forum\event\subscription_deleted::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure subscription_deleted event validates that the relateduserid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'relateduserid' must be set.
|
|
*/
|
|
public function test_subscription_deleted_relateduserid_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $forum->id,
|
|
);
|
|
|
|
\mod_forum\event\subscription_deleted::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure subscription_deleted event validates that the contextlevel is correct.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be CONTEXT_MODULE.
|
|
*/
|
|
public function test_subscription_deleted_contextlevel_validation() {
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_system::instance(),
|
|
'other' => array('forumid' => $forum->id),
|
|
'relateduserid' => $user->id,
|
|
);
|
|
|
|
\mod_forum\event\subscription_deleted::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test the subscription_deleted event.
|
|
*/
|
|
public function test_subscription_deleted() {
|
|
// Setup test data.
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
// Add a subscription.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$subscription = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_subscription($record);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'objectid' => $subscription->id,
|
|
'other' => array('forumid' => $forum->id),
|
|
'relateduserid' => $user->id,
|
|
);
|
|
|
|
$event = \mod_forum\event\subscription_deleted::create($params);
|
|
|
|
// Trigger and capturing the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\subscription_deleted', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
$expected = array($course->id, 'forum', 'unsubscribe', "view.php?f={$forum->id}", $forum->id, $forum->cmid);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$url = new \moodle_url('/mod/forum/subscribers.php', array('id' => $forum->id));
|
|
$this->assertEquals($url, $event->get_url());
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Ensure readtracking_enabled event validates that the forumid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'forumid' value must be set in other.
|
|
*/
|
|
public function test_readtracking_enabled_forumid_validation() {
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'relateduserid' => $user->id,
|
|
);
|
|
|
|
\mod_forum\event\readtracking_enabled::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure readtracking_enabled event validates that the relateduserid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'relateduserid' must be set.
|
|
*/
|
|
public function test_readtracking_enabled_relateduserid_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $forum->id,
|
|
);
|
|
|
|
\mod_forum\event\readtracking_enabled::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure readtracking_enabled event validates that the contextlevel is correct.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be CONTEXT_MODULE.
|
|
*/
|
|
public function test_readtracking_enabled_contextlevel_validation() {
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_system::instance(),
|
|
'other' => array('forumid' => $forum->id),
|
|
'relateduserid' => $user->id,
|
|
);
|
|
|
|
\mod_forum\event\readtracking_enabled::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test the readtracking_enabled event.
|
|
*/
|
|
public function test_readtracking_enabled() {
|
|
// Setup test data.
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'other' => array('forumid' => $forum->id),
|
|
'relateduserid' => $user->id,
|
|
);
|
|
|
|
$event = \mod_forum\event\readtracking_enabled::create($params);
|
|
|
|
// Trigger and capture the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\readtracking_enabled', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
$expected = array($course->id, 'forum', 'start tracking', "view.php?f={$forum->id}", $forum->id, $forum->cmid);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$url = new \moodle_url('/mod/forum/view.php', array('f' => $forum->id));
|
|
$this->assertEquals($url, $event->get_url());
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Ensure readtracking_disabled event validates that the forumid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'forumid' value must be set in other.
|
|
*/
|
|
public function test_readtracking_disabled_forumid_validation() {
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'relateduserid' => $user->id,
|
|
);
|
|
|
|
\mod_forum\event\readtracking_disabled::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure readtracking_disabled event validates that the relateduserid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'relateduserid' must be set.
|
|
*/
|
|
public function test_readtracking_disabled_relateduserid_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $forum->id,
|
|
);
|
|
|
|
\mod_forum\event\readtracking_disabled::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure readtracking_disabled event validates that the contextlevel is correct
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be CONTEXT_MODULE.
|
|
*/
|
|
public function test_readtracking_disabled_contextlevel_validation() {
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_system::instance(),
|
|
'other' => array('forumid' => $forum->id),
|
|
'relateduserid' => $user->id,
|
|
);
|
|
|
|
\mod_forum\event\readtracking_disabled::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test the readtracking_disabled event.
|
|
*/
|
|
public function test_readtracking_disabled() {
|
|
// Setup test data.
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'other' => array('forumid' => $forum->id),
|
|
'relateduserid' => $user->id,
|
|
);
|
|
|
|
$event = \mod_forum\event\readtracking_disabled::create($params);
|
|
|
|
// Trigger and capture the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\readtracking_disabled', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
$expected = array($course->id, 'forum', 'stop tracking', "view.php?f={$forum->id}", $forum->id, $forum->cmid);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$url = new \moodle_url('/mod/forum/view.php', array('f' => $forum->id));
|
|
$this->assertEquals($url, $event->get_url());
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Ensure subscribers_viewed event validates that the forumid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'forumid' value must be set in other.
|
|
*/
|
|
public function test_subscribers_viewed_forumid_validation() {
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'relateduserid' => $user->id,
|
|
);
|
|
|
|
\mod_forum\event\subscribers_viewed::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure subscribers_viewed event validates that the contextlevel is correct.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be CONTEXT_MODULE.
|
|
*/
|
|
public function test_subscribers_viewed_contextlevel_validation() {
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_system::instance(),
|
|
'other' => array('forumid' => $forum->id),
|
|
'relateduserid' => $user->id,
|
|
);
|
|
|
|
\mod_forum\event\subscribers_viewed::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test the subscribers_viewed event.
|
|
*/
|
|
public function test_subscribers_viewed() {
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'other' => array('forumid' => $forum->id),
|
|
);
|
|
|
|
$event = \mod_forum\event\subscribers_viewed::create($params);
|
|
|
|
// Trigger and capture the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\subscribers_viewed', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
$expected = array($course->id, 'forum', 'view subscribers', "subscribers.php?id={$forum->id}", $forum->id, $forum->cmid);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Ensure user_report_viewed event validates that the reportmode is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'reportmode' value must be set in other.
|
|
*/
|
|
public function test_user_report_viewed_reportmode_validation() {
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$course = $this->getDataGenerator()->create_course();
|
|
|
|
$params = array(
|
|
'context' => context_course::instance($course->id),
|
|
'relateduserid' => $user->id,
|
|
);
|
|
|
|
\mod_forum\event\user_report_viewed::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure user_report_viewed event validates that the contextlevel is correct.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be either CONTEXT_SYSTEM, CONTEXT_COURSE or CONTEXT_USER.
|
|
*/
|
|
public function test_user_report_viewed_contextlevel_validation() {
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'other' => array('reportmode' => 'posts'),
|
|
'relateduserid' => $user->id,
|
|
);
|
|
|
|
\mod_forum\event\user_report_viewed::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure user_report_viewed event validates that the relateduserid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'relateduserid' must be set.
|
|
*/
|
|
public function test_user_report_viewed_relateduserid_validation() {
|
|
|
|
$params = array(
|
|
'context' => context_system::instance(),
|
|
'other' => array('reportmode' => 'posts'),
|
|
);
|
|
|
|
\mod_forum\event\user_report_viewed::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test the user_report_viewed event.
|
|
*/
|
|
public function test_user_report_viewed() {
|
|
// Setup test data.
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$context = context_course::instance($course->id);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'relateduserid' => $user->id,
|
|
'other' => array('reportmode' => 'discussions'),
|
|
);
|
|
|
|
$event = \mod_forum\event\user_report_viewed::create($params);
|
|
|
|
// Trigger and capture the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\user_report_viewed', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
$expected = array($course->id, 'forum', 'user report',
|
|
"user.php?id={$user->id}&mode=discussions&course={$course->id}", $user->id);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Ensure post_created event validates that the postid is set.
|
|
*/
|
|
public function test_post_created_postid_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'other' => array('forumid' => $forum->id, 'forumtype' => $forum->type, 'discussionid' => $discussion->id)
|
|
);
|
|
|
|
\mod_forum\event\post_created::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure post_created event validates that the discussionid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'discussionid' value must be set in other.
|
|
*/
|
|
public function test_post_created_discussionid_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $post->id,
|
|
'other' => array('forumid' => $forum->id, 'forumtype' => $forum->type)
|
|
);
|
|
|
|
\mod_forum\event\post_created::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure post_created event validates that the forumid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'forumid' value must be set in other.
|
|
*/
|
|
public function test_post_created_forumid_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $post->id,
|
|
'other' => array('discussionid' => $discussion->id, 'forumtype' => $forum->type)
|
|
);
|
|
|
|
\mod_forum\event\post_created::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure post_created event validates that the forumtype is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'forumtype' value must be set in other.
|
|
*/
|
|
public function test_post_created_forumtype_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $post->id,
|
|
'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id)
|
|
);
|
|
|
|
\mod_forum\event\post_created::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure post_created event validates that the contextlevel is correct.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be CONTEXT_MODULE.
|
|
*/
|
|
public function test_post_created_context_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$params = array(
|
|
'context' => context_system::instance(),
|
|
'objectid' => $post->id,
|
|
'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id, 'forumtype' => $forum->type)
|
|
);
|
|
|
|
\mod_forum\event\post_created::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test the post_created event.
|
|
*/
|
|
public function test_post_created() {
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'objectid' => $post->id,
|
|
'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id, 'forumtype' => $forum->type)
|
|
);
|
|
|
|
$event = \mod_forum\event\post_created::create($params);
|
|
|
|
// Trigger and capturing the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\post_created', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
$expected = array($course->id, 'forum', 'add post', "discuss.php?d={$discussion->id}#p{$post->id}",
|
|
$forum->id, $forum->cmid);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$url = new \moodle_url('/mod/forum/discuss.php', array('d' => $discussion->id));
|
|
$url->set_anchor('p'.$event->objectid);
|
|
$this->assertEquals($url, $event->get_url());
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Test the post_created event for a single discussion forum.
|
|
*/
|
|
public function test_post_created_single() {
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id, 'type' => 'single'));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'objectid' => $post->id,
|
|
'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id, 'forumtype' => $forum->type)
|
|
);
|
|
|
|
$event = \mod_forum\event\post_created::create($params);
|
|
|
|
// Trigger and capturing the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\post_created', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
$expected = array($course->id, 'forum', 'add post', "view.php?f={$forum->id}#p{$post->id}",
|
|
$forum->id, $forum->cmid);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$url = new \moodle_url('/mod/forum/view.php', array('f' => $forum->id));
|
|
$url->set_anchor('p'.$event->objectid);
|
|
$this->assertEquals($url, $event->get_url());
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Ensure post_deleted event validates that the postid is set.
|
|
*/
|
|
public function test_post_deleted_postid_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'other' => array('forumid' => $forum->id, 'forumtype' => $forum->type, 'discussionid' => $discussion->id)
|
|
);
|
|
|
|
\mod_forum\event\post_deleted::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure post_deleted event validates that the discussionid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'discussionid' value must be set in other.
|
|
*/
|
|
public function test_post_deleted_discussionid_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $post->id,
|
|
'other' => array('forumid' => $forum->id, 'forumtype' => $forum->type)
|
|
);
|
|
|
|
\mod_forum\event\post_deleted::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure post_deleted event validates that the forumid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'forumid' value must be set in other.
|
|
*/
|
|
public function test_post_deleted_forumid_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $post->id,
|
|
'other' => array('discussionid' => $discussion->id, 'forumtype' => $forum->type)
|
|
);
|
|
|
|
\mod_forum\event\post_deleted::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure post_deleted event validates that the forumtype is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'forumtype' value must be set in other.
|
|
*/
|
|
public function test_post_deleted_forumtype_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $post->id,
|
|
'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id)
|
|
);
|
|
|
|
\mod_forum\event\post_deleted::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure post_deleted event validates that the contextlevel is correct.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be CONTEXT_MODULE.
|
|
*/
|
|
public function test_post_deleted_context_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$params = array(
|
|
'context' => context_system::instance(),
|
|
'objectid' => $post->id,
|
|
'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id, 'forumtype' => $forum->type)
|
|
);
|
|
|
|
\mod_forum\event\post_deleted::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test post_deleted event.
|
|
*/
|
|
public function test_post_deleted() {
|
|
global $DB;
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$cm = get_coursemodule_from_instance('forum', $forum->id, $forum->course);
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// When creating a discussion we also create a post, so get the post.
|
|
$discussionpost = $DB->get_records('forum_posts');
|
|
// Will only be one here.
|
|
$discussionpost = reset($discussionpost);
|
|
|
|
// Add a few posts.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$posts = array();
|
|
$posts[$discussionpost->id] = $discussionpost;
|
|
for ($i = 0; $i < 3; $i++) {
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
$posts[$post->id] = $post;
|
|
}
|
|
|
|
// Delete the last post and capture the event.
|
|
$lastpost = end($posts);
|
|
$sink = $this->redirectEvents();
|
|
forum_delete_post($lastpost, true, $course, $cm, $forum);
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Check that the events contain the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\post_deleted', $event);
|
|
$this->assertEquals(context_module::instance($forum->cmid), $event->get_context());
|
|
$expected = array($course->id, 'forum', 'delete post', "discuss.php?d={$discussion->id}", $lastpost->id, $forum->cmid);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$url = new \moodle_url('/mod/forum/discuss.php', array('d' => $discussion->id));
|
|
$this->assertEquals($url, $event->get_url());
|
|
$this->assertEventContextNotUsed($event);
|
|
$this->assertNotEmpty($event->get_name());
|
|
|
|
// Delete the whole discussion and capture the events.
|
|
$sink = $this->redirectEvents();
|
|
forum_delete_discussion($discussion, true, $course, $cm, $forum);
|
|
$events = $sink->get_events();
|
|
// We will have 3 events. One for the discussion (creating a discussion creates a post), and two for the posts.
|
|
$this->assertCount(3, $events);
|
|
|
|
// Loop through the events and check they are valid.
|
|
foreach ($events as $event) {
|
|
$post = $posts[$event->objectid];
|
|
|
|
// Check that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\post_deleted', $event);
|
|
$this->assertEquals(context_module::instance($forum->cmid), $event->get_context());
|
|
$expected = array($course->id, 'forum', 'delete post', "discuss.php?d={$discussion->id}", $post->id, $forum->cmid);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$url = new \moodle_url('/mod/forum/discuss.php', array('d' => $discussion->id));
|
|
$this->assertEquals($url, $event->get_url());
|
|
$this->assertEventContextNotUsed($event);
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test post_deleted event for a single discussion forum.
|
|
*/
|
|
public function test_post_deleted_single() {
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id, 'type' => 'single'));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'objectid' => $post->id,
|
|
'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id, 'forumtype' => $forum->type)
|
|
);
|
|
|
|
$event = \mod_forum\event\post_deleted::create($params);
|
|
|
|
// Trigger and capture the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\post_deleted', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
$expected = array($course->id, 'forum', 'delete post', "view.php?f={$forum->id}", $post->id, $forum->cmid);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$url = new \moodle_url('/mod/forum/view.php', array('f' => $forum->id));
|
|
$this->assertEquals($url, $event->get_url());
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Ensure post_updated event validates that the discussionid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'discussionid' value must be set in other.
|
|
*/
|
|
public function test_post_updated_discussionid_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $post->id,
|
|
'other' => array('forumid' => $forum->id, 'forumtype' => $forum->type)
|
|
);
|
|
|
|
\mod_forum\event\post_updated::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure post_updated event validates that the forumid is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'forumid' value must be set in other.
|
|
*/
|
|
public function test_post_updated_forumid_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $post->id,
|
|
'other' => array('discussionid' => $discussion->id, 'forumtype' => $forum->type)
|
|
);
|
|
|
|
\mod_forum\event\post_updated::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure post_updated event validates that the forumtype is set.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'forumtype' value must be set in other.
|
|
*/
|
|
public function test_post_updated_forumtype_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $post->id,
|
|
'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id)
|
|
);
|
|
|
|
\mod_forum\event\post_updated::create($params);
|
|
}
|
|
|
|
/**
|
|
* Ensure post_updated event validates that the contextlevel is correct.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be CONTEXT_MODULE.
|
|
*/
|
|
public function test_post_updated_context_validation() {
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$params = array(
|
|
'context' => context_system::instance(),
|
|
'objectid' => $post->id,
|
|
'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id, 'forumtype' => $forum->type)
|
|
);
|
|
|
|
\mod_forum\event\post_updated::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test post_updated event.
|
|
*/
|
|
public function test_post_updated() {
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'objectid' => $post->id,
|
|
'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id, 'forumtype' => $forum->type)
|
|
);
|
|
|
|
$event = \mod_forum\event\post_updated::create($params);
|
|
|
|
// Trigger and capturing the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\post_updated', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
$expected = array($course->id, 'forum', 'update post', "discuss.php?d={$discussion->id}#p{$post->id}",
|
|
$post->id, $forum->cmid);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$url = new \moodle_url('/mod/forum/discuss.php', array('d' => $discussion->id));
|
|
$url->set_anchor('p'.$event->objectid);
|
|
$this->assertEquals($url, $event->get_url());
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Test post_updated event.
|
|
*/
|
|
public function test_post_updated_single() {
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id, 'type' => 'single'));
|
|
$user = $this->getDataGenerator()->create_user();
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'objectid' => $post->id,
|
|
'other' => array('discussionid' => $discussion->id, 'forumid' => $forum->id, 'forumtype' => $forum->type)
|
|
);
|
|
|
|
$event = \mod_forum\event\post_updated::create($params);
|
|
|
|
// Trigger and capturing the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\post_updated', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
$expected = array($course->id, 'forum', 'update post', "view.php?f={$forum->id}#p{$post->id}",
|
|
$post->id, $forum->cmid);
|
|
$this->assertEventLegacyLogData($expected, $event);
|
|
$url = new \moodle_url('/mod/forum/view.php', array('f' => $forum->id));
|
|
$url->set_anchor('p'.$post->id);
|
|
$this->assertEquals($url, $event->get_url());
|
|
$this->assertEventContextNotUsed($event);
|
|
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Test discussion_subscription_created event.
|
|
*/
|
|
public function test_discussion_subscription_created() {
|
|
global $CFG;
|
|
require_once($CFG->dirroot . '/mod/forum/lib.php');
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$this->getDataGenerator()->enrol_user($user->id, $course->id);
|
|
|
|
$options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE);
|
|
$forum = $this->getDataGenerator()->create_module('forum', $options);
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
// Trigger and capturing the event.
|
|
$sink = $this->redirectEvents();
|
|
|
|
// Trigger the event by subscribing the user to the forum discussion.
|
|
\mod_forum\subscriptions::subscribe_user_to_discussion($user->id, $discussion);
|
|
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\discussion_subscription_created', $event);
|
|
|
|
|
|
$cm = get_coursemodule_from_instance('forum', $discussion->forum);
|
|
$context = \context_module::instance($cm->id);
|
|
$this->assertEquals($context, $event->get_context());
|
|
|
|
$url = new \moodle_url('/mod/forum/subscribe.php', array(
|
|
'id' => $forum->id,
|
|
'd' => $discussion->id
|
|
));
|
|
|
|
$this->assertEquals($url, $event->get_url());
|
|
$this->assertEventContextNotUsed($event);
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Test validation of discussion_subscription_created event.
|
|
*/
|
|
public function test_discussion_subscription_created_validation() {
|
|
global $CFG, $DB;
|
|
require_once($CFG->dirroot . '/mod/forum/lib.php');
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$this->getDataGenerator()->enrol_user($user->id, $course->id);
|
|
|
|
$options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE);
|
|
$forum = $this->getDataGenerator()->create_module('forum', $options);
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
// The user is not subscribed to the forum. Insert a new discussion subscription.
|
|
$subscription = new \stdClass();
|
|
$subscription->userid = $user->id;
|
|
$subscription->forum = $forum->id;
|
|
$subscription->discussion = $discussion->id;
|
|
$subscription->preference = time();
|
|
|
|
$subscription->id = $DB->insert_record('forum_discussion_subs', $subscription);
|
|
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'objectid' => $subscription->id,
|
|
'relateduserid' => $user->id,
|
|
'other' => array(
|
|
'forumid' => $forum->id,
|
|
'discussion' => $discussion->id,
|
|
)
|
|
);
|
|
|
|
$event = \mod_forum\event\discussion_subscription_created::create($params);
|
|
|
|
// Trigger and capturing the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
}
|
|
|
|
/**
|
|
* Test contextlevel validation of discussion_subscription_created event.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be CONTEXT_MODULE.
|
|
*/
|
|
public function test_discussion_subscription_created_validation_contextlevel() {
|
|
global $CFG, $DB;
|
|
require_once($CFG->dirroot . '/mod/forum/lib.php');
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$this->getDataGenerator()->enrol_user($user->id, $course->id);
|
|
|
|
$options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE);
|
|
$forum = $this->getDataGenerator()->create_module('forum', $options);
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
// The user is not subscribed to the forum. Insert a new discussion subscription.
|
|
$subscription = new \stdClass();
|
|
$subscription->userid = $user->id;
|
|
$subscription->forum = $forum->id;
|
|
$subscription->discussion = $discussion->id;
|
|
$subscription->preference = time();
|
|
|
|
$subscription->id = $DB->insert_record('forum_discussion_subs', $subscription);
|
|
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => \context_course::instance($course->id),
|
|
'objectid' => $subscription->id,
|
|
'relateduserid' => $user->id,
|
|
'other' => array(
|
|
'forumid' => $forum->id,
|
|
'discussion' => $discussion->id,
|
|
)
|
|
);
|
|
|
|
// Without an invalid context.
|
|
\mod_forum\event\discussion_subscription_created::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test discussion validation of discussion_subscription_created event.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'discussion' value must be set in other.
|
|
*/
|
|
public function test_discussion_subscription_created_validation_discussion() {
|
|
global $CFG, $DB;
|
|
require_once($CFG->dirroot . '/mod/forum/lib.php');
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$this->getDataGenerator()->enrol_user($user->id, $course->id);
|
|
|
|
$options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE);
|
|
$forum = $this->getDataGenerator()->create_module('forum', $options);
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
// The user is not subscribed to the forum. Insert a new discussion subscription.
|
|
$subscription = new \stdClass();
|
|
$subscription->userid = $user->id;
|
|
$subscription->forum = $forum->id;
|
|
$subscription->discussion = $discussion->id;
|
|
$subscription->preference = time();
|
|
|
|
$subscription->id = $DB->insert_record('forum_discussion_subs', $subscription);
|
|
|
|
// Without the discussion.
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $subscription->id,
|
|
'relateduserid' => $user->id,
|
|
'other' => array(
|
|
'forumid' => $forum->id,
|
|
)
|
|
);
|
|
|
|
\mod_forum\event\discussion_subscription_created::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test forumid validation of discussion_subscription_created event.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'forumid' value must be set in other.
|
|
*/
|
|
public function test_discussion_subscription_created_validation_forumid() {
|
|
global $CFG, $DB;
|
|
require_once($CFG->dirroot . '/mod/forum/lib.php');
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$this->getDataGenerator()->enrol_user($user->id, $course->id);
|
|
|
|
$options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE);
|
|
$forum = $this->getDataGenerator()->create_module('forum', $options);
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
// The user is not subscribed to the forum. Insert a new discussion subscription.
|
|
$subscription = new \stdClass();
|
|
$subscription->userid = $user->id;
|
|
$subscription->forum = $forum->id;
|
|
$subscription->discussion = $discussion->id;
|
|
$subscription->preference = time();
|
|
|
|
$subscription->id = $DB->insert_record('forum_discussion_subs', $subscription);
|
|
|
|
// Without the forumid.
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $subscription->id,
|
|
'relateduserid' => $user->id,
|
|
'other' => array(
|
|
'discussion' => $discussion->id,
|
|
)
|
|
);
|
|
|
|
\mod_forum\event\discussion_subscription_created::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test relateduserid validation of discussion_subscription_created event.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'relateduserid' must be set.
|
|
*/
|
|
public function test_discussion_subscription_created_validation_relateduserid() {
|
|
global $CFG, $DB;
|
|
require_once($CFG->dirroot . '/mod/forum/lib.php');
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$this->getDataGenerator()->enrol_user($user->id, $course->id);
|
|
|
|
$options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE);
|
|
$forum = $this->getDataGenerator()->create_module('forum', $options);
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
// The user is not subscribed to the forum. Insert a new discussion subscription.
|
|
$subscription = new \stdClass();
|
|
$subscription->userid = $user->id;
|
|
$subscription->forum = $forum->id;
|
|
$subscription->discussion = $discussion->id;
|
|
$subscription->preference = time();
|
|
|
|
$subscription->id = $DB->insert_record('forum_discussion_subs', $subscription);
|
|
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
// Without the relateduserid.
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $subscription->id,
|
|
'other' => array(
|
|
'forumid' => $forum->id,
|
|
'discussion' => $discussion->id,
|
|
)
|
|
);
|
|
|
|
\mod_forum\event\discussion_subscription_created::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test discussion_subscription_deleted event.
|
|
*/
|
|
public function test_discussion_subscription_deleted() {
|
|
global $CFG;
|
|
require_once($CFG->dirroot . '/mod/forum/lib.php');
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$this->getDataGenerator()->enrol_user($user->id, $course->id);
|
|
|
|
$options = array('course' => $course->id, 'forcesubscribe' => FORUM_INITIALSUBSCRIBE);
|
|
$forum = $this->getDataGenerator()->create_module('forum', $options);
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
// Trigger and capturing the event.
|
|
$sink = $this->redirectEvents();
|
|
|
|
// Trigger the event by unsubscribing the user to the forum discussion.
|
|
\mod_forum\subscriptions::unsubscribe_user_from_discussion($user->id, $discussion);
|
|
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\discussion_subscription_deleted', $event);
|
|
|
|
|
|
$cm = get_coursemodule_from_instance('forum', $discussion->forum);
|
|
$context = \context_module::instance($cm->id);
|
|
$this->assertEquals($context, $event->get_context());
|
|
|
|
$url = new \moodle_url('/mod/forum/subscribe.php', array(
|
|
'id' => $forum->id,
|
|
'd' => $discussion->id
|
|
));
|
|
|
|
$this->assertEquals($url, $event->get_url());
|
|
$this->assertEventContextNotUsed($event);
|
|
$this->assertNotEmpty($event->get_name());
|
|
}
|
|
|
|
/**
|
|
* Test validation of discussion_subscription_deleted event.
|
|
*/
|
|
public function test_discussion_subscription_deleted_validation() {
|
|
global $CFG, $DB;
|
|
require_once($CFG->dirroot . '/mod/forum/lib.php');
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$this->getDataGenerator()->enrol_user($user->id, $course->id);
|
|
|
|
$options = array('course' => $course->id, 'forcesubscribe' => FORUM_INITIALSUBSCRIBE);
|
|
$forum = $this->getDataGenerator()->create_module('forum', $options);
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
// The user is not subscribed to the forum. Insert a new discussion subscription.
|
|
$subscription = new \stdClass();
|
|
$subscription->userid = $user->id;
|
|
$subscription->forum = $forum->id;
|
|
$subscription->discussion = $discussion->id;
|
|
$subscription->preference = \mod_forum\subscriptions::FORUM_DISCUSSION_UNSUBSCRIBED;
|
|
|
|
$subscription->id = $DB->insert_record('forum_discussion_subs', $subscription);
|
|
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => $context,
|
|
'objectid' => $subscription->id,
|
|
'relateduserid' => $user->id,
|
|
'other' => array(
|
|
'forumid' => $forum->id,
|
|
'discussion' => $discussion->id,
|
|
)
|
|
);
|
|
|
|
$event = \mod_forum\event\discussion_subscription_deleted::create($params);
|
|
|
|
// Trigger and capturing the event.
|
|
$sink = $this->redirectEvents();
|
|
$event->trigger();
|
|
$events = $sink->get_events();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Without an invalid context.
|
|
$params['context'] = \context_course::instance($course->id);
|
|
$this->expectException('coding_exception');
|
|
$this->expectExceptionMessage('Context level must be CONTEXT_MODULE.');
|
|
\mod_forum\event\discussion_deleted::create($params);
|
|
|
|
// Without the discussion.
|
|
unset($params['discussion']);
|
|
$this->expectException('coding_exception');
|
|
$this->expectExceptionMessage('The \'discussion\' value must be set in other.');
|
|
\mod_forum\event\discussion_deleted::create($params);
|
|
|
|
// Without the forumid.
|
|
unset($params['forumid']);
|
|
$this->expectException('coding_exception');
|
|
$this->expectExceptionMessage('The \'forumid\' value must be set in other.');
|
|
\mod_forum\event\discussion_deleted::create($params);
|
|
|
|
// Without the relateduserid.
|
|
unset($params['relateduserid']);
|
|
$this->expectException('coding_exception');
|
|
$this->expectExceptionMessage('The \'relateduserid\' value must be set in other.');
|
|
\mod_forum\event\discussion_deleted::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test contextlevel validation of discussion_subscription_deleted event.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage Context level must be CONTEXT_MODULE.
|
|
*/
|
|
public function test_discussion_subscription_deleted_validation_contextlevel() {
|
|
global $CFG, $DB;
|
|
require_once($CFG->dirroot . '/mod/forum/lib.php');
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$this->getDataGenerator()->enrol_user($user->id, $course->id);
|
|
|
|
$options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE);
|
|
$forum = $this->getDataGenerator()->create_module('forum', $options);
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
// The user is not subscribed to the forum. Insert a new discussion subscription.
|
|
$subscription = new \stdClass();
|
|
$subscription->userid = $user->id;
|
|
$subscription->forum = $forum->id;
|
|
$subscription->discussion = $discussion->id;
|
|
$subscription->preference = time();
|
|
|
|
$subscription->id = $DB->insert_record('forum_discussion_subs', $subscription);
|
|
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
$params = array(
|
|
'context' => \context_course::instance($course->id),
|
|
'objectid' => $subscription->id,
|
|
'relateduserid' => $user->id,
|
|
'other' => array(
|
|
'forumid' => $forum->id,
|
|
'discussion' => $discussion->id,
|
|
)
|
|
);
|
|
|
|
// Without an invalid context.
|
|
\mod_forum\event\discussion_subscription_deleted::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test discussion validation of discussion_subscription_deleted event.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'discussion' value must be set in other.
|
|
*/
|
|
public function test_discussion_subscription_deleted_validation_discussion() {
|
|
global $CFG, $DB;
|
|
require_once($CFG->dirroot . '/mod/forum/lib.php');
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$this->getDataGenerator()->enrol_user($user->id, $course->id);
|
|
|
|
$options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE);
|
|
$forum = $this->getDataGenerator()->create_module('forum', $options);
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
// The user is not subscribed to the forum. Insert a new discussion subscription.
|
|
$subscription = new \stdClass();
|
|
$subscription->userid = $user->id;
|
|
$subscription->forum = $forum->id;
|
|
$subscription->discussion = $discussion->id;
|
|
$subscription->preference = time();
|
|
|
|
$subscription->id = $DB->insert_record('forum_discussion_subs', $subscription);
|
|
|
|
// Without the discussion.
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $subscription->id,
|
|
'relateduserid' => $user->id,
|
|
'other' => array(
|
|
'forumid' => $forum->id,
|
|
)
|
|
);
|
|
|
|
\mod_forum\event\discussion_subscription_deleted::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test forumid validation of discussion_subscription_deleted event.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'forumid' value must be set in other.
|
|
*/
|
|
public function test_discussion_subscription_deleted_validation_forumid() {
|
|
global $CFG, $DB;
|
|
require_once($CFG->dirroot . '/mod/forum/lib.php');
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$this->getDataGenerator()->enrol_user($user->id, $course->id);
|
|
|
|
$options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE);
|
|
$forum = $this->getDataGenerator()->create_module('forum', $options);
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
// The user is not subscribed to the forum. Insert a new discussion subscription.
|
|
$subscription = new \stdClass();
|
|
$subscription->userid = $user->id;
|
|
$subscription->forum = $forum->id;
|
|
$subscription->discussion = $discussion->id;
|
|
$subscription->preference = time();
|
|
|
|
$subscription->id = $DB->insert_record('forum_discussion_subs', $subscription);
|
|
|
|
// Without the forumid.
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $subscription->id,
|
|
'relateduserid' => $user->id,
|
|
'other' => array(
|
|
'discussion' => $discussion->id,
|
|
)
|
|
);
|
|
|
|
\mod_forum\event\discussion_subscription_deleted::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test relateduserid validation of discussion_subscription_deleted event.
|
|
*
|
|
* @expectedException coding_exception
|
|
* @expectedExceptionMessage The 'relateduserid' must be set.
|
|
*/
|
|
public function test_discussion_subscription_deleted_validation_relateduserid() {
|
|
global $CFG, $DB;
|
|
require_once($CFG->dirroot . '/mod/forum/lib.php');
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$this->getDataGenerator()->enrol_user($user->id, $course->id);
|
|
|
|
$options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE);
|
|
$forum = $this->getDataGenerator()->create_module('forum', $options);
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
// The user is not subscribed to the forum. Insert a new discussion subscription.
|
|
$subscription = new \stdClass();
|
|
$subscription->userid = $user->id;
|
|
$subscription->forum = $forum->id;
|
|
$subscription->discussion = $discussion->id;
|
|
$subscription->preference = time();
|
|
|
|
$subscription->id = $DB->insert_record('forum_discussion_subs', $subscription);
|
|
|
|
$context = context_module::instance($forum->cmid);
|
|
|
|
// Without the relateduserid.
|
|
$params = array(
|
|
'context' => context_module::instance($forum->cmid),
|
|
'objectid' => $subscription->id,
|
|
'other' => array(
|
|
'forumid' => $forum->id,
|
|
'discussion' => $discussion->id,
|
|
)
|
|
);
|
|
|
|
\mod_forum\event\discussion_subscription_deleted::create($params);
|
|
}
|
|
|
|
/**
|
|
* Test that the correct context is used in the events when subscribing
|
|
* users.
|
|
*/
|
|
public function test_forum_subscription_page_context_valid() {
|
|
global $CFG, $PAGE;
|
|
require_once($CFG->dirroot . '/mod/forum/lib.php');
|
|
|
|
// Setup test data.
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$user = $this->getDataGenerator()->create_user();
|
|
$this->getDataGenerator()->enrol_user($user->id, $course->id);
|
|
|
|
$options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE);
|
|
$forum = $this->getDataGenerator()->create_module('forum', $options);
|
|
$quiz = $this->getDataGenerator()->create_module('quiz', $options);
|
|
|
|
// Add a discussion.
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $forum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_discussion($record);
|
|
|
|
// Add a post.
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $this->getDataGenerator()->get_plugin_generator('mod_forum')->create_post($record);
|
|
|
|
// Set up the default page event to use this forum.
|
|
$PAGE = new moodle_page();
|
|
$cm = get_coursemodule_from_instance('forum', $discussion->forum);
|
|
$context = \context_module::instance($cm->id);
|
|
$PAGE->set_context($context);
|
|
$PAGE->set_cm($cm, $course, $forum);
|
|
|
|
// Trigger and capturing the event.
|
|
$sink = $this->redirectEvents();
|
|
|
|
// Trigger the event by subscribing the user to the forum.
|
|
\mod_forum\subscriptions::subscribe_user($user->id, $forum);
|
|
|
|
$events = $sink->get_events();
|
|
$sink->clear();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\subscription_created', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
|
|
// Trigger the event by unsubscribing the user to the forum.
|
|
\mod_forum\subscriptions::unsubscribe_user($user->id, $forum);
|
|
|
|
$events = $sink->get_events();
|
|
$sink->clear();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\subscription_deleted', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
|
|
// Trigger the event by subscribing the user to the discussion.
|
|
\mod_forum\subscriptions::subscribe_user_to_discussion($user->id, $discussion);
|
|
|
|
$events = $sink->get_events();
|
|
$sink->clear();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\discussion_subscription_created', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
|
|
// Trigger the event by unsubscribing the user from the discussion.
|
|
\mod_forum\subscriptions::unsubscribe_user_from_discussion($user->id, $discussion);
|
|
|
|
$events = $sink->get_events();
|
|
$sink->clear();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\discussion_subscription_deleted', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
|
|
// Now try with the context for a different module (quiz).
|
|
$PAGE = new moodle_page();
|
|
$cm = get_coursemodule_from_instance('quiz', $quiz->id);
|
|
$quizcontext = \context_module::instance($cm->id);
|
|
$PAGE->set_context($quizcontext);
|
|
$PAGE->set_cm($cm, $course, $quiz);
|
|
|
|
// Trigger and capturing the event.
|
|
$sink = $this->redirectEvents();
|
|
|
|
// Trigger the event by subscribing the user to the forum.
|
|
\mod_forum\subscriptions::subscribe_user($user->id, $forum);
|
|
|
|
$events = $sink->get_events();
|
|
$sink->clear();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\subscription_created', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
|
|
// Trigger the event by unsubscribing the user to the forum.
|
|
\mod_forum\subscriptions::unsubscribe_user($user->id, $forum);
|
|
|
|
$events = $sink->get_events();
|
|
$sink->clear();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\subscription_deleted', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
|
|
// Trigger the event by subscribing the user to the discussion.
|
|
\mod_forum\subscriptions::subscribe_user_to_discussion($user->id, $discussion);
|
|
|
|
$events = $sink->get_events();
|
|
$sink->clear();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\discussion_subscription_created', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
|
|
// Trigger the event by unsubscribing the user from the discussion.
|
|
\mod_forum\subscriptions::unsubscribe_user_from_discussion($user->id, $discussion);
|
|
|
|
$events = $sink->get_events();
|
|
$sink->clear();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\discussion_subscription_deleted', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
|
|
// Now try with the course context - the module context should still be used.
|
|
$PAGE = new moodle_page();
|
|
$coursecontext = \context_course::instance($course->id);
|
|
$PAGE->set_context($coursecontext);
|
|
|
|
// Trigger the event by subscribing the user to the forum.
|
|
\mod_forum\subscriptions::subscribe_user($user->id, $forum);
|
|
|
|
$events = $sink->get_events();
|
|
$sink->clear();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\subscription_created', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
|
|
// Trigger the event by unsubscribing the user to the forum.
|
|
\mod_forum\subscriptions::unsubscribe_user($user->id, $forum);
|
|
|
|
$events = $sink->get_events();
|
|
$sink->clear();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\subscription_deleted', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
|
|
// Trigger the event by subscribing the user to the discussion.
|
|
\mod_forum\subscriptions::subscribe_user_to_discussion($user->id, $discussion);
|
|
|
|
$events = $sink->get_events();
|
|
$sink->clear();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\discussion_subscription_created', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
|
|
// Trigger the event by unsubscribing the user from the discussion.
|
|
\mod_forum\subscriptions::unsubscribe_user_from_discussion($user->id, $discussion);
|
|
|
|
$events = $sink->get_events();
|
|
$sink->clear();
|
|
$this->assertCount(1, $events);
|
|
$event = reset($events);
|
|
|
|
// Checking that the event contains the expected values.
|
|
$this->assertInstanceOf('\mod_forum\event\discussion_subscription_deleted', $event);
|
|
$this->assertEquals($context, $event->get_context());
|
|
|
|
}
|
|
|
|
/**
|
|
* Test mod_forum_observer methods.
|
|
*/
|
|
public function test_observers() {
|
|
global $DB, $CFG;
|
|
|
|
require_once($CFG->dirroot . '/mod/forum/lib.php');
|
|
|
|
$forumgen = $this->getDataGenerator()->get_plugin_generator('mod_forum');
|
|
|
|
$course = $this->getDataGenerator()->create_course();
|
|
$trackedrecord = array('course' => $course->id, 'type' => 'general', 'forcesubscribe' => FORUM_INITIALSUBSCRIBE);
|
|
$untrackedrecord = array('course' => $course->id, 'type' => 'general');
|
|
$trackedforum = $this->getDataGenerator()->create_module('forum', $trackedrecord);
|
|
$untrackedforum = $this->getDataGenerator()->create_module('forum', $untrackedrecord);
|
|
|
|
// Used functions don't require these settings; adding
|
|
// them just in case there are APIs changes in future.
|
|
$user = $this->getDataGenerator()->create_user(array(
|
|
'maildigest' => 1,
|
|
'trackforums' => 1
|
|
));
|
|
|
|
$manplugin = enrol_get_plugin('manual');
|
|
$manualenrol = $DB->get_record('enrol', array('courseid' => $course->id, 'enrol' => 'manual'));
|
|
$student = $DB->get_record('role', array('shortname' => 'student'));
|
|
|
|
// The role_assign observer does it's job adding the forum_subscriptions record.
|
|
$manplugin->enrol_user($manualenrol, $user->id, $student->id);
|
|
|
|
// They are not required, but in a real environment they are supposed to be required;
|
|
// adding them just in case there are APIs changes in future.
|
|
set_config('forum_trackingtype', 1);
|
|
set_config('forum_trackreadposts', 1);
|
|
|
|
$record = array();
|
|
$record['course'] = $course->id;
|
|
$record['forum'] = $trackedforum->id;
|
|
$record['userid'] = $user->id;
|
|
$discussion = $forumgen->create_discussion($record);
|
|
|
|
$record = array();
|
|
$record['discussion'] = $discussion->id;
|
|
$record['userid'] = $user->id;
|
|
$post = $forumgen->create_post($record);
|
|
|
|
forum_tp_add_read_record($user->id, $post->id);
|
|
forum_set_user_maildigest($trackedforum, 2, $user);
|
|
forum_tp_stop_tracking($untrackedforum->id, $user->id);
|
|
|
|
$this->assertEquals(1, $DB->count_records('forum_subscriptions'));
|
|
$this->assertEquals(1, $DB->count_records('forum_digests'));
|
|
$this->assertEquals(1, $DB->count_records('forum_track_prefs'));
|
|
$this->assertEquals(1, $DB->count_records('forum_read'));
|
|
|
|
// The course_module_created observer does it's job adding a subscription.
|
|
$forumrecord = array('course' => $course->id, 'type' => 'general', 'forcesubscribe' => FORUM_INITIALSUBSCRIBE);
|
|
$extraforum = $this->getDataGenerator()->create_module('forum', $forumrecord);
|
|
$this->assertEquals(2, $DB->count_records('forum_subscriptions'));
|
|
|
|
$manplugin->unenrol_user($manualenrol, $user->id);
|
|
|
|
$this->assertEquals(0, $DB->count_records('forum_digests'));
|
|
$this->assertEquals(0, $DB->count_records('forum_subscriptions'));
|
|
$this->assertEquals(0, $DB->count_records('forum_track_prefs'));
|
|
$this->assertEquals(0, $DB->count_records('forum_read'));
|
|
}
|
|
|
|
}
|
|
|