/**
  * Test get_contacts.
  */
 public function test_get_contacts()
 {
     $this->resetAfterTest(true);
     $user1 = self::getDataGenerator()->create_user();
     $user_stranger = self::getDataGenerator()->create_user();
     $user_offline1 = self::getDataGenerator()->create_user();
     $user_offline2 = self::getDataGenerator()->create_user();
     $user_offline3 = self::getDataGenerator()->create_user();
     $user_online = new stdClass();
     $user_online->lastaccess = time();
     $user_online = self::getDataGenerator()->create_user($user_online);
     $user_blocked = self::getDataGenerator()->create_user();
     // Login as user1.
     $this->setUser($user1);
     $this->assertEquals(array(), core_message_external::create_contacts(array($user_offline1->id, $user_offline2->id, $user_offline3->id, $user_online->id)));
     // User_stranger sends a couple of messages to user1.
     $this->send_message($user_stranger, $user1, 'Hello there!');
     $this->send_message($user_stranger, $user1, 'How you goin?');
     $this->send_message($user_stranger, $user1, 'Cya!');
     // User_blocked sends a message to user1.
     $this->send_message($user_blocked, $user1, 'Here, have some spam.');
     // Retrieve the contacts of the user.
     $this->setUser($user1);
     $contacts = core_message_external::get_contacts();
     $contacts = external_api::clean_returnvalue(core_message_external::get_contacts_returns(), $contacts);
     $this->assertCount(3, $contacts['offline']);
     $this->assertCount(1, $contacts['online']);
     $this->assertCount(2, $contacts['strangers']);
     core_message_external::block_contacts(array($user_blocked->id));
     $contacts = core_message_external::get_contacts();
     $contacts = external_api::clean_returnvalue(core_message_external::get_contacts_returns(), $contacts);
     $this->assertCount(3, $contacts['offline']);
     $this->assertCount(1, $contacts['online']);
     $this->assertCount(1, $contacts['strangers']);
     // Checking some of the fields returned.
     $stranger = array_pop($contacts['strangers']);
     $this->assertEquals($user_stranger->id, $stranger['id']);
     $this->assertEquals(3, $stranger['unread']);
 }
Example #2
0
 /**
  * Test delete_message.
  */
 public function test_delete_message()
 {
     global $DB;
     $this->resetAfterTest(true);
     $user1 = self::getDataGenerator()->create_user();
     $user2 = self::getDataGenerator()->create_user();
     $user3 = self::getDataGenerator()->create_user();
     $user4 = self::getDataGenerator()->create_user();
     // Login as user1.
     $this->setUser($user1);
     $this->assertEquals(array(), core_message_external::create_contacts(array($user2->id, $user3->id)));
     // User user1 does not interchange messages with user3.
     $m1to2 = message_post_message($user1, $user2, 'some random text 1', FORMAT_MOODLE);
     $m2to3 = message_post_message($user2, $user3, 'some random text 3', FORMAT_MOODLE);
     $m3to2 = message_post_message($user3, $user2, 'some random text 4', FORMAT_MOODLE);
     $m3to4 = message_post_message($user3, $user4, 'some random text 4', FORMAT_MOODLE);
     // Retrieve all messages sent by user2 (they are currently unread).
     $lastmessages = message_get_messages($user1->id, $user2->id, 0, false);
     // Delete a message not read, as a user from.
     $result = core_message_external::delete_message($m1to2, $user1->id, false);
     $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);
     // Try to delete the same message again.
     $result = core_message_external::delete_message($m1to2, $user1->id, false);
     $result = external_api::clean_returnvalue(core_message_external::delete_message_returns(), $result);
     $this->assertFalse($result['status']);
     // Try to delete a message that does not belong to me.
     try {
         $messageid = core_message_external::delete_message($m2to3, $user3->id, false);
         $this->fail('Exception expected due invalid messageid.');
     } catch (moodle_exception $e) {
         $this->assertEquals('You do not have permission to delete this message', $e->errorcode);
     }
     $this->setUser($user3);
     // Delete a message not read, as a user to.
     $result = core_message_external::delete_message($m2to3, $user3->id, false);
     $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);
     // 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);
     $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);
     // 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);
     }
     // Invalid user.
     try {
         $result = core_message_external::delete_message($m1to2, -1, false);
         $this->fail('Exception expected due invalid user.');
     } catch (moodle_exception $e) {
         $this->assertEquals('invaliduser', $e->errorcode);
     }
     // Not active user.
     delete_user($user2);
     try {
         $result = core_message_external::delete_message($m1to2, $user2->id, false);
         $this->fail('Exception expected due invalid user.');
     } catch (moodle_exception $e) {
         $this->assertEquals('userdeleted', $e->errorcode);
     }
     // Now, as an admin, try to delete any message.
     $this->setAdminUser();
     $result = core_message_external::delete_message($m3to4, $user4->id, false);
     $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);
 }
 /**
  * Test get_blocked_users.
  */
 public function test_get_blocked_users()
 {
     $this->resetAfterTest(true);
     $user1 = self::getDataGenerator()->create_user();
     $userstranger = self::getDataGenerator()->create_user();
     $useroffline1 = self::getDataGenerator()->create_user();
     $useroffline2 = self::getDataGenerator()->create_user();
     $userblocked = self::getDataGenerator()->create_user();
     // Login as user1.
     $this->setUser($user1);
     $this->assertEquals(array(), core_message_external::create_contacts(array($useroffline1->id, $useroffline2->id)));
     // The userstranger sends a couple of messages to user1.
     $this->send_message($userstranger, $user1, 'Hello there!');
     $this->send_message($userstranger, $user1, 'How you goin?');
     // The userblocked sends a message to user1.
     // Note that this user is not blocked at this point.
     $this->send_message($userblocked, $user1, 'Here, have some spam.');
     // Retrieve the list of blocked users.
     $this->setUser($user1);
     $blockedusers = core_message_external::get_blocked_users($user1->id);
     $blockedusers = external_api::clean_returnvalue(core_message_external::get_blocked_users_returns(), $blockedusers);
     $this->assertCount(0, $blockedusers['users']);
     // Block the $userblocked and retrieve again the list.
     core_message_external::block_contacts(array($userblocked->id));
     $blockedusers = core_message_external::get_blocked_users($user1->id);
     $blockedusers = external_api::clean_returnvalue(core_message_external::get_blocked_users_returns(), $blockedusers);
     $this->assertCount(1, $blockedusers['users']);
 }
