mirror of
https://github.com/moodle/moodle.git
synced 2025-08-07 01:46:45 +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
|
@ -631,7 +631,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
|||
'messageposition' => 0,
|
||||
'with' => 'user1',
|
||||
'subject' => 'S2',
|
||||
'unreadcount' => 2,
|
||||
'unreadcount' => 0, // Messages sent to and from the same user are counted as read.
|
||||
),
|
||||
),
|
||||
),
|
||||
|
@ -872,11 +872,9 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
|||
$subject = $messagedata['subject'];
|
||||
|
||||
if (isset($messagedata['state']) && $messagedata['state'] == 'unread') {
|
||||
$table = 'message';
|
||||
$messageid = $this->send_fake_message($from, $to, $subject);
|
||||
} else {
|
||||
// If there is no state, or the state is not 'unread', assume the message is read.
|
||||
$table = 'message_read';
|
||||
$messageid = message_post_message($from, $to, $subject, FORMAT_PLAIN);
|
||||
}
|
||||
|
||||
|
@ -890,7 +888,7 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
|||
$updatemessage->timecreated = $defaulttimecreated;
|
||||
}
|
||||
|
||||
$DB->update_record($table, $updatemessage);
|
||||
$DB->update_record('messages', $updatemessage);
|
||||
}
|
||||
|
||||
foreach ($expectations as $username => $data) {
|
||||
|
@ -1155,34 +1153,39 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
|||
|
||||
// Send some messages back and forth.
|
||||
$time = 1;
|
||||
$this->send_fake_message($user1, $user2, 'Yo!', 0, $time + 1);
|
||||
$this->send_fake_message($user2, $user1, 'Sup mang?', 0, $time + 2);
|
||||
$this->send_fake_message($user1, $user2, 'Writing PHPUnit tests!', 0, $time + 3);
|
||||
$this->send_fake_message($user2, $user1, 'Word.', 0, $time + 4);
|
||||
$m1id = $this->send_fake_message($user1, $user2, 'Yo!', 0, $time + 1);
|
||||
$m2id = $this->send_fake_message($user2, $user1, 'Sup mang?', 0, $time + 2);
|
||||
$m3id = $this->send_fake_message($user1, $user2, 'Writing PHPUnit tests!', 0, $time + 3);
|
||||
$m4id = $this->send_fake_message($user2, $user1, 'Word.', 0, $time + 4);
|
||||
|
||||
// Delete the conversation as user 1.
|
||||
\core_message\api::delete_conversation($user1->id, $user2->id);
|
||||
|
||||
$messages = $DB->get_records('message', array(), 'timecreated ASC');
|
||||
$this->assertCount(4, $messages);
|
||||
$muas = $DB->get_records('message_user_actions', array(), 'timecreated ASC');
|
||||
$this->assertCount(4, $muas);
|
||||
// Sort by id.
|
||||
ksort($muas);
|
||||
|
||||
$message1 = array_shift($messages);
|
||||
$message2 = array_shift($messages);
|
||||
$message3 = array_shift($messages);
|
||||
$message4 = array_shift($messages);
|
||||
$mua1 = array_shift($muas);
|
||||
$mua2 = array_shift($muas);
|
||||
$mua3 = array_shift($muas);
|
||||
$mua4 = array_shift($muas);
|
||||
|
||||
$this->assertNotEmpty($message1->timeuserfromdeleted);
|
||||
$this->assertEmpty($message1->timeusertodeleted);
|
||||
$this->assertEquals($user1->id, $mua1->userid);
|
||||
$this->assertEquals($m1id, $mua1->messageid);
|
||||
$this->assertEquals(\core_message\api::MESSAGE_ACTION_DELETED, $mua1->action);
|
||||
|
||||
$this->assertEmpty($message2->timeuserfromdeleted);
|
||||
$this->assertNotEmpty($message2->timeusertodeleted);
|
||||
$this->assertEquals($user1->id, $mua2->userid);
|
||||
$this->assertEquals($m2id, $mua2->messageid);
|
||||
$this->assertEquals(\core_message\api::MESSAGE_ACTION_DELETED, $mua2->action);
|
||||
|
||||
$this->assertNotEmpty($message3->timeuserfromdeleted);
|
||||
$this->assertEmpty($message3->timeusertodeleted);
|
||||
|
||||
$this->assertEmpty($message4->timeuserfromdeleted);
|
||||
$this->assertNotEmpty($message4->timeusertodeleted);
|
||||
$this->assertEquals($user1->id, $mua3->userid);
|
||||
$this->assertEquals($m3id, $mua3->messageid);
|
||||
$this->assertEquals(\core_message\api::MESSAGE_ACTION_DELETED, $mua3->action);
|
||||
|
||||
$this->assertEquals($user1->id, $mua4->userid);
|
||||
$this->assertEquals($m4id, $mua4->messageid);
|
||||
$this->assertEquals(\core_message\api::MESSAGE_ACTION_DELETED, $mua4->action);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1602,4 +1605,320 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
|
|||
$this->assertContains('Message 2', $message1->text);
|
||||
$this->assertContains('Message 3', $message2->text);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test returning blocked users.
|
||||
*/
|
||||
public function test_get_blocked_users() {
|
||||
global $USER;
|
||||
|
||||
// Set this user as the admin.
|
||||
$this->setAdminUser();
|
||||
|
||||
// Create a user to add to the admin's contact list.
|
||||
$user1 = $this->getDataGenerator()->create_user();
|
||||
$user2 = $this->getDataGenerator()->create_user();
|
||||
|
||||
// Add users to the admin's contact list.
|
||||
message_add_contact($user1->id);
|
||||
message_add_contact($user2->id, 1);
|
||||
|
||||
$this->assertCount(1, \core_message\api::get_blocked_users($USER->id));
|
||||
|
||||
// Block other user.
|
||||
message_block_contact($user1->id);
|
||||
$this->assertCount(2, \core_message\api::get_blocked_users($USER->id));
|
||||
|
||||
// Test deleting users.
|
||||
delete_user($user1);
|
||||
$this->assertCount(1, \core_message\api::get_blocked_users($USER->id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test returning contacts with unread message count.
|
||||
*/
|
||||
public function test_get_contacts_with_unread_message_count() {
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
$user3 = self::getDataGenerator()->create_user();
|
||||
$user4 = self::getDataGenerator()->create_user();
|
||||
|
||||
// Add the users to each of their contacts.
|
||||
message_add_contact($user1->id, 0, $user2->id);
|
||||
message_add_contact($user2->id, 0, $user1->id);
|
||||
message_add_contact($user3->id, 0, $user2->id);
|
||||
|
||||
$this->send_fake_message($user1, $user2);
|
||||
$this->send_fake_message($user1, $user2);
|
||||
$this->send_fake_message($user1, $user2);
|
||||
$message4id = $this->send_fake_message($user1, $user2);
|
||||
|
||||
$this->send_fake_message($user3, $user2);
|
||||
$message6id = $this->send_fake_message($user3, $user2);
|
||||
$this->send_fake_message($user3, $user2);
|
||||
$this->send_fake_message($user3, $user2);
|
||||
$this->send_fake_message($user3, $user2);
|
||||
|
||||
// Send a message that should never be included as the user is not a contact.
|
||||
$this->send_fake_message($user4, $user2);
|
||||
|
||||
// Get the contacts and the unread message count.
|
||||
$messages = \core_message\api::get_contacts_with_unread_message_count($user2->id);
|
||||
|
||||
// Confirm the size is correct.
|
||||
$this->assertCount(2, $messages);
|
||||
ksort($messages);
|
||||
|
||||
$messageinfo1 = array_shift($messages);
|
||||
$messageinfo2 = array_shift($messages);
|
||||
$this->assertEquals($user1->id, $messageinfo1->id);
|
||||
$this->assertEquals(4, $messageinfo1->messagecount);
|
||||
$this->assertEquals($user3->id, $messageinfo2->id);
|
||||
$this->assertEquals(5, $messageinfo2->messagecount);
|
||||
|
||||
// Mark some of the messages as read.
|
||||
\core_message\api::mark_message_as_read($user2->id, $message4id);
|
||||
\core_message\api::mark_message_as_read($user2->id, $message6id);
|
||||
|
||||
// Get the contacts and the unread message count.
|
||||
$messages = \core_message\api::get_contacts_with_unread_message_count($user2->id);
|
||||
|
||||
// Confirm the size is correct.
|
||||
$this->assertCount(2, $messages);
|
||||
ksort($messages);
|
||||
|
||||
// Confirm read messages are not included.
|
||||
$messageinfo1 = array_shift($messages);
|
||||
$messageinfo2 = array_shift($messages);
|
||||
$this->assertEquals($user1->id, $messageinfo1->id);
|
||||
$this->assertEquals(3, $messageinfo1->messagecount);
|
||||
$this->assertEquals($user3->id, $messageinfo2->id);
|
||||
$this->assertEquals(4, $messageinfo2->messagecount);
|
||||
|
||||
// Now, let's populate the database with messages from user2 to user 1.
|
||||
$this->send_fake_message($user2, $user1);
|
||||
$this->send_fake_message($user2, $user1);
|
||||
$messageid = $this->send_fake_message($user2, $user1);
|
||||
|
||||
// Send a message that should never be included as the user is not a contact.
|
||||
$this->send_fake_message($user4, $user1);
|
||||
|
||||
// Get the contacts and the unread message count.
|
||||
$messages = \core_message\api::get_contacts_with_unread_message_count($user1->id);
|
||||
|
||||
// Confirm the size is correct.
|
||||
$this->assertCount(1, $messages);
|
||||
$messageinfo1 = array_shift($messages);
|
||||
$this->assertEquals($user2->id, $messageinfo1->id);
|
||||
$this->assertEquals(3, $messageinfo1->messagecount);
|
||||
|
||||
// Mark the last message as read.
|
||||
\core_message\api::mark_message_as_read($user1->id, $messageid);
|
||||
|
||||
$messages = \core_message\api::get_contacts_with_unread_message_count($user1->id);
|
||||
|
||||
// Confirm the size is correct.
|
||||
$this->assertCount(1, $messages);
|
||||
|
||||
// Confirm read messages are not included.
|
||||
$messageinfo1 = array_shift($messages);
|
||||
$this->assertEquals($user2->id, $messageinfo1->id);
|
||||
$this->assertEquals(2, $messageinfo1->messagecount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test returning contacts with unread message count when there are no messages.
|
||||
*/
|
||||
public function test_get_contacts_with_unread_message_count_no_messages() {
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
|
||||
// Add the users to each of their contacts.
|
||||
message_add_contact($user1->id, 0, $user2->id);
|
||||
|
||||
// Check we get the correct message count.
|
||||
$messages = \core_message\api::get_contacts_with_unread_message_count($user2->id);
|
||||
|
||||
// Confirm the size is correct.
|
||||
$this->assertCount(1, $messages);
|
||||
|
||||
$messageinfo = array_shift($messages);
|
||||
|
||||
$this->assertEquals($user1->id, $messageinfo->id);
|
||||
$this->assertEquals(0, $messageinfo->messagecount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test returning non-contacts with unread message count.
|
||||
*/
|
||||
public function test_get_non_contacts_with_unread_message_count() {
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
$user3 = self::getDataGenerator()->create_user();
|
||||
$user4 = self::getDataGenerator()->create_user();
|
||||
|
||||
// Add a user to the contact list of the users we are testing this function with.
|
||||
message_add_contact($user4->id, 0, $user1->id);
|
||||
message_add_contact($user4->id, 0, $user2->id);
|
||||
|
||||
$this->send_fake_message($user1, $user2);
|
||||
$this->send_fake_message($user1, $user2);
|
||||
$this->send_fake_message($user1, $user2);
|
||||
$message4id = $this->send_fake_message($user1, $user2);
|
||||
|
||||
$this->send_fake_message($user3, $user2);
|
||||
$message6id = $this->send_fake_message($user3, $user2);
|
||||
$this->send_fake_message($user3, $user2);
|
||||
$this->send_fake_message($user3, $user2);
|
||||
$this->send_fake_message($user3, $user2);
|
||||
|
||||
// Send a message that should never be included as the user is a contact.
|
||||
$this->send_fake_message($user4, $user2);
|
||||
|
||||
// Get the non-contacts and the unread message count.
|
||||
$messages = \core_message\api::get_non_contacts_with_unread_message_count($user2->id);
|
||||
|
||||
// Check we get the correct message count.
|
||||
ksort($messages);
|
||||
$this->assertCount(2, $messages);
|
||||
$messageinfo1 = array_shift($messages);
|
||||
$messageinfo2 = array_shift($messages);
|
||||
$this->assertEquals($user1->id, $messageinfo1->id);
|
||||
$this->assertEquals(4, $messageinfo1->messagecount);
|
||||
$this->assertEquals($user3->id, $messageinfo2->id);
|
||||
$this->assertEquals(5, $messageinfo2->messagecount);
|
||||
|
||||
// Mark some of the messages as read.
|
||||
\core_message\api::mark_message_as_read($user2->id, $message4id);
|
||||
\core_message\api::mark_message_as_read($user2->id, $message6id);
|
||||
|
||||
// Get the non-contacts and the unread message count.
|
||||
$messages = \core_message\api::get_non_contacts_with_unread_message_count($user2->id);
|
||||
|
||||
// Check the marked message is not returned in the message count.
|
||||
ksort($messages);
|
||||
$this->assertCount(2, $messages);
|
||||
$messageinfo1 = array_shift($messages);
|
||||
$messageinfo2 = array_shift($messages);
|
||||
$this->assertEquals($user1->id, $messageinfo1->id);
|
||||
$this->assertEquals(3, $messageinfo1->messagecount);
|
||||
$this->assertEquals($user3->id, $messageinfo2->id);
|
||||
$this->assertEquals(4, $messageinfo2->messagecount);
|
||||
|
||||
// Now, let's populate the database with messages from user2 to user 1.
|
||||
$this->send_fake_message($user2, $user1);
|
||||
$this->send_fake_message($user2, $user1);
|
||||
$messageid = $this->send_fake_message($user2, $user1);
|
||||
|
||||
// Send a message that should never be included as the user is a contact.
|
||||
$this->send_fake_message($user4, $user1);
|
||||
|
||||
// Get the non-contacts and the unread message count.
|
||||
$messages = \core_message\api::get_non_contacts_with_unread_message_count($user1->id);
|
||||
|
||||
// Confirm the size is correct.
|
||||
$this->assertCount(1, $messages);
|
||||
$messageinfo1 = array_shift($messages);
|
||||
$this->assertEquals($user2->id, $messageinfo1->id);
|
||||
$this->assertEquals(3, $messageinfo1->messagecount);
|
||||
|
||||
// Mark the last message as read.
|
||||
\core_message\api::mark_message_as_read($user1->id, $messageid);
|
||||
|
||||
// Get the non-contacts and the unread message count.
|
||||
$messages = \core_message\api::get_non_contacts_with_unread_message_count($user1->id);
|
||||
|
||||
// Check the marked message is not returned in the message count.
|
||||
$this->assertCount(1, $messages);
|
||||
$messageinfo1 = array_shift($messages);
|
||||
$this->assertEquals($user2->id, $messageinfo1->id);
|
||||
$this->assertEquals(2, $messageinfo1->messagecount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test marking a message as read.
|
||||
*/
|
||||
public function test_mark_message_as_read() {
|
||||
global $DB;
|
||||
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
|
||||
$this->send_fake_message($user1, $user2);
|
||||
$m2id = $this->send_fake_message($user1, $user2);
|
||||
$this->send_fake_message($user2, $user1);
|
||||
$m4id = $this->send_fake_message($user2, $user1);
|
||||
|
||||
\core_message\api::mark_message_as_read($user2->id, $m2id, 11);
|
||||
\core_message\api::mark_message_as_read($user1->id, $m4id, 12);
|
||||
|
||||
// Confirm there are two user actions.
|
||||
$muas = $DB->get_records('message_user_actions', [], 'timecreated ASC');
|
||||
$this->assertEquals(2, count($muas));
|
||||
|
||||
// Confirm they are correct.
|
||||
$mua1 = array_shift($muas);
|
||||
$mua2 = array_shift($muas);
|
||||
|
||||
// Confirm first action.
|
||||
$this->assertEquals($user2->id, $mua1->userid);
|
||||
$this->assertEquals($m2id, $mua1->messageid);
|
||||
$this->assertEquals(\core_message\api::MESSAGE_ACTION_READ, $mua1->action);
|
||||
$this->assertEquals(11, $mua1->timecreated);
|
||||
|
||||
// Confirm second action.
|
||||
$this->assertEquals($user1->id, $mua2->userid);
|
||||
$this->assertEquals($m4id, $mua2->messageid);
|
||||
$this->assertEquals(\core_message\api::MESSAGE_ACTION_READ, $mua2->action);
|
||||
$this->assertEquals(12, $mua2->timecreated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test marking a notification as read.
|
||||
*/
|
||||
public function test_mark_notification_as_read() {
|
||||
global $DB;
|
||||
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
|
||||
$this->send_fake_message($user1, $user2, 'Notification 1', 1);
|
||||
$n2id = $this->send_fake_message($user1, $user2, 'Notification 2', 1);
|
||||
$this->send_fake_message($user2, $user1, 'Notification 3', 1);
|
||||
$n4id = $this->send_fake_message($user2, $user1, 'Notification 4', 1);
|
||||
|
||||
\core_message\api::mark_notification_as_read($user2->id, $n2id, 11);
|
||||
\core_message\api::mark_notification_as_read($user1->id, $n4id, 12);
|
||||
|
||||
// Retrieve the notifications.
|
||||
$n2 = $DB->get_record('notifications', ['id' => $n2id]);
|
||||
$n4 = $DB->get_record('notifications', ['id' => $n4id]);
|
||||
|
||||
// Confirm they have been marked as read.
|
||||
$this->assertEquals(11, $n2->timeread);
|
||||
$this->assertEquals(12, $n4->timeread);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test a conversation is not returned if there is none.
|
||||
*/
|
||||
public function test_get_conversation_between_users_no_conversation() {
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
|
||||
$this->assertFalse(\core_message\api::get_conversation_between_users($user1->id, $user2->id));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test we can return a conversation that exists between users.
|
||||
*/
|
||||
public function test_get_conversation_between_users_with_existing_conversation() {
|
||||
$user1 = self::getDataGenerator()->create_user();
|
||||
$user2 = self::getDataGenerator()->create_user();
|
||||
|
||||
$conversationid = \core_message\api::create_conversation_between_users($user1->id, $user2->id);
|
||||
|
||||
$this->assertEquals($conversationid,
|
||||
\core_message\api::get_conversation_between_users($user1->id, $user2->id));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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++;
|
||||
}
|
||||
|
|
|
@ -61,16 +61,33 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
|||
$time = time();
|
||||
}
|
||||
|
||||
if ($notification) {
|
||||
$record = new stdClass();
|
||||
$record->useridfrom = $userfrom->id;
|
||||
$record->useridto = $userto->id;
|
||||
$record->subject = 'No subject';
|
||||
$record->fullmessage = $message;
|
||||
$record->smallmessage = $message;
|
||||
$record->timecreated = $time;
|
||||
|
||||
return $DB->insert_record('notifications', $record);
|
||||
}
|
||||
|
||||
if (!$conversationid = \core_message\api::get_conversation_between_users($userfrom->id, $userto->id)) {
|
||||
$conversationid = \core_message\api::create_conversation_between_users($userfrom->id,
|
||||
$userto->id);
|
||||
}
|
||||
|
||||
// Ok, send the message.
|
||||
$record = new stdClass();
|
||||
$record->useridfrom = $userfrom->id;
|
||||
$record->useridto = $userto->id;
|
||||
$record->conversationid = $conversationid;
|
||||
$record->subject = 'No subject';
|
||||
$record->smallmessage = $message;
|
||||
$record->fullmessage = $message;
|
||||
$record->smallmessage = $message;
|
||||
$record->timecreated = $time;
|
||||
$record->notification = $notification;
|
||||
|
||||
return $DB->insert_record('message', $record);
|
||||
return $DB->insert_record('messages', $record);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -110,7 +127,15 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
|||
// We need to execute the return values cleaning process to simulate the web service server.
|
||||
$sentmessages = external_api::clean_returnvalue(core_message_external::send_instant_messages_returns(), $sentmessages);
|
||||
|
||||
$themessage = $DB->get_record('message', array('id' => $sentmessages[0]['msgid']));
|
||||
$sql = "SELECT m.*, mcm.userid as useridto
|
||||
FROM {messages} m
|
||||
INNER JOIN {message_conversations} mc
|
||||
ON m.conversationid = mc.id
|
||||
INNER JOIN {message_conversation_members} mcm
|
||||
ON mcm.conversationid = mc.id
|
||||
WHERE mcm.userid != ?
|
||||
AND m.id = ?";
|
||||
$themessage = $DB->get_record_sql($sql, [$USER->id, $sentmessages[0]['msgid']]);
|
||||
|
||||
// Confirm that the message was inserted correctly.
|
||||
$this->assertEquals($themessage->useridfrom, $USER->id);
|
||||
|
@ -465,8 +490,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
|||
|
||||
// Delete the message.
|
||||
$message = array_shift($messages['messages']);
|
||||
$messagetobedeleted = $DB->get_record('message_read', array('id' => $message['id']));
|
||||
message_delete_message($messagetobedeleted, $user1->id);
|
||||
\core_message\api::delete_message($user1->id, $message['id']);
|
||||
|
||||
$messages = core_message_external::get_messages($user2->id, $user1->id, 'conversations', true, true, 0, 0);
|
||||
$messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages);
|
||||
|
@ -495,8 +519,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
|||
|
||||
// Delete the message.
|
||||
$message = array_shift($messages['messages']);
|
||||
$messagetobedeleted = $DB->get_record('message_read', array('id' => $message['id']));
|
||||
message_delete_message($messagetobedeleted, $user2->id);
|
||||
\core_message\api::delete_message($user2->id, $message['id']);
|
||||
|
||||
$messages = core_message_external::get_messages($user2->id, $user3->id, 'conversations', true, true, 0, 0);
|
||||
$messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages);
|
||||
|
@ -735,10 +758,10 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
|||
|
||||
// Invalid message ids.
|
||||
try {
|
||||
$messageid = core_message_external::mark_message_read($messageids[0]['messageid'] * 2, time());
|
||||
$messageid = core_message_external::mark_message_read(1337, time());
|
||||
$this->fail('Exception expected due invalid messageid.');
|
||||
} catch (dml_missing_record_exception $e) {
|
||||
$this->assertEquals('invalidrecord', $e->errorcode);
|
||||
$this->assertEquals('invalidrecordunknown', $e->errorcode);
|
||||
}
|
||||
|
||||
// A message to a different user.
|
||||
|
@ -783,8 +806,8 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
|||
$result = external_api::clean_returnvalue(core_message_external::delete_message_returns(), $result);
|
||||
$this->assertTrue($result['status']);
|
||||
$this->assertCount(0, $result['warnings']);
|
||||
$deletedmessage = $DB->get_record('message', array('id' => $m1to2));
|
||||
$this->assertNotEquals(0, $deletedmessage->timeuserfromdeleted);
|
||||
$mua = $DB->get_record('message_user_actions', array('messageid' => $m1to2, 'userid' => $user1->id));
|
||||
$this->assertEquals(\core_message\api::MESSAGE_ACTION_DELETED, $mua->action);
|
||||
|
||||
// Try to delete the same message again.
|
||||
$result = core_message_external::delete_message($m1to2, $user1->id, false);
|
||||
|
@ -805,25 +828,24 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
|||
$result = external_api::clean_returnvalue(core_message_external::delete_message_returns(), $result);
|
||||
$this->assertTrue($result['status']);
|
||||
$this->assertCount(0, $result['warnings']);
|
||||
$deletedmessage = $DB->get_record('message', array('id' => $m2to3));
|
||||
$this->assertNotEquals(0, $deletedmessage->timeusertodeleted);
|
||||
$this->assertTrue($DB->record_exists('message_user_actions', array('messageid' => $m2to3, 'userid' => $user3->id,
|
||||
'action' => \core_message\api::MESSAGE_ACTION_DELETED)));
|
||||
|
||||
// Delete a message read.
|
||||
$message = $DB->get_record('message', array('id' => $m3to2));
|
||||
$messageid = message_mark_message_read($message, time());
|
||||
$result = core_message_external::delete_message($messageid, $user3->id);
|
||||
\core_message\api::mark_message_as_read($user3->id, $m3to2, time());
|
||||
$result = core_message_external::delete_message($m3to2, $user3->id);
|
||||
$result = external_api::clean_returnvalue(core_message_external::delete_message_returns(), $result);
|
||||
$this->assertTrue($result['status']);
|
||||
$this->assertCount(0, $result['warnings']);
|
||||
$deletedmessage = $DB->get_record('message_read', array('id' => $messageid));
|
||||
$this->assertNotEquals(0, $deletedmessage->timeuserfromdeleted);
|
||||
$this->assertTrue($DB->record_exists('message_user_actions', array('messageid' => $m3to2, 'userid' => $user3->id,
|
||||
'action' => \core_message\api::MESSAGE_ACTION_DELETED)));
|
||||
|
||||
// Invalid message ids.
|
||||
try {
|
||||
$result = core_message_external::delete_message(-1, $user1->id);
|
||||
$this->fail('Exception expected due invalid messageid.');
|
||||
} catch (dml_missing_record_exception $e) {
|
||||
$this->assertEquals('invalidrecord', $e->errorcode);
|
||||
$this->assertEquals('invalidrecordunknown', $e->errorcode);
|
||||
}
|
||||
|
||||
// Invalid user.
|
||||
|
@ -849,8 +871,8 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
|||
$result = external_api::clean_returnvalue(core_message_external::delete_message_returns(), $result);
|
||||
$this->assertTrue($result['status']);
|
||||
$this->assertCount(0, $result['warnings']);
|
||||
$deletedmessage = $DB->get_record('message', array('id' => $m3to4));
|
||||
$this->assertNotEquals(0, $deletedmessage->timeusertodeleted);
|
||||
$this->assertTrue($DB->record_exists('message_user_actions', array('messageid' => $m3to4, 'userid' => $user4->id,
|
||||
'action' => \core_message\api::MESSAGE_ACTION_DELETED)));
|
||||
|
||||
}
|
||||
|
||||
|
@ -902,15 +924,15 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
|||
$this->send_message($sender3, $recipient, 'Notification', 1);
|
||||
|
||||
core_message_external::mark_all_notifications_as_read($recipient->id, $sender1->id);
|
||||
$readnotifications = $DB->get_records('message_read', ['useridto' => $recipient->id]);
|
||||
$unreadnotifications = $DB->get_records('message', ['useridto' => $recipient->id]);
|
||||
$readnotifications = $DB->get_records_select('notifications', 'useridto = ? AND timeread IS NOT NULL', [$recipient->id]);
|
||||
$unreadnotifications = $DB->get_records_select('notifications', 'useridto = ? AND timeread IS NULL', [$recipient->id]);
|
||||
|
||||
$this->assertCount(2, $readnotifications);
|
||||
$this->assertCount(4, $unreadnotifications);
|
||||
|
||||
core_message_external::mark_all_notifications_as_read($recipient->id, 0);
|
||||
$readnotifications = $DB->get_records('message_read', ['useridto' => $recipient->id]);
|
||||
$unreadnotifications = $DB->get_records('message', ['useridto' => $recipient->id]);
|
||||
$readnotifications = $DB->get_records_select('notifications', 'useridto = ? AND timeread IS NOT NULL', [$recipient->id]);
|
||||
$unreadnotifications = $DB->get_records_select('notifications', 'useridto = ? AND timeread IS NULL', [$recipient->id]);
|
||||
|
||||
$this->assertCount(6, $readnotifications);
|
||||
$this->assertCount(0, $unreadnotifications);
|
||||
|
@ -2400,18 +2422,10 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
|||
$this->send_message($sender3, $recipient, 'Message');
|
||||
|
||||
core_message_external::mark_all_messages_as_read($recipient->id, $sender1->id);
|
||||
$readnotifications = $DB->get_records('message_read', array('useridto' => $recipient->id));
|
||||
$unreadnotifications = $DB->get_records('message', array('useridto' => $recipient->id));
|
||||
|
||||
$this->assertCount(2, $readnotifications);
|
||||
$this->assertCount(4, $unreadnotifications);
|
||||
$this->assertEquals(2, $DB->count_records('message_user_actions'));
|
||||
|
||||
core_message_external::mark_all_messages_as_read($recipient->id, 0);
|
||||
$readnotifications = $DB->get_records('message_read', array('useridto' => $recipient->id));
|
||||
$unreadnotifications = $DB->get_records('message', array('useridto' => $recipient->id));
|
||||
|
||||
$this->assertCount(6, $readnotifications);
|
||||
$this->assertCount(0, $unreadnotifications);
|
||||
$this->assertEquals(6, $DB->count_records('message_user_actions'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2529,33 +2543,39 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
|||
|
||||
// Send some messages back and forth.
|
||||
$time = time();
|
||||
$this->send_message($user1, $user2, 'Yo!', 0, $time);
|
||||
$this->send_message($user2, $user1, 'Sup mang?', 0, $time + 1);
|
||||
$this->send_message($user1, $user2, 'Writing PHPUnit tests!', 0, $time + 2);
|
||||
$this->send_message($user2, $user1, 'Word.', 0, $time + 3);
|
||||
$m1id = $this->send_message($user1, $user2, 'Yo!', 0, $time);
|
||||
$m2id = $this->send_message($user2, $user1, 'Sup mang?', 0, $time + 1);
|
||||
$m3id = $this->send_message($user1, $user2, 'Writing PHPUnit tests!', 0, $time + 2);
|
||||
$m4id = $this->send_message($user2, $user1, 'Word.', 0, $time + 3);
|
||||
|
||||
// Delete the conversation.
|
||||
core_message_external::delete_conversation($user1->id, $user2->id);
|
||||
|
||||
$messages = $DB->get_records('message', array(), 'timecreated ASC');
|
||||
$this->assertCount(4, $messages);
|
||||
$muas = $DB->get_records('message_user_actions', array(), 'timecreated ASC');
|
||||
$this->assertCount(4, $muas);
|
||||
// Sort by id.
|
||||
ksort($muas);
|
||||
|
||||
$message1 = array_shift($messages);
|
||||
$message2 = array_shift($messages);
|
||||
$message3 = array_shift($messages);
|
||||
$message4 = array_shift($messages);
|
||||
$mua1 = array_shift($muas);
|
||||
$mua2 = array_shift($muas);
|
||||
$mua3 = array_shift($muas);
|
||||
$mua4 = array_shift($muas);
|
||||
|
||||
$this->assertNotEmpty($message1->timeuserfromdeleted);
|
||||
$this->assertEmpty($message1->timeusertodeleted);
|
||||
$this->assertEquals($user1->id, $mua1->userid);
|
||||
$this->assertEquals($m1id, $mua1->messageid);
|
||||
$this->assertEquals(\core_message\api::MESSAGE_ACTION_DELETED, $mua1->action);
|
||||
|
||||
$this->assertEmpty($message2->timeuserfromdeleted);
|
||||
$this->assertNotEmpty($message2->timeusertodeleted);
|
||||
$this->assertEquals($user1->id, $mua2->userid);
|
||||
$this->assertEquals($m2id, $mua2->messageid);
|
||||
$this->assertEquals(\core_message\api::MESSAGE_ACTION_DELETED, $mua2->action);
|
||||
|
||||
$this->assertNotEmpty($message3->timeuserfromdeleted);
|
||||
$this->assertEmpty($message3->timeusertodeleted);
|
||||
$this->assertEquals($user1->id, $mua3->userid);
|
||||
$this->assertEquals($m3id, $mua3->messageid);
|
||||
$this->assertEquals(\core_message\api::MESSAGE_ACTION_DELETED, $mua3->action);
|
||||
|
||||
$this->assertEmpty($message4->timeuserfromdeleted);
|
||||
$this->assertNotEmpty($message4->timeusertodeleted);
|
||||
$this->assertEquals($user1->id, $mua4->userid);
|
||||
$this->assertEquals($m4id, $mua4->messageid);
|
||||
$this->assertEquals(\core_message\api::MESSAGE_ACTION_DELETED, $mua4->action);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2574,33 +2594,39 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
|
|||
|
||||
// Send some messages back and forth.
|
||||
$time = time();
|
||||
$this->send_message($user1, $user2, 'Yo!', 0, $time);
|
||||
$this->send_message($user2, $user1, 'Sup mang?', 0, $time + 1);
|
||||
$this->send_message($user1, $user2, 'Writing PHPUnit tests!', 0, $time + 2);
|
||||
$this->send_message($user2, $user1, 'Word.', 0, $time + 3);
|
||||
$m1id = $this->send_message($user1, $user2, 'Yo!', 0, $time);
|
||||
$m2id = $this->send_message($user2, $user1, 'Sup mang?', 0, $time + 1);
|
||||
$m3id = $this->send_message($user1, $user2, 'Writing PHPUnit tests!', 0, $time + 2);
|
||||
$m4id = $this->send_message($user2, $user1, 'Word.', 0, $time + 3);
|
||||
|
||||
// Delete the conversation.
|
||||
core_message_external::delete_conversation($user1->id, $user2->id);
|
||||
|
||||
$messages = $DB->get_records('message', array(), 'timecreated ASC');
|
||||
$this->assertCount(4, $messages);
|
||||
$muas = $DB->get_records('message_user_actions', array(), 'timecreated ASC');
|
||||
$this->assertCount(4, $muas);
|
||||
// Sort by id.
|
||||
ksort($muas);
|
||||
|
||||
$message1 = array_shift($messages);
|
||||
$message2 = array_shift($messages);
|
||||
$message3 = array_shift($messages);
|
||||
$message4 = array_shift($messages);
|
||||
$mua1 = array_shift($muas);
|
||||
$mua2 = array_shift($muas);
|
||||
$mua3 = array_shift($muas);
|
||||
$mua4 = array_shift($muas);
|
||||
|
||||
$this->assertNotEmpty($message1->timeuserfromdeleted);
|
||||
$this->assertEmpty($message1->timeusertodeleted);
|
||||
$this->assertEquals($user1->id, $mua1->userid);
|
||||
$this->assertEquals($m1id, $mua1->messageid);
|
||||
$this->assertEquals(\core_message\api::MESSAGE_ACTION_DELETED, $mua1->action);
|
||||
|
||||
$this->assertEmpty($message2->timeuserfromdeleted);
|
||||
$this->assertNotEmpty($message2->timeusertodeleted);
|
||||
$this->assertEquals($user1->id, $mua2->userid);
|
||||
$this->assertEquals($m2id, $mua2->messageid);
|
||||
$this->assertEquals(\core_message\api::MESSAGE_ACTION_DELETED, $mua2->action);
|
||||
|
||||
$this->assertNotEmpty($message3->timeuserfromdeleted);
|
||||
$this->assertEmpty($message3->timeusertodeleted);
|
||||
$this->assertEquals($user1->id, $mua3->userid);
|
||||
$this->assertEquals($m3id, $mua3->messageid);
|
||||
$this->assertEquals(\core_message\api::MESSAGE_ACTION_DELETED, $mua3->action);
|
||||
|
||||
$this->assertEmpty($message4->timeuserfromdeleted);
|
||||
$this->assertNotEmpty($message4->timeusertodeleted);
|
||||
$this->assertEquals($user1->id, $mua4->userid);
|
||||
$this->assertEquals($m4id, $mua4->messageid);
|
||||
$this->assertEquals(\core_message\api::MESSAGE_ACTION_DELETED, $mua4->action);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -73,16 +73,33 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
|||
$time = time();
|
||||
}
|
||||
|
||||
if ($notification) {
|
||||
$record = new stdClass();
|
||||
$record->useridfrom = $userfrom->id;
|
||||
$record->useridto = $userto->id;
|
||||
$record->subject = 'No subject';
|
||||
$record->fullmessage = $message;
|
||||
$record->smallmessage = $message;
|
||||
$record->timecreated = $time;
|
||||
|
||||
return $DB->insert_record('notifications', $record);
|
||||
}
|
||||
|
||||
if (!$conversationid = \core_message\api::get_conversation_between_users($userfrom->id, $userto->id)) {
|
||||
$conversationid = \core_message\api::create_conversation_between_users($userfrom->id,
|
||||
$userto->id);
|
||||
}
|
||||
|
||||
// Ok, send the message.
|
||||
$record = new stdClass();
|
||||
$record->useridfrom = $userfrom->id;
|
||||
$record->useridto = $userto->id;
|
||||
$record->conversationid = $conversationid;
|
||||
$record->subject = 'No subject';
|
||||
$record->fullmessage = $message;
|
||||
$record->smallmessage = $message;
|
||||
$record->timecreated = $time;
|
||||
$record->notification = $notification;
|
||||
|
||||
return $DB->insert_record('message', $record);
|
||||
return $DB->insert_record('messages', $record);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -101,14 +118,17 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
|||
message_add_contact($user2->id, 1);
|
||||
|
||||
$this->assertCount(1, message_get_blocked_users());
|
||||
$this->assertDebuggingCalled();
|
||||
|
||||
// Block other user.
|
||||
message_block_contact($user1->id);
|
||||
$this->assertCount(2, message_get_blocked_users());
|
||||
$this->assertDebuggingCalled();
|
||||
|
||||
// Test deleting users.
|
||||
delete_user($user1);
|
||||
$this->assertCount(1, message_get_blocked_users());
|
||||
$this->assertDebuggingCalled();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -138,6 +158,7 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
|||
$this->send_fake_message($user3, $USER);
|
||||
|
||||
list($onlinecontacts, $offlinecontacts, $strangers) = message_get_contacts();
|
||||
$this->assertDebuggingCalled();
|
||||
$this->assertCount(0, $onlinecontacts);
|
||||
$this->assertCount(2, $offlinecontacts);
|
||||
$this->assertCount(1, $strangers);
|
||||
|
@ -146,6 +167,7 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
|||
$this->send_fake_message($noreplyuser, $USER);
|
||||
$this->send_fake_message($supportuser, $USER);
|
||||
list($onlinecontacts, $offlinecontacts, $strangers) = message_get_contacts();
|
||||
$this->assertDebuggingCalled();
|
||||
$this->assertCount(0, $onlinecontacts);
|
||||
$this->assertCount(2, $offlinecontacts);
|
||||
$this->assertCount(3, $strangers);
|
||||
|
@ -153,6 +175,7 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
|||
// Block 1 user.
|
||||
message_block_contact($user2->id);
|
||||
list($onlinecontacts, $offlinecontacts, $strangers) = message_get_contacts();
|
||||
$this->assertDebuggingCalled();
|
||||
$this->assertCount(0, $onlinecontacts);
|
||||
$this->assertCount(1, $offlinecontacts);
|
||||
$this->assertCount(3, $strangers);
|
||||
|
@ -161,6 +184,7 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
|||
core_user::reset_internal_users();
|
||||
$CFG->noreplyuserid = $user3->id;
|
||||
list($onlinecontacts, $offlinecontacts, $strangers) = message_get_contacts();
|
||||
$this->assertDebuggingCalled();
|
||||
$this->assertCount(0, $onlinecontacts);
|
||||
$this->assertCount(1, $offlinecontacts);
|
||||
$this->assertCount(2, $strangers);
|
||||
|
@ -168,8 +192,9 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
|||
// Test deleting users.
|
||||
delete_user($user1);
|
||||
delete_user($user3);
|
||||
|
||||
core_user::reset_internal_users();
|
||||
list($onlinecontacts, $offlinecontacts, $strangers) = message_get_contacts();
|
||||
$this->assertDebuggingCalled();
|
||||
$this->assertCount(0, $onlinecontacts);
|
||||
$this->assertCount(0, $offlinecontacts);
|
||||
$this->assertCount(1, $strangers);
|
||||
|
@ -195,9 +220,9 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
|||
}
|
||||
|
||||
/**
|
||||
* Test message_count_unread_messages with notifications.
|
||||
* Test message_count_unread_messages with read messages.
|
||||
*/
|
||||
public function test_message_count_unread_messages_with_notifications() {
|
||||
public function test_message_count_unread_messages_with_read_messages() {
|
||||
// Create users to send and receive messages.
|
||||
$userfrom1 = $this->getDataGenerator()->create_user();
|
||||
$userfrom2 = $this->getDataGenerator()->create_user();
|
||||
|
@ -206,16 +231,15 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
|||
$this->assertEquals(0, message_count_unread_messages($userto));
|
||||
|
||||
// Send fake messages.
|
||||
$this->send_fake_message($userfrom1, $userto);
|
||||
$messageid = $this->send_fake_message($userfrom1, $userto);
|
||||
$this->send_fake_message($userfrom2, $userto);
|
||||
|
||||
// Send fake notifications.
|
||||
$this->send_fake_message($userfrom1, $userto, 'Notification', 1);
|
||||
$this->send_fake_message($userfrom2, $userto, 'Notification', 1);
|
||||
// Mark message as read.
|
||||
\core_message\api::mark_message_as_read($userto->id, $messageid);
|
||||
|
||||
// Should only count the messages.
|
||||
$this->assertEquals(2, message_count_unread_messages($userto));
|
||||
$this->assertEquals(1, message_count_unread_messages($userto, $userfrom1));
|
||||
// Should only count the messages that weren't read by the current user.
|
||||
$this->assertEquals(1, message_count_unread_messages($userto));
|
||||
$this->assertEquals(0, message_count_unread_messages($userto, $userfrom1));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -235,13 +259,8 @@ class core_message_messagelib_testcase extends advanced_testcase {
|
|||
$messageid = $this->send_fake_message($userfrom1, $userto);
|
||||
$this->send_fake_message($userfrom2, $userto);
|
||||
|
||||
// Send fake notifications.
|
||||
$this->send_fake_message($userfrom1, $userto, 'Notification', 1);
|
||||
$this->send_fake_message($userfrom2, $userto, 'Notification', 1);
|
||||
|
||||
// Delete a message.
|
||||
$message = $DB->get_record('message', array('id' => $messageid));
|
||||
message_delete_message($message, $userto->id);
|
||||
\core_message\api::delete_message($userto->id, $messageid);
|
||||
|
||||
// Should only count the messages that weren't deleted by the current user.
|
||||
$this->assertEquals(1, message_count_unread_messages($userto));
|
||||
|
|
|
@ -273,7 +273,7 @@ class message_received_search_testcase extends advanced_testcase {
|
|||
$this->assertEquals(\core_search\manager::ACCESS_DENIED, $searcharea->check_access($messageid));
|
||||
}
|
||||
|
||||
message_delete_message($message, $user2->id);
|
||||
\core_message\api::delete_message($user2->id, $message->id);
|
||||
$this->assertEquals(\core_search\manager::ACCESS_DELETED, $searcharea->check_access($messageid));
|
||||
|
||||
$this->setUser($user3);
|
||||
|
|
|
@ -284,7 +284,7 @@ class message_sent_search_testcase extends advanced_testcase {
|
|||
|
||||
$this->assertEquals(\core_search\manager::ACCESS_DELETED, $searcharea->check_access(-123));
|
||||
|
||||
message_delete_message($message, $user1->id);
|
||||
\core_message\api::delete_message($user1->id, $message->id);
|
||||
$this->assertEquals(\core_search\manager::ACCESS_DELETED, $searcharea->check_access($messageid));
|
||||
|
||||
$this->setUser($user2);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue