MDL-54708 message: notification popover respects message preferences
[moodle.git] / message / tests / externallib_test.php
CommitLineData
e6432668
JM
1<?php
2// This file is part of Moodle - http://moodle.org/
3//
4// Moodle is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8//
9// Moodle is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
16
17/**
18 * External message functions unit tests
19 *
20 * @package core_message
21 * @category external
22 * @copyright 2012 Jerome Mouneyrac
23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24 */
25
26defined('MOODLE_INTERNAL') || die();
27
28global $CFG;
29
30require_once($CFG->dirroot . '/webservice/tests/helpers.php');
31require_once($CFG->dirroot . '/message/externallib.php');
32
8252b7c2 33class core_message_externallib_testcase extends externallib_advanced_testcase {
e6432668 34
6ff4464b
JL
35 /**
36 * Tests set up
37 */
38 protected function setUp() {
39 global $CFG;
40
41 require_once($CFG->dirroot . '/message/lib.php');
42 }
43
d6731600
FM
44 /**
45 * Send a fake message.
46 *
47 * {@link message_send()} does not support transaction, this function will simulate a message
48 * sent from a user to another. We should stop using it once {@link message_send()} will support
49 * transactions. This is not clean at all, this is just used to add rows to the table.
50 *
51 * @param stdClass $userfrom user object of the one sending the message.
52 * @param stdClass $userto user object of the one receiving the message.
53 * @param string $message message to send.
54 */
55 protected function send_message($userfrom, $userto, $message = 'Hello world!') {
56 global $DB;
57 $record = new stdClass();
58 $record->useridfrom = $userfrom->id;
59 $record->useridto = $userto->id;
60 $record->subject = 'No subject';
61 $record->fullmessage = $message;
62 $record->timecreated = time();
63 $insert = $DB->insert_record('message', $record);
64 }
65
ada7695d
RW
66 /**
67 * Send a fake unread popup notification.
3274d5ca
RW
68 *
69 * {@link message_send()} does not support transaction, this function will simulate a message
70 * sent from a user to another. We should stop using it once {@link message_send()} will support
71 * transactions. This is not clean at all, this is just used to add rows to the table.
72 *
73 * @param stdClass $userfrom user object of the one sending the message.
74 * @param stdClass $userto user object of the one receiving the message.
75 * @param string $message message to send.
76 * @param int $timecreated time the message was created.
77 * @return int the id of the message
78 */
ada7695d 79 protected function send_fake_unread_popup_notification($userfrom, $userto, $message = 'Hello world!', $timecreated = 0) {
3274d5ca
RW
80 global $DB;
81
82 $record = new stdClass();
83 $record->useridfrom = $userfrom->id;
84 $record->useridto = $userto->id;
85 $record->notification = 1;
86 $record->subject = 'No subject';
87 $record->fullmessage = $message;
88 $record->smallmessage = $message;
89 $record->timecreated = $timecreated ? $timecreated : time();
90
ada7695d
RW
91 $id = $DB->insert_record('message', $record);
92
93 $popup = new stdClass();
94 $popup->messageid = $id;
95 $popup->isread = 0;
96
97 $DB->insert_record('message_popup', $popup);
98
99 return $id;
3274d5ca
RW
100 }
101
102 /**
ada7695d 103 * Send a fake read popup notification.
3274d5ca
RW
104 *
105 * {@link message_send()} does not support transaction, this function will simulate a message
106 * sent from a user to another. We should stop using it once {@link message_send()} will support
107 * transactions. This is not clean at all, this is just used to add rows to the table.
108 *
109 * @param stdClass $userfrom user object of the one sending the message.
110 * @param stdClass $userto user object of the one receiving the message.
111 * @param string $message message to send.
112 * @param int $timecreated time the message was created.
113 * @return int the id of the message
114 */
ada7695d 115 protected function send_fake_read_popup_notification($userfrom, $userto, $message = 'Hello world!', $timecreated = 0, $timeread = 0) {
3274d5ca
RW
116 global $DB;
117
118 $record = new stdClass();
119 $record->useridfrom = $userfrom->id;
120 $record->useridto = $userto->id;
121 $record->notification = 1;
122 $record->subject = 'No subject';
123 $record->fullmessage = $message;
124 $record->smallmessage = $message;
125 $record->timecreated = $timecreated ? $timecreated : time();
126 $record->timeread = $timeread ? $timeread : time();
127
ada7695d
RW
128 $id = $DB->insert_record('message_read', $record);
129
130 $popup = new stdClass();
131 $popup->messageid = $id;
132 $popup->isread = 1;
133
134 $DB->insert_record('message_popup', $popup);
135
136 return $id;
3274d5ca
RW
137 }
138
e6432668
JM
139 /**
140 * Test send_instant_messages
141 */
142 public function test_send_instant_messages() {
143
144 global $DB, $USER, $CFG;
145
146 $this->resetAfterTest(true);
7356e732
EL
147 // Transactions used in tests, tell phpunit use alternative reset method.
148 $this->preventResetByRollback();
e6432668
JM
149
150 // Turn off all message processors (so nothing is really sent)
151 require_once($CFG->dirroot . '/message/lib.php');
152 $messageprocessors = get_message_processors();
153 foreach($messageprocessors as $messageprocessor) {
154 $messageprocessor->enabled = 0;
155 $DB->update_record('message_processors', $messageprocessor);
156 }
157
158 // Set the required capabilities by the external function
159 $contextid = context_system::instance()->id;
160 $roleid = $this->assignUserCapability('moodle/site:sendmessage', $contextid);
161
162 $user1 = self::getDataGenerator()->create_user();
163
164 // Create test message data.
165 $message1 = array();
166 $message1['touserid'] = $user1->id;
167 $message1['text'] = 'the message.';
168 $message1['clientmsgid'] = 4;
169 $messages = array($message1);
170
171 $sentmessages = core_message_external::send_instant_messages($messages);
172
fb695f6e
JM
173 // We need to execute the return values cleaning process to simulate the web service server.
174 $sentmessages = external_api::clean_returnvalue(core_message_external::send_instant_messages_returns(), $sentmessages);
175
e6432668
JM
176 $themessage = $DB->get_record('message', array('id' => $sentmessages[0]['msgid']));
177
178 // Confirm that the message was inserted correctly.
179 $this->assertEquals($themessage->useridfrom, $USER->id);
180 $this->assertEquals($themessage->useridto, $message1['touserid']);
181 $this->assertEquals($themessage->smallmessage, $message1['text']);
182 $this->assertEquals($sentmessages[0]['clientmsgid'], $message1['clientmsgid']);
183 }
d6731600
FM
184
185 /**
186 * Test create_contacts.
187 */
188 public function test_create_contacts() {
189 $this->resetAfterTest(true);
190
191 $user1 = self::getDataGenerator()->create_user();
192 $user2 = self::getDataGenerator()->create_user();
193 $user3 = self::getDataGenerator()->create_user();
194 $user4 = self::getDataGenerator()->create_user();
195 $user5 = self::getDataGenerator()->create_user();
196 $this->setUser($user1);
197
198 // Adding a contact.
199 $return = core_message_external::create_contacts(array($user2->id));
200 $return = external_api::clean_returnvalue(core_message_external::create_contacts_returns(), $return);
201 $this->assertEquals(array(), $return);
202
203 // Adding a contact who is already a contact.
204 $return = core_message_external::create_contacts(array($user2->id));
205 $return = external_api::clean_returnvalue(core_message_external::create_contacts_returns(), $return);
206 $this->assertEquals(array(), $return);
207
208 // Adding multiple contacts.
209 $return = core_message_external::create_contacts(array($user3->id, $user4->id));
210 $return = external_api::clean_returnvalue(core_message_external::create_contacts_returns(), $return);
211 $this->assertEquals(array(), $return);
212
213 // Adding a non-existing user.
214 $return = core_message_external::create_contacts(array(99999));
215 $return = external_api::clean_returnvalue(core_message_external::create_contacts_returns(), $return);
216 $this->assertCount(1, $return);
217 $return = array_pop($return);
218 $this->assertEquals($return['warningcode'], 'contactnotcreated');
219 $this->assertEquals($return['itemid'], 99999);
220
221 // Adding contacts with valid and invalid parameters.
222 $return = core_message_external::create_contacts(array($user5->id, 99999));
223 $return = external_api::clean_returnvalue(core_message_external::create_contacts_returns(), $return);
224 $this->assertCount(1, $return);
225 $return = array_pop($return);
226 $this->assertEquals($return['warningcode'], 'contactnotcreated');
227 $this->assertEquals($return['itemid'], 99999);
228 }
229
230 /**
231 * Test delete_contacts.
232 */
233 public function test_delete_contacts() {
234 $this->resetAfterTest(true);
235
236 $user1 = self::getDataGenerator()->create_user();
237 $user2 = self::getDataGenerator()->create_user();
238 $user3 = self::getDataGenerator()->create_user();
239 $user4 = self::getDataGenerator()->create_user();
240 $user5 = self::getDataGenerator()->create_user();
241 $user6 = self::getDataGenerator()->create_user();
242 $this->setUser($user1);
243 $this->assertEquals(array(), core_message_external::create_contacts(
244 array($user3->id, $user4->id, $user5->id, $user6->id)));
245
246 // Removing a non-contact.
247 $return = core_message_external::delete_contacts(array($user2->id));
248 $this->assertNull($return);
249
250 // Removing one contact.
251 $return = core_message_external::delete_contacts(array($user3->id));
252 $this->assertNull($return);
253
254 // Removing multiple contacts.
255 $return = core_message_external::delete_contacts(array($user4->id, $user5->id));
256 $this->assertNull($return);
257
258 // Removing contact from unexisting user.
259 $return = core_message_external::delete_contacts(array(99999));
260 $this->assertNull($return);
261
262 // Removing mixed valid and invalid data.
263 $return = core_message_external::delete_contacts(array($user6->id, 99999));
264 $this->assertNull($return);
265 }
266
267 /**
268 * Test block_contacts.
269 */
270 public function test_block_contacts() {
271 $this->resetAfterTest(true);
272
273 $user1 = self::getDataGenerator()->create_user();
274 $user2 = self::getDataGenerator()->create_user();
275 $user3 = self::getDataGenerator()->create_user();
276 $user4 = self::getDataGenerator()->create_user();
277 $user5 = self::getDataGenerator()->create_user();
278 $this->setUser($user1);
279 $this->assertEquals(array(), core_message_external::create_contacts(array($user3->id, $user4->id, $user5->id)));
280
281 // Blocking a contact.
282 $return = core_message_external::block_contacts(array($user2->id));
283 $return = external_api::clean_returnvalue(core_message_external::block_contacts_returns(), $return);
284 $this->assertEquals(array(), $return);
285
286 // Blocking a contact who is already a contact.
287 $return = core_message_external::block_contacts(array($user2->id));
288 $return = external_api::clean_returnvalue(core_message_external::block_contacts_returns(), $return);
289 $this->assertEquals(array(), $return);
290
291 // Blocking multiple contacts.
292 $return = core_message_external::block_contacts(array($user3->id, $user4->id));
293 $return = external_api::clean_returnvalue(core_message_external::block_contacts_returns(), $return);
294 $this->assertEquals(array(), $return);
295
296 // Blocking a non-existing user.
297 $return = core_message_external::block_contacts(array(99999));
298 $return = external_api::clean_returnvalue(core_message_external::block_contacts_returns(), $return);
299 $this->assertCount(1, $return);
300 $return = array_pop($return);
301 $this->assertEquals($return['warningcode'], 'contactnotblocked');
302 $this->assertEquals($return['itemid'], 99999);
303
304 // Blocking contacts with valid and invalid parameters.
305 $return = core_message_external::block_contacts(array($user5->id, 99999));
306 $return = external_api::clean_returnvalue(core_message_external::block_contacts_returns(), $return);
307 $this->assertCount(1, $return);
308 $return = array_pop($return);
309 $this->assertEquals($return['warningcode'], 'contactnotblocked');
310 $this->assertEquals($return['itemid'], 99999);
311 }
312
313 /**
314 * Test unblock_contacts.
315 */
316 public function test_unblock_contacts() {
317 $this->resetAfterTest(true);
318
319 $user1 = self::getDataGenerator()->create_user();
320 $user2 = self::getDataGenerator()->create_user();
321 $user3 = self::getDataGenerator()->create_user();
322 $user4 = self::getDataGenerator()->create_user();
323 $user5 = self::getDataGenerator()->create_user();
324 $user6 = self::getDataGenerator()->create_user();
325 $this->setUser($user1);
326 $this->assertEquals(array(), core_message_external::create_contacts(
327 array($user3->id, $user4->id, $user5->id, $user6->id)));
328
329 // Removing a non-contact.
330 $return = core_message_external::unblock_contacts(array($user2->id));
331 $this->assertNull($return);
332
333 // Removing one contact.
334 $return = core_message_external::unblock_contacts(array($user3->id));
335 $this->assertNull($return);
336
337 // Removing multiple contacts.
338 $return = core_message_external::unblock_contacts(array($user4->id, $user5->id));
339 $this->assertNull($return);
340
341 // Removing contact from unexisting user.
342 $return = core_message_external::unblock_contacts(array(99999));
343 $this->assertNull($return);
344
345 // Removing mixed valid and invalid data.
346 $return = core_message_external::unblock_contacts(array($user6->id, 99999));
347 $this->assertNull($return);
348
349 }
350
351 /**
352 * Test get_contacts.
353 */
354 public function test_get_contacts() {
355 $this->resetAfterTest(true);
356
357 $user1 = self::getDataGenerator()->create_user();
358 $user_stranger = self::getDataGenerator()->create_user();
359 $user_offline1 = self::getDataGenerator()->create_user();
360 $user_offline2 = self::getDataGenerator()->create_user();
361 $user_offline3 = self::getDataGenerator()->create_user();
362 $user_online = new stdClass();
363 $user_online->lastaccess = time();
364 $user_online = self::getDataGenerator()->create_user($user_online);
365 $user_blocked = self::getDataGenerator()->create_user();
0b074e88 366 $noreplyuser = core_user::get_user(core_user::NOREPLY_USER);
d6731600
FM
367
368 // Login as user1.
369 $this->setUser($user1);
370 $this->assertEquals(array(), core_message_external::create_contacts(
371 array($user_offline1->id, $user_offline2->id, $user_offline3->id, $user_online->id)));
372
373 // User_stranger sends a couple of messages to user1.
374 $this->send_message($user_stranger, $user1, 'Hello there!');
375 $this->send_message($user_stranger, $user1, 'How you goin?');
376 $this->send_message($user_stranger, $user1, 'Cya!');
0b074e88 377 $this->send_message($noreplyuser, $user1, 'I am not a real user');
d6731600
FM
378
379 // User_blocked sends a message to user1.
380 $this->send_message($user_blocked, $user1, 'Here, have some spam.');
381
382 // Retrieve the contacts of the user.
383 $this->setUser($user1);
384 $contacts = core_message_external::get_contacts();
385 $contacts = external_api::clean_returnvalue(core_message_external::get_contacts_returns(), $contacts);
386 $this->assertCount(3, $contacts['offline']);
387 $this->assertCount(1, $contacts['online']);
0b074e88 388 $this->assertCount(3, $contacts['strangers']);
d6731600
FM
389 core_message_external::block_contacts(array($user_blocked->id));
390 $contacts = core_message_external::get_contacts();
391 $contacts = external_api::clean_returnvalue(core_message_external::get_contacts_returns(), $contacts);
392 $this->assertCount(3, $contacts['offline']);
393 $this->assertCount(1, $contacts['online']);
0b074e88 394 $this->assertCount(2, $contacts['strangers']);
d6731600
FM
395
396 // Checking some of the fields returned.
397 $stranger = array_pop($contacts['strangers']);
01393790 398
0b074e88
JL
399 $this->assertEquals(core_user::NOREPLY_USER, $stranger['id']);
400 $this->assertEquals(1, $stranger['unread']);
01393790
JL
401
402 // Check that deleted users are not returned.
403 delete_user($user_offline1);
404 delete_user($user_stranger);
405 delete_user($user_online);
406 $contacts = core_message_external::get_contacts();
407 $contacts = external_api::clean_returnvalue(core_message_external::get_contacts_returns(), $contacts);
408 $this->assertCount(2, $contacts['offline']);
409 $this->assertCount(0, $contacts['online']);
410 $this->assertCount(1, $contacts['strangers']);
d6731600
FM
411 }
412
413 /**
414 * Test search_contacts.
52f3e060 415 * @expectedException moodle_exception
d6731600
FM
416 */
417 public function test_search_contacts() {
418 global $DB;
419 $this->resetAfterTest(true);
420
421 $course1 = $this->getDataGenerator()->create_course();
422 $course2 = $this->getDataGenerator()->create_course();
423
424 $user1 = new stdClass();
425 $user1->firstname = 'X';
426 $user1->lastname = 'X';
427 $user1 = $this->getDataGenerator()->create_user($user1);
428 $this->getDataGenerator()->enrol_user($user1->id, $course1->id);
429 $this->getDataGenerator()->enrol_user($user1->id, $course2->id);
430
431 $user2 = new stdClass();
432 $user2->firstname = 'Eric';
433 $user2->lastname = 'Cartman';
434 $user2 = self::getDataGenerator()->create_user($user2);
435 $user3 = new stdClass();
436 $user3->firstname = 'Stan';
437 $user3->lastname = 'Marsh';
438 $user3 = self::getDataGenerator()->create_user($user3);
439 self::getDataGenerator()->enrol_user($user3->id, $course1->id);
440 $user4 = new stdClass();
441 $user4->firstname = 'Kyle';
442 $user4->lastname = 'Broflovski';
443 $user4 = self::getDataGenerator()->create_user($user4);
444 $user5 = new stdClass();
445 $user5->firstname = 'Kenny';
446 $user5->lastname = 'McCormick';
447 $user5 = self::getDataGenerator()->create_user($user5);
448 self::getDataGenerator()->enrol_user($user5->id, $course2->id);
449
d6731600 450 $this->setUser($user1);
2e2d1977 451
d6731600
FM
452 $results = core_message_external::search_contacts('r');
453 $results = external_api::clean_returnvalue(core_message_external::search_contacts_returns(), $results);
2e2d1977
AD
454 $this->assertCount(5, $results); // Users 2 through 5 + admin
455
d6731600
FM
456 $results = core_message_external::search_contacts('r', true);
457 $results = external_api::clean_returnvalue(core_message_external::search_contacts_returns(), $results);
458 $this->assertCount(2, $results);
2e2d1977 459
d6731600
FM
460 $results = core_message_external::search_contacts('Kyle', false);
461 $results = external_api::clean_returnvalue(core_message_external::search_contacts_returns(), $results);
462 $this->assertCount(1, $results);
463 $result = reset($results);
464 $this->assertEquals($user4->id, $result['id']);
2e2d1977 465
d6731600
FM
466 $results = core_message_external::search_contacts('y', false);
467 $results = external_api::clean_returnvalue(core_message_external::search_contacts_returns(), $results);
468 $this->assertCount(2, $results);
2e2d1977 469
d6731600
FM
470 $results = core_message_external::search_contacts('y', true);
471 $results = external_api::clean_returnvalue(core_message_external::search_contacts_returns(), $results);
472 $this->assertCount(1, $results);
473 $result = reset($results);
474 $this->assertEquals($user5->id, $result['id']);
475
476 // Empty query, will throw an exception.
d6731600
FM
477 $results = core_message_external::search_contacts('');
478 }
6ff4464b
JL
479
480 /**
481 * Test get_messages.
482 */
483 public function test_get_messages() {
ea21d637 484 global $CFG, $DB;
6ff4464b
JL
485 $this->resetAfterTest(true);
486
487 $this->preventResetByRollback();
488 // This mark the messages as read!.
489 $sink = $this->redirectMessages();
490
491 $user1 = self::getDataGenerator()->create_user();
492 $user2 = self::getDataGenerator()->create_user();
493 $user3 = self::getDataGenerator()->create_user();
494
495 $course = self::getDataGenerator()->create_course();
496
497 // Send a message from one user to another.
498 message_post_message($user1, $user2, 'some random text 1', FORMAT_MOODLE);
499 message_post_message($user1, $user3, 'some random text 2', FORMAT_MOODLE);
500 message_post_message($user2, $user3, 'some random text 3', FORMAT_MOODLE);
501 message_post_message($user3, $user2, 'some random text 4', FORMAT_MOODLE);
502 message_post_message($user3, $user1, 'some random text 5', FORMAT_MOODLE);
503
504 $this->setUser($user1);
505 // Get read conversations from user1 to user2.
506 $messages = core_message_external::get_messages($user2->id, $user1->id, 'conversations', true, true, 0, 0);
507 $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages);
508 $this->assertCount(1, $messages['messages']);
509
ea21d637
JL
510 // Delete the message.
511 $message = array_shift($messages['messages']);
512 $messagetobedeleted = $DB->get_record('message_read', array('id' => $message['id']));
513 message_delete_message($messagetobedeleted, $user1->id);
514
515 $messages = core_message_external::get_messages($user2->id, $user1->id, 'conversations', true, true, 0, 0);
516 $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages);
517 $this->assertCount(0, $messages['messages']);
518
6ff4464b
JL
519 // Get unread conversations from user1 to user2.
520 $messages = core_message_external::get_messages($user2->id, $user1->id, 'conversations', false, true, 0, 0);
521 $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages);
522 $this->assertCount(0, $messages['messages']);
523
524 // Get read messages send from user1.
525 $messages = core_message_external::get_messages(0, $user1->id, 'conversations', true, true, 0, 0);
526 $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages);
ea21d637 527 $this->assertCount(1, $messages['messages']);
6ff4464b
JL
528
529 $this->setUser($user2);
530 // Get read conversations from any user to user2.
531 $messages = core_message_external::get_messages($user2->id, 0, 'conversations', true, true, 0, 0);
532 $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages);
533 $this->assertCount(2, $messages['messages']);
534
ea21d637
JL
535 // Conversations from user3 to user2.
536 $messages = core_message_external::get_messages($user2->id, $user3->id, 'conversations', true, true, 0, 0);
537 $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages);
538 $this->assertCount(1, $messages['messages']);
539
540 // Delete the message.
541 $message = array_shift($messages['messages']);
542 $messagetobedeleted = $DB->get_record('message_read', array('id' => $message['id']));
543 message_delete_message($messagetobedeleted, $user2->id);
544
545 $messages = core_message_external::get_messages($user2->id, $user3->id, 'conversations', true, true, 0, 0);
546 $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages);
547 $this->assertCount(0, $messages['messages']);
548
6ff4464b
JL
549 $this->setUser($user3);
550 // Get read notifications received by user3.
551 $messages = core_message_external::get_messages($user3->id, 0, 'notifications', true, true, 0, 0);
552 $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages);
553 $this->assertCount(0, $messages['messages']);
554
555 // Now, create some notifications...
556 // We are creating fake notifications but based on real ones.
557
127ef540 558 // This one omits notification = 1.
6ff4464b
JL
559 $eventdata = new stdClass();
560 $eventdata->modulename = 'moodle';
561 $eventdata->component = 'enrol_paypal';
562 $eventdata->name = 'paypal_enrolment';
563 $eventdata->userfrom = get_admin();
564 $eventdata->userto = $user1;
565 $eventdata->subject = "Moodle: PayPal payment";
566 $eventdata->fullmessage = "Your PayPal payment is pending.";
567 $eventdata->fullmessageformat = FORMAT_PLAIN;
568 $eventdata->fullmessagehtml = '';
569 $eventdata->smallmessage = '';
570 message_send($eventdata);
571
572 $message = new stdClass();
573 $message->notification = 1;
574 $message->component = 'enrol_manual';
575 $message->name = 'expiry_notification';
576 $message->userfrom = $user2;
577 $message->userto = $user1;
578 $message->subject = 'Enrolment expired';
579 $message->fullmessage = 'Enrolment expired blah blah blah';
580 $message->fullmessageformat = FORMAT_MARKDOWN;
581 $message->fullmessagehtml = markdown_to_html($message->fullmessage);
582 $message->smallmessage = $message->subject;
583 $message->contexturlname = $course->fullname;
584 $message->contexturl = (string)new moodle_url('/course/view.php', array('id' => $course->id));
585 message_send($message);
586
587 $userfrom = core_user::get_noreply_user();
588 $userfrom->maildisplay = true;
589 $eventdata = new stdClass();
590 $eventdata->component = 'moodle';
591 $eventdata->name = 'badgecreatornotice';
592 $eventdata->userfrom = $userfrom;
593 $eventdata->userto = $user1;
594 $eventdata->notification = 1;
595 $eventdata->subject = 'New badge';
596 $eventdata->fullmessage = format_text_email($eventdata->subject, FORMAT_HTML);
597 $eventdata->fullmessageformat = FORMAT_PLAIN;
598 $eventdata->fullmessagehtml = $eventdata->subject;
599 $eventdata->smallmessage = $eventdata->subject;
600 message_send($eventdata);
601
602 $eventdata = new stdClass();
603 $eventdata->name = 'submission';
604 $eventdata->component = 'mod_feedback';
605 $eventdata->userfrom = $user1;
606 $eventdata->userto = $user2;
607 $eventdata->subject = 'Feedback submitted';
608 $eventdata->fullmessage = 'Feedback submitted from an user';
609 $eventdata->fullmessageformat = FORMAT_PLAIN;
610 $eventdata->fullmessagehtml = '<strong>Feedback submitted</strong>';
611 $eventdata->smallmessage = '';
612 message_send($eventdata);
613
614 $this->setUser($user1);
615 // Get read notifications from any user to user1.
616 $messages = core_message_external::get_messages($user1->id, 0, 'notifications', true, true, 0, 0);
617 $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages);
618 $this->assertCount(3, $messages['messages']);
619
620 // Get one read notifications from any user to user1.
621 $messages = core_message_external::get_messages($user1->id, 0, 'notifications', true, true, 0, 1);
622 $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages);
623 $this->assertCount(1, $messages['messages']);
624
625 // Get unread notifications from any user to user1.
626 $messages = core_message_external::get_messages($user1->id, 0, 'notifications', false, true, 0, 0);
627 $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages);
628 $this->assertCount(0, $messages['messages']);
629
630 // Get read both type of messages from any user to user1.
631 $messages = core_message_external::get_messages($user1->id, 0, 'both', true, true, 0, 0);
632 $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages);
633 $this->assertCount(4, $messages['messages']);
634
635 // Get read notifications from no-reply-user to user1.
636 $messages = core_message_external::get_messages($user1->id, $userfrom->id, 'notifications', true, true, 0, 0);
637 $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages);
638 $this->assertCount(1, $messages['messages']);
639
640 // Get notifications send by user1 to any user.
641 $messages = core_message_external::get_messages(0, $user1->id, 'notifications', true, true, 0, 0);
642 $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages);
643 $this->assertCount(1, $messages['messages']);
644
645 // Test warnings.
646 $CFG->messaging = 0;
647
648 $messages = core_message_external::get_messages(0, $user1->id, 'both', true, true, 0, 0);
649 $messages = external_api::clean_returnvalue(core_message_external::get_messages_returns(), $messages);
650 $this->assertCount(1, $messages['warnings']);
651
652 // Test exceptions.
653
654 // Messaging disabled.
655 try {
656 $messages = core_message_external::get_messages(0, $user1->id, 'conversations', true, true, 0, 0);
657 $this->fail('Exception expected due messaging disabled.');
658 } catch (moodle_exception $e) {
659 $this->assertEquals('disabled', $e->errorcode);
660 }
661
662 $CFG->messaging = 1;
663
664 // Invalid users.
665 try {
666 $messages = core_message_external::get_messages(0, 0, 'conversations', true, true, 0, 0);
667 $this->fail('Exception expected due invalid users.');
668 } catch (moodle_exception $e) {
669 $this->assertEquals('accessdenied', $e->errorcode);
670 }
671
672 // Invalid user ids.
673 try {
674 $messages = core_message_external::get_messages(2500, 0, 'conversations', true, true, 0, 0);
675 $this->fail('Exception expected due invalid users.');
676 } catch (moodle_exception $e) {
677 $this->assertEquals('invaliduser', $e->errorcode);
678 }
679
680 // Invalid users (permissions).
681 $this->setUser($user2);
682 try {
683 $messages = core_message_external::get_messages(0, $user1->id, 'conversations', true, true, 0, 0);
684 $this->fail('Exception expected due invalid user.');
685 } catch (moodle_exception $e) {
686 $this->assertEquals('accessdenied', $e->errorcode);
687 }
688
689 }
ff1f3739
JL
690
691 /**
692 * Test get_blocked_users.
693 */
694 public function test_get_blocked_users() {
695 $this->resetAfterTest(true);
696
697 $user1 = self::getDataGenerator()->create_user();
698 $userstranger = self::getDataGenerator()->create_user();
699 $useroffline1 = self::getDataGenerator()->create_user();
700 $useroffline2 = self::getDataGenerator()->create_user();
701 $userblocked = self::getDataGenerator()->create_user();
702
703 // Login as user1.
704 $this->setUser($user1);
705 $this->assertEquals(array(), core_message_external::create_contacts(
706 array($useroffline1->id, $useroffline2->id)));
707
708 // The userstranger sends a couple of messages to user1.
709 $this->send_message($userstranger, $user1, 'Hello there!');
710 $this->send_message($userstranger, $user1, 'How you goin?');
711
712 // The userblocked sends a message to user1.
713 // Note that this user is not blocked at this point.
714 $this->send_message($userblocked, $user1, 'Here, have some spam.');
715
716 // Retrieve the list of blocked users.
717 $this->setUser($user1);
718 $blockedusers = core_message_external::get_blocked_users($user1->id);
719 $blockedusers = external_api::clean_returnvalue(core_message_external::get_blocked_users_returns(), $blockedusers);
720 $this->assertCount(0, $blockedusers['users']);
721
722 // Block the $userblocked and retrieve again the list.
723 core_message_external::block_contacts(array($userblocked->id));
724 $blockedusers = core_message_external::get_blocked_users($user1->id);
725 $blockedusers = external_api::clean_returnvalue(core_message_external::get_blocked_users_returns(), $blockedusers);
726 $this->assertCount(1, $blockedusers['users']);
727
01393790
JL
728 // Remove the $userblocked and check that the list now is empty.
729 delete_user($userblocked);
730 $blockedusers = core_message_external::get_blocked_users($user1->id);
731 $blockedusers = external_api::clean_returnvalue(core_message_external::get_blocked_users_returns(), $blockedusers);
732 $this->assertCount(0, $blockedusers['users']);
733
ff1f3739
JL
734 }
735
b6795827
JL
736 /**
737 * Test mark_message_read.
738 */
739 public function test_mark_message_read() {
740 $this->resetAfterTest(true);
741
742 $user1 = self::getDataGenerator()->create_user();
743 $user2 = self::getDataGenerator()->create_user();
744 $user3 = self::getDataGenerator()->create_user();
745
746 // Login as user1.
747 $this->setUser($user1);
748 $this->assertEquals(array(), core_message_external::create_contacts(
749 array($user2->id, $user3->id)));
750
751 // The user2 sends a couple of messages to user1.
752 $this->send_message($user2, $user1, 'Hello there!');
753 $this->send_message($user2, $user1, 'How you goin?');
754 $this->send_message($user3, $user1, 'How you goin?');
755 $this->send_message($user3, $user2, 'How you goin?');
756
757 // Retrieve all messages sent by user2 (they are currently unread).
758 $lastmessages = message_get_messages($user1->id, $user2->id, 0, false);
759
760 $messageids = array();
761 foreach ($lastmessages as $m) {
762 $messageid = core_message_external::mark_message_read($m->id, time());
763 $messageids[] = external_api::clean_returnvalue(core_message_external::mark_message_read_returns(), $messageid);
764 }
765
766 // Retrieve all messages sent (they are currently read).
767 $lastmessages = message_get_messages($user1->id, $user2->id, 0, true);
768 $this->assertCount(2, $lastmessages);
769 $this->assertArrayHasKey($messageids[0]['messageid'], $lastmessages);
770 $this->assertArrayHasKey($messageids[1]['messageid'], $lastmessages);
771
772 // Retrieve all messages sent by any user (that are currently unread).
773 $lastmessages = message_get_messages($user1->id, 0, 0, false);
774 $this->assertCount(1, $lastmessages);
775
776 // Invalid message ids.
777 try {
778 $messageid = core_message_external::mark_message_read($messageids[0]['messageid'] * 2, time());
779 $this->fail('Exception expected due invalid messageid.');
780 } catch (dml_missing_record_exception $e) {
781 $this->assertEquals('invalidrecord', $e->errorcode);
782 }
783
784 // A message to a different user.
785 $lastmessages = message_get_messages($user2->id, $user3->id, 0, false);
786 $messageid = array_pop($lastmessages)->id;
787 try {
788 $messageid = core_message_external::mark_message_read($messageid, time());
789 $this->fail('Exception expected due invalid messageid.');
790 } catch (invalid_parameter_exception $e) {
791 $this->assertEquals('invalidparameter', $e->errorcode);
792 }
793
794 }
795
419b1128
JL
796 /**
797 * Test delete_message.
798 */
799 public function test_delete_message() {
800 global $DB;
801 $this->resetAfterTest(true);
802
803 $user1 = self::getDataGenerator()->create_user();
804 $user2 = self::getDataGenerator()->create_user();
805 $user3 = self::getDataGenerator()->create_user();
806 $user4 = self::getDataGenerator()->create_user();
807
808 // Login as user1.
809 $this->setUser($user1);
810 $this->assertEquals(array(), core_message_external::create_contacts(array($user2->id, $user3->id)));
811
812 // User user1 does not interchange messages with user3.
813 $m1to2 = message_post_message($user1, $user2, 'some random text 1', FORMAT_MOODLE);
814 $m2to3 = message_post_message($user2, $user3, 'some random text 3', FORMAT_MOODLE);
815 $m3to2 = message_post_message($user3, $user2, 'some random text 4', FORMAT_MOODLE);
816 $m3to4 = message_post_message($user3, $user4, 'some random text 4', FORMAT_MOODLE);
817
818 // Retrieve all messages sent by user2 (they are currently unread).
819 $lastmessages = message_get_messages($user1->id, $user2->id, 0, false);
820
821 // Delete a message not read, as a user from.
822 $result = core_message_external::delete_message($m1to2, $user1->id, false);
823 $result = external_api::clean_returnvalue(core_message_external::delete_message_returns(), $result);
824 $this->assertTrue($result['status']);
825 $this->assertCount(0, $result['warnings']);
826 $deletedmessage = $DB->get_record('message', array('id' => $m1to2));
827 $this->assertNotEquals(0, $deletedmessage->timeuserfromdeleted);
828
829 // Try to delete the same message again.
830 $result = core_message_external::delete_message($m1to2, $user1->id, false);
831 $result = external_api::clean_returnvalue(core_message_external::delete_message_returns(), $result);
832 $this->assertFalse($result['status']);
833
834 // Try to delete a message that does not belong to me.
835 try {
836 $messageid = core_message_external::delete_message($m2to3, $user3->id, false);
837 $this->fail('Exception expected due invalid messageid.');
838 } catch (moodle_exception $e) {
839 $this->assertEquals('You do not have permission to delete this message', $e->errorcode);
840 }
841
842 $this->setUser($user3);
843 // Delete a message not read, as a user to.
844 $result = core_message_external::delete_message($m2to3, $user3->id, false);
845 $result = external_api::clean_returnvalue(core_message_external::delete_message_returns(), $result);
846 $this->assertTrue($result['status']);
847 $this->assertCount(0, $result['warnings']);
848 $deletedmessage = $DB->get_record('message', array('id' => $m2to3));
849 $this->assertNotEquals(0, $deletedmessage->timeusertodeleted);
850
851 // Delete a message read.
852 $message = $DB->get_record('message', array('id' => $m3to2));
853 $messageid = message_mark_message_read($message, time());
854 $result = core_message_external::delete_message($messageid, $user3->id);
855 $result = external_api::clean_returnvalue(core_message_external::delete_message_returns(), $result);
856 $this->assertTrue($result['status']);
857 $this->assertCount(0, $result['warnings']);
858 $deletedmessage = $DB->get_record('message_read', array('id' => $messageid));
859 $this->assertNotEquals(0, $deletedmessage->timeuserfromdeleted);
860
861 // Invalid message ids.
862 try {
863 $result = core_message_external::delete_message(-1, $user1->id);
864 $this->fail('Exception expected due invalid messageid.');
865 } catch (dml_missing_record_exception $e) {
866 $this->assertEquals('invalidrecord', $e->errorcode);
867 }
868
869 // Invalid user.
870 try {
871 $result = core_message_external::delete_message($m1to2, -1, false);
872 $this->fail('Exception expected due invalid user.');
873 } catch (moodle_exception $e) {
874 $this->assertEquals('invaliduser', $e->errorcode);
875 }
876
877 // Not active user.
878 delete_user($user2);
879 try {
880 $result = core_message_external::delete_message($m1to2, $user2->id, false);
881 $this->fail('Exception expected due invalid user.');
882 } catch (moodle_exception $e) {
883 $this->assertEquals('userdeleted', $e->errorcode);
884 }
885
886 // Now, as an admin, try to delete any message.
887 $this->setAdminUser();
888 $result = core_message_external::delete_message($m3to4, $user4->id, false);
889 $result = external_api::clean_returnvalue(core_message_external::delete_message_returns(), $result);
890 $this->assertTrue($result['status']);
891 $this->assertCount(0, $result['warnings']);
892 $deletedmessage = $DB->get_record('message', array('id' => $m3to4));
893 $this->assertNotEquals(0, $deletedmessage->timeusertodeleted);
894
895 }
896
ada7695d 897 public function test_get_popup_notifications_no_user_exception() {
3274d5ca
RW
898 $this->resetAfterTest(true);
899
900 $this->setExpectedException('moodle_exception');
ada7695d 901 $result = core_message_external::get_popup_notifications(-2132131, '', false, false, false, true, false, 0, 0);
3274d5ca
RW
902 }
903
ada7695d 904 public function test_get_popup_notifications_access_denied_exception() {
3274d5ca
RW
905 $this->resetAfterTest(true);
906
907 $sender = $this->getDataGenerator()->create_user();
908 $user = $this->getDataGenerator()->create_user();
909
910 $this->setUser($user);
911 $this->setExpectedException('moodle_exception');
ada7695d 912 $result = core_message_external::get_popup_notifications($sender->id, '', false, false, false, true, false, 0, 0);
3274d5ca
RW
913 }
914
ada7695d 915 public function test_get_popup_notifications_as_recipient() {
3274d5ca
RW
916 $this->resetAfterTest(true);
917
918 $sender = $this->getDataGenerator()->create_user(array('firstname' => 'Sendy', 'lastname' => 'Sender'));
919 $recipient = $this->getDataGenerator()->create_user(array('firstname' => 'Recipy', 'lastname' => 'Recipient'));
920
921 $notificationids = array(
ada7695d
RW
922 $this->send_fake_unread_popup_notification($sender, $recipient),
923 $this->send_fake_unread_popup_notification($sender, $recipient),
924 $this->send_fake_read_popup_notification($sender, $recipient),
925 $this->send_fake_read_popup_notification($sender, $recipient),
3274d5ca
RW
926 );
927
928 // Confirm that admin has super powers to retrieve any notifications.
929 $this->setAdminUser();
ada7695d 930 $result = core_message_external::get_popup_notifications($recipient->id, '', false, false, false, true, false, 0, 0);
3274d5ca
RW
931 $this->assertCount(4, $result['notifications']);
932
933 $this->setUser($recipient);
ada7695d 934 $result = core_message_external::get_popup_notifications($recipient->id, '', false, false, false, true, false, 0, 0);
3274d5ca
RW
935 $this->assertCount(4, $result['notifications']);
936
ada7695d 937 $result = core_message_external::get_popup_notifications($recipient->id, MESSAGE_UNREAD, false, false, true, true, false, 0, 0);
3274d5ca
RW
938 $this->assertCount(2, $result['notifications']);
939 $this->assertObjectHasAttribute('userfromfullname', $result['notifications'][0]);
940 $this->assertObjectNotHasAttribute('usertofullname', $result['notifications'][0]);
941 $this->assertObjectHasAttribute('userfromfullname', $result['notifications'][1]);
942 $this->assertObjectNotHasAttribute('usertofullname', $result['notifications'][1]);
943
ada7695d 944 $result = core_message_external::get_popup_notifications($recipient->id, MESSAGE_UNREAD, false, true, true, true, false, 0, 0);
3274d5ca
RW
945 $this->assertCount(2, $result['notifications']);
946 $this->assertObjectHasAttribute('userfromfullname', $result['notifications'][0]);
947 $this->assertObjectHasAttribute('usertofullname', $result['notifications'][0]);
948 $this->assertObjectHasAttribute('userfromfullname', $result['notifications'][1]);
949 $this->assertObjectHasAttribute('usertofullname', $result['notifications'][1]);
950
ada7695d 951 $result = core_message_external::get_popup_notifications($recipient->id, MESSAGE_UNREAD, false, true, true, true, true, 0, 0);
3274d5ca
RW
952 $this->assertCount(2, $result['notifications']);
953 $this->assertEquals(0, $result['unreadcount']);
954
ada7695d 955 $result = core_message_external::get_popup_notifications($recipient->id, MESSAGE_UNREAD, false, true, true, true, true, 0, 0);
3274d5ca
RW
956 $this->assertCount(0, $result['notifications']);
957
ada7695d 958 $result = core_message_external::get_popup_notifications($recipient->id, MESSAGE_READ, false, true, true, true, true, 0, 0);
3274d5ca
RW
959 $this->assertCount(4, $result['notifications']);
960 }
961
ada7695d 962 public function test_get_popup_notification_limit_offset() {
3274d5ca
RW
963 $this->resetAfterTest(true);
964
965 $sender = $this->getDataGenerator()->create_user(array('firstname' => 'Sendy', 'lastname' => 'Sender'));
966 $recipient = $this->getDataGenerator()->create_user(array('firstname' => 'Recipy', 'lastname' => 'Recipient'));
967
968 $this->setUser($recipient);
969
970 $notificationids = array(
ada7695d
RW
971 $this->send_fake_unread_popup_notification($sender, $recipient, 'Notification 1', 1),
972 $this->send_fake_unread_popup_notification($sender, $recipient, 'Notification 2', 2),
973 $this->send_fake_unread_popup_notification($sender, $recipient, 'Notification 3', 3),
974 $this->send_fake_unread_popup_notification($sender, $recipient, 'Notification 4', 4),
975 $this->send_fake_read_popup_notification($sender, $recipient, 'Notification 5', 5),
976 $this->send_fake_read_popup_notification($sender, $recipient, 'Notification 6', 6),
977 $this->send_fake_read_popup_notification($sender, $recipient, 'Notification 7', 7),
978 $this->send_fake_read_popup_notification($sender, $recipient, 'Notification 8', 8),
3274d5ca
RW
979 );
980
ada7695d 981 $result = core_message_external::get_popup_notifications($recipient->id, '', false, false, false, true, false, 2, 0);
3274d5ca
RW
982
983 $this->assertEquals($result['notifications'][0]->id, $notificationids[7]);
984 $this->assertEquals($result['notifications'][1]->id, $notificationids[6]);
985
ada7695d 986 $result = core_message_external::get_popup_notifications($recipient->id, '', false, false, false, true, false, 2, 2);
3274d5ca
RW
987
988 $this->assertEquals($result['notifications'][0]->id, $notificationids[5]);
989 $this->assertEquals($result['notifications'][1]->id, $notificationids[4]);
990 }
991
992 public function test_mark_all_notifications_as_read_invalid_user_exception() {
993 $this->resetAfterTest(true);
994
995 $this->setExpectedException('moodle_exception');
996 $result = core_message_external::mark_all_notifications_as_read(-2132131, 0);
997 }
998
999 public function test_mark_all_notifications_as_read_access_denied_exception() {
1000 $this->resetAfterTest(true);
1001
1002 $sender = $this->getDataGenerator()->create_user();
1003 $user = $this->getDataGenerator()->create_user();
1004
1005 $this->setUser($user);
1006 $this->setExpectedException('moodle_exception');
1007 $result = core_message_external::mark_all_notifications_as_read($sender->id, 0);
1008 }
1009
1010 public function test_mark_all_notifications_as_read_missing_from_user_exception() {
1011 $this->resetAfterTest(true);
1012
1013 $sender = $this->getDataGenerator()->create_user();
1014
1015 $this->setUser($sender);
1016 $this->setExpectedException('moodle_exception');
1017 $result = core_message_external::mark_all_notifications_as_read($sender->id, 99999);
1018 }
1019
1020 public function test_mark_all_notifications_as_read() {
1021 $this->resetAfterTest(true);
1022
1023 $sender1 = $this->getDataGenerator()->create_user();
1024 $sender2 = $this->getDataGenerator()->create_user();
1025 $sender3 = $this->getDataGenerator()->create_user();
1026 $recipient = $this->getDataGenerator()->create_user();
1027
1028 $this->setUser($recipient);
1029
1030 $notificationids = array(
ada7695d
RW
1031 $this->send_fake_unread_popup_notification($sender1, $recipient, 'Notification', 1),
1032 $this->send_fake_unread_popup_notification($sender1, $recipient, 'Notification', 2),
1033 $this->send_fake_unread_popup_notification($sender2, $recipient, 'Notification', 3),
1034 $this->send_fake_unread_popup_notification($sender2, $recipient, 'Notification', 4),
1035 $this->send_fake_unread_popup_notification($sender3, $recipient, 'Notification', 5),
1036 $this->send_fake_unread_popup_notification($sender3, $recipient, 'Notification', 6),
3274d5ca
RW
1037 );
1038
1039 core_message_external::mark_all_notifications_as_read($recipient->id, $sender1->id);
ada7695d
RW
1040 $readresult = core_message_external::get_popup_notifications($recipient->id, 'read', false, false, false, true, false, 0, 0);
1041 $unreadresult = core_message_external::get_popup_notifications($recipient->id, 'unread', false, false, false, true, false, 0, 0);
3274d5ca
RW
1042
1043 $this->assertCount(2, $readresult['notifications']);
1044 $this->assertCount(4, $unreadresult['notifications']);
1045
1046 core_message_external::mark_all_notifications_as_read($recipient->id, 0);
ada7695d
RW
1047 $readresult = core_message_external::get_popup_notifications($recipient->id, 'read', false, false, false, true, false, 0, 0);
1048 $unreadresult = core_message_external::get_popup_notifications($recipient->id, 'unread', false, false, false, true, false, 0, 0);
3274d5ca
RW
1049
1050 $this->assertCount(6, $readresult['notifications']);
1051 $this->assertCount(0, $unreadresult['notifications']);
1052 }
1053
ada7695d 1054 public function test_get_unread_popup_notification_count_invalid_user_exception() {
3274d5ca
RW
1055 $this->resetAfterTest(true);
1056
1057 $this->setExpectedException('moodle_exception');
ada7695d 1058 $result = core_message_external::get_unread_popup_notification_count(-2132131, 0);
3274d5ca
RW
1059 }
1060
ada7695d 1061 public function test_get_unread_popup_notification_count_access_denied_exception() {
3274d5ca
RW
1062 $this->resetAfterTest(true);
1063
1064 $sender = $this->getDataGenerator()->create_user();
1065 $user = $this->getDataGenerator()->create_user();
1066
1067 $this->setUser($user);
1068 $this->setExpectedException('moodle_exception');
ada7695d 1069 $result = core_message_external::get_unread_popup_notification_count($sender->id, 0);
3274d5ca
RW
1070 }
1071
ada7695d 1072 public function test_get_unread_popup_notification_count() {
3274d5ca
RW
1073 $this->resetAfterTest(true);
1074
1075 $sender1 = $this->getDataGenerator()->create_user();
1076 $sender2 = $this->getDataGenerator()->create_user();
1077 $sender3 = $this->getDataGenerator()->create_user();
1078 $recipient = $this->getDataGenerator()->create_user();
1079
1080 $this->setUser($recipient);
1081
1082 $notificationids = array(
ada7695d
RW
1083 $this->send_fake_unread_popup_notification($sender1, $recipient, 'Notification', 1),
1084 $this->send_fake_unread_popup_notification($sender1, $recipient, 'Notification', 2),
1085 $this->send_fake_unread_popup_notification($sender2, $recipient, 'Notification', 3),
1086 $this->send_fake_unread_popup_notification($sender2, $recipient, 'Notification', 4),
1087 $this->send_fake_unread_popup_notification($sender3, $recipient, 'Notification', 5),
1088 $this->send_fake_unread_popup_notification($sender3, $recipient, 'Notification', 6),
3274d5ca
RW
1089 );
1090
ada7695d 1091 $count = core_message_external::get_unread_popup_notification_count($recipient->id);
3274d5ca
RW
1092 $this->assertEquals($count, 6);
1093 }
d6731600 1094}