Example #4
0
 /**
  * Test mark_message_read.
  */
 public function test_mark_message_read()
 {
     $this->resetAfterTest(true);
     $user1 = self::getDataGenerator()->create_user();
     $user2 = self::getDataGenerator()->create_user();
     $user3 = self::getDataGenerator()->create_user();
     // Login as user1.
     $this->setUser($user1);
     $this->assertEquals(array(), core_message_external::create_contacts(array($user2->id, $user3->id)));
     // The user2 sends a couple of messages to user1.
     $this->send_message($user2, $user1, 'Hello there!');
     $this->send_message($user2, $user1, 'How you goin?');
     $this->send_message($user3, $user1, 'How you goin?');
     $this->send_message($user3, $user2, 'How you goin?');
     // Retrieve all messages sent by user2 (they are currently unread).
     $lastmessages = message_get_messages($user1->id, $user2->id, 0, false);
     $messageids = array();
     foreach ($lastmessages as $m) {
         $messageid = core_message_external::mark_message_read($m->id, time());
         $messageids[] = external_api::clean_returnvalue(core_message_external::mark_message_read_returns(), $messageid);
     }
     // Retrieve all messages sent (they are currently read).
     $lastmessages = message_get_messages($user1->id, $user2->id, 0, true);
     $this->assertCount(2, $lastmessages);
     $this->assertArrayHasKey($messageids[0]['messageid'], $lastmessages);
     $this->assertArrayHasKey($messageids[1]['messageid'], $lastmessages);
     // Retrieve all messages sent by any user (that are currently unread).
     $lastmessages = message_get_messages($user1->id, 0, 0, false);
     $this->assertCount(1, $lastmessages);
     // Invalid message ids.
     try {
         $messageid = core_message_external::mark_message_read($messageids[0]['messageid'] * 2, time());
         $this->fail('Exception expected due invalid messageid.');
     } catch (dml_missing_record_exception $e) {
         $this->assertEquals('invalidrecord', $e->errorcode);
     }
     // A message to a different user.
     $lastmessages = message_get_messages($user2->id, $user3->id, 0, false);
     $messageid = array_pop($lastmessages)->id;
     try {
         $messageid = core_message_external::mark_message_read($messageid, time());
         $this->fail('Exception expected due invalid messageid.');
     } catch (invalid_parameter_exception $e) {
         $this->assertEquals('invalidparameter', $e->errorcode);
     }
 }