mirror of
https://github.com/moodle/moodle.git
synced 2025-08-08 10:26:40 +02:00
MDL-36941 core: convert existing api to use new table structure
Also deprecated the following functions - 1. message_move_userfrom_unread2read - It is not necessary for us to mark a message as read on user deletion. 2. message_get_blocked_users - Horrible logic used to determine if a user is blocked via reference on some randomly chosen 'isblocked' variable. 3. message_get_contacts - The same as above. This can be done in a much nicer way. 4. message_mark_message_read - We want two functions to do this to avoid confusing messages and notifications. 5. message_can_delete_message - This assumed the variable $message contained the 'useridto' property, which was present in the old table structure. We do not want future usages where a query is done on the new table and is simply passed as this won't contain this property. 6. message_delete_message - Same as above.
This commit is contained in:
parent
4cd439887a
commit
883ce42127
29 changed files with 1714 additions and 1096 deletions
|
@ -25,7 +25,19 @@
|
|||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
class core_message_events_testcase extends advanced_testcase {
|
||||
global $CFG;
|
||||
|
||||
require_once($CFG->dirroot . '/message/tests/messagelib_test.php');
|
||||
|
||||
/**
|
||||
* Class containing the tests for message related events.
|
||||
*
|
||||
* @package core_message
|
||||
* @category test
|
||||
* @copyright 2014 Mark Nelson <markn@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class core_message_events_testcase extends core_message_messagelib_testcase {
|
||||
|
||||
/**
|
||||
* Test set up.
|
||||
|
@ -197,11 +209,11 @@ class core_message_events_testcase extends advanced_testcase {
|
|||
*/
|
||||
public function test_message_sent() {
|
||||
$event = \core\event\message_sent::create(array(
|
||||
'objectid' => 3,
|
||||
'userid' => 1,
|
||||
'context' => context_system::instance(),
|
||||
'relateduserid' => 2,
|
||||
'other' => array(
|
||||
'messageid' => 3,
|
||||
'courseid' => 4
|
||||
)
|
||||
));
|
||||
|
@ -219,7 +231,7 @@ class core_message_events_testcase extends advanced_testcase {
|
|||
$this->assertEventLegacyLogData($expected, $event);
|
||||
$url = new moodle_url('/message/index.php', array('user1' => $event->userid, 'user2' => $event->relateduserid));
|
||||
$this->assertEquals($url, $event->get_url());
|
||||
$this->assertEquals(3, $event->other['messageid']);
|
||||
$this->assertEquals(3, $event->objectid);
|
||||
$this->assertEquals(4, $event->other['courseid']);
|
||||
}
|
||||
|
||||
|
@ -256,7 +268,7 @@ class core_message_events_testcase extends advanced_testcase {
|
|||
$this->assertEventLegacyLogData($expected, $event);
|
||||
$url = new moodle_url('/message/index.php', array('user1' => $event->userid, 'user2' => $event->relateduserid));
|
||||
$this->assertEquals($url, $event->get_url());
|
||||
$this->assertEquals(3, $event->other['messageid']);
|
||||
$this->assertEquals(3, $event->objectid);
|
||||
$this->assertEquals(4, $event->other['courseid']);
|
||||
}
|
||||
|
||||
|
@ -276,32 +288,33 @@ class core_message_events_testcase extends advanced_testcase {
|
|||
$this->assertEquals(SITEID, $event->other['courseid']);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Test the message viewed event.
|
||||
*/
|
||||
public function test_message_viewed() {
|
||||
global $DB;
|
||||
|
||||
// Create a message to mark as read.
|
||||
$message = new stdClass();
|
||||
$message->useridfrom = '1';
|
||||
$message->useridto = '2';
|
||||
$message->subject = 'Subject';
|
||||
$message->message = 'Message';
|
||||
$message->id = $DB->insert_record('message', $message);
|
||||
// Create users to send messages between.
|
||||
$user1 = $this->getDataGenerator()->create_user();
|
||||
$user2 = $this->getDataGenerator()->create_user();
|
||||
|
||||
$messageid = $this->send_fake_message($user1, $user2);
|
||||
|
||||
// Trigger and capture the event.
|
||||
$sink = $this->redirectEvents();
|
||||
message_mark_message_read($message, time());
|
||||
\core_message\api::mark_message_as_read($user1->id, $messageid);
|
||||
$events = $sink->get_events();
|
||||
$event = reset($events);
|
||||
|
||||
// Get the usage action.
|
||||
$mua = $DB->get_record('message_user_actions', ['userid' => $user1->id, 'messageid' => $messageid,
|
||||
'action' => \core_message\api::MESSAGE_ACTION_READ]);
|
||||
|
||||
// Check that the event data is valid.
|
||||
$this->assertInstanceOf('\core\event\message_viewed', $event);
|
||||
$this->assertEquals(context_user::instance(2), $event->get_context());
|
||||
$this->assertEquals(context_user::instance($user1->id), $event->get_context());
|
||||
$this->assertEquals($mua->id, $event->objectid);
|
||||
$this->assertEquals($messageid, $event->other['messageid']);
|
||||
$url = new moodle_url('/message/index.php', array('user1' => $event->userid, 'user2' => $event->relateduserid));
|
||||
$this->assertEquals($url, $event->get_url());
|
||||
}
|
||||
|
@ -312,56 +325,53 @@ class core_message_events_testcase extends advanced_testcase {
|
|||
public function test_message_deleted() {
|
||||
global $DB;
|
||||
|
||||
// Create a message.
|
||||
$message = new stdClass();
|
||||
$message->useridfrom = '1';
|
||||
$message->useridto = '2';
|
||||
$message->subject = 'Subject';
|
||||
$message->message = 'Message';
|
||||
$message->timeuserfromdeleted = 0;
|
||||
$message->timeusertodeleted = 0;
|
||||
$message->id = $DB->insert_record('message', $message);
|
||||
// Create users to send messages between.
|
||||
$user1 = $this->getDataGenerator()->create_user();
|
||||
$user2 = $this->getDataGenerator()->create_user();
|
||||
|
||||
$messageid = $this->send_fake_message($user1, $user2);
|
||||
|
||||
// Trigger and capture the event.
|
||||
$sink = $this->redirectEvents();
|
||||
message_delete_message($message, $message->useridfrom);
|
||||
\core_message\api::delete_message($user1->id, $messageid);
|
||||
$events = $sink->get_events();
|
||||
$event = reset($events);
|
||||
|
||||
// Get the usage action.
|
||||
$mua = $DB->get_record('message_user_actions', ['userid' => $user1->id, 'messageid' => $messageid,
|
||||
'action' => \core_message\api::MESSAGE_ACTION_DELETED]);
|
||||
|
||||
// Check that the event data is valid.
|
||||
$this->assertInstanceOf('\core\event\message_deleted', $event);
|
||||
$this->assertEquals($message->useridfrom, $event->userid); // The user who deleted it.
|
||||
$this->assertEquals($message->useridto, $event->relateduserid);
|
||||
$this->assertEquals('message', $event->other['messagetable']);
|
||||
$this->assertEquals($message->id, $event->other['messageid']);
|
||||
$this->assertEquals($message->useridfrom, $event->other['useridfrom']);
|
||||
$this->assertEquals($message->useridto, $event->other['useridto']);
|
||||
$this->assertEquals($user1->id, $event->userid); // The user who deleted it.
|
||||
$this->assertEquals($user2->id, $event->relateduserid);
|
||||
$this->assertEquals($mua->id, $event->objectid);
|
||||
$this->assertEquals($messageid, $event->other['messageid']);
|
||||
$this->assertEquals($user1->id, $event->other['useridfrom']);
|
||||
$this->assertEquals($user2->id, $event->other['useridto']);
|
||||
|
||||
// Create a read message.
|
||||
$message = new stdClass();
|
||||
$message->useridfrom = '2';
|
||||
$message->useridto = '1';
|
||||
$message->subject = 'Subject';
|
||||
$message->message = 'Message';
|
||||
$message->timeuserfromdeleted = 0;
|
||||
$message->timeusertodeleted = 0;
|
||||
$message->timeread = time();
|
||||
$message->id = $DB->insert_record('message_read', $message);
|
||||
$messageid = $this->send_fake_message($user1, $user2);
|
||||
\core_message\api::mark_message_as_read($user2->id, $messageid);
|
||||
|
||||
// Trigger and capture the event.
|
||||
$sink = $this->redirectEvents();
|
||||
message_delete_message($message, $message->useridto);
|
||||
\core_message\api::delete_message($user2->id, $messageid);
|
||||
$events = $sink->get_events();
|
||||
$event = reset($events);
|
||||
|
||||
// Get the usage action.
|
||||
$mua = $DB->get_record('message_user_actions', ['userid' => $user2->id, 'messageid' => $messageid,
|
||||
'action' => \core_message\api::MESSAGE_ACTION_DELETED]);
|
||||
|
||||
// Check that the event data is valid.
|
||||
$this->assertInstanceOf('\core\event\message_deleted', $event);
|
||||
$this->assertEquals($message->useridto, $event->userid);
|
||||
$this->assertEquals($message->useridfrom, $event->relateduserid);
|
||||
$this->assertEquals('message_read', $event->other['messagetable']);
|
||||
$this->assertEquals($message->id, $event->other['messageid']);
|
||||
$this->assertEquals($message->useridfrom, $event->other['useridfrom']);
|
||||
$this->assertEquals($message->useridto, $event->other['useridto']);
|
||||
$this->assertEquals($user2->id, $event->userid);
|
||||
$this->assertEquals($user1->id, $event->relateduserid);
|
||||
$this->assertEquals($mua->id, $event->objectid);
|
||||
$this->assertEquals($messageid, $event->other['messageid']);
|
||||
$this->assertEquals($user1->id, $event->other['useridfrom']);
|
||||
$this->assertEquals($user2->id, $event->other['useridto']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -370,65 +380,65 @@ class core_message_events_testcase extends advanced_testcase {
|
|||
public function test_message_deleted_whole_conversation() {
|
||||
global $DB;
|
||||
|
||||
// Create a message.
|
||||
$message = new stdClass();
|
||||
$message->useridfrom = '1';
|
||||
$message->useridto = '2';
|
||||
$message->subject = 'Subject';
|
||||
$message->message = 'Message';
|
||||
$message->timeuserfromdeleted = 0;
|
||||
$message->timeusertodeleted = 0;
|
||||
$message->timecreated = 1;
|
||||
// Create some users.
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
|
||||
// The person doing the search.
|
||||
$this->setUser($user1);
|
||||
|
||||
// Send some messages back and forth.
|
||||
$time = 1;
|
||||
$messages = [];
|
||||
// Send this a few times.
|
||||
$messages[] = $DB->insert_record('message', $message);
|
||||
$messages[] = $this->send_fake_message($user1, $user2, 'Yo!', 0, $time + 1);
|
||||
$messages[] = $this->send_fake_message($user2, $user1, 'Sup mang?', 0, $time + 2);
|
||||
$messages[] = $this->send_fake_message($user1, $user2, 'Writing PHPUnit tests!', 0, $time + 3);
|
||||
$messages[] = $this->send_fake_message($user2, $user1, 'Word.', 0, $time + 4);
|
||||
$messages[] = $this->send_fake_message($user1, $user2, 'You doing much?', 0, $time + 5);
|
||||
$messages[] = $this->send_fake_message($user2, $user1, 'Nah', 0, $time + 6);
|
||||
$messages[] = $this->send_fake_message($user1, $user2, 'You nubz0r!', 0, $time + 7);
|
||||
$messages[] = $this->send_fake_message($user2, $user1, 'Ouch.', 0, $time + 8);
|
||||
|
||||
$message->timecreated++;
|
||||
$messages[] = $DB->insert_record('message', $message);
|
||||
|
||||
$message->timecreated++;
|
||||
$messages[] = $DB->insert_record('message', $message);
|
||||
|
||||
$message->timecreated++;
|
||||
$messages[] = $DB->insert_record('message', $message);
|
||||
|
||||
// Create a read message.
|
||||
$message->timeread = time();
|
||||
|
||||
// Send this a few times.
|
||||
$message->timecreated++;
|
||||
$messages[] = $DB->insert_record('message_read', $message);
|
||||
|
||||
$message->timecreated++;
|
||||
$messages[] = $DB->insert_record('message_read', $message);
|
||||
|
||||
$message->timecreated++;
|
||||
$messages[] = $DB->insert_record('message_read', $message);
|
||||
|
||||
$message->timecreated++;
|
||||
$messages[] = $DB->insert_record('message_read', $message);
|
||||
// Mark the last 4 messages as read.
|
||||
\core_message\api::mark_message_as_read($user2->id, $messages[4]);
|
||||
\core_message\api::mark_message_as_read($user1->id, $messages[5]);
|
||||
\core_message\api::mark_message_as_read($user2->id, $messages[6]);
|
||||
\core_message\api::mark_message_as_read($user1->id, $messages[7]);
|
||||
|
||||
// Trigger and capture the event.
|
||||
$sink = $this->redirectEvents();
|
||||
\core_message\api::delete_conversation(1, 2);
|
||||
\core_message\api::delete_conversation($user1->id, $user2->id);
|
||||
$events = $sink->get_events();
|
||||
|
||||
// Get the user actions for the messages deleted by that user.
|
||||
$muas = $DB->get_records('message_user_actions', ['userid' => $user1->id,
|
||||
'action' => \core_message\api::MESSAGE_ACTION_DELETED], 'timecreated ASC');
|
||||
$this->assertCount(8, $muas);
|
||||
|
||||
// Create a list we can use for testing.
|
||||
$muatest = [];
|
||||
foreach ($muas as $mua) {
|
||||
$muatest[$mua->messageid] = $mua;
|
||||
}
|
||||
|
||||
// Check that there were the correct number of events triggered.
|
||||
$this->assertEquals(8, count($events));
|
||||
|
||||
// Check that the event data is valid.
|
||||
$i = 0;
|
||||
$i = 1;
|
||||
foreach ($events as $event) {
|
||||
$table = ($i > 3) ? 'message_read' : 'message';
|
||||
$useridfromid = ($i % 2 == 0) ? $user2->id : $user1->id;
|
||||
$useridtoid = ($i % 2 == 0) ? $user1->id : $user2->id;
|
||||
$messageid = $messages[$i - 1];
|
||||
|
||||
$this->assertInstanceOf('\core\event\message_deleted', $event);
|
||||
$this->assertEquals($message->useridfrom, $event->userid);
|
||||
$this->assertEquals($message->useridto, $event->relateduserid);
|
||||
$this->assertEquals($table, $event->other['messagetable']);
|
||||
$this->assertEquals($messages[$i], $event->other['messageid']);
|
||||
$this->assertEquals($message->useridfrom, $event->other['useridfrom']);
|
||||
$this->assertEquals($message->useridto, $event->other['useridto']);
|
||||
|
||||
$this->assertEquals($muatest[$messageid]->id, $event->objectid);
|
||||
$this->assertEquals($user1->id, $event->userid);
|
||||
$this->assertEquals($user2->id, $event->relateduserid);
|
||||
$this->assertEquals($messageid, $event->other['messageid']);
|
||||
$this->assertEquals($useridfromid, $event->other['useridfrom']);
|
||||
$this->assertEquals($useridtoid, $event->other['useridto']);
|
||||
|
||||
$i++;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue