MDL-54708 message: notification popover respects message preferences
[moodle.git] / message / tests / events_test.php
CommitLineData
0d9bdf61
MN
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 * Events tests.
19 *
20 * @package core_message
21 * @category test
22 * @copyright 2014 Mark Nelson <markn@moodle.com>
23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24 */
25
26defined('MOODLE_INTERNAL') || die();
27
28class core_message_events_testcase extends advanced_testcase {
29
30 /**
31 * Test set up.
32 *
33 * This is executed before running any test in this file.
34 */
35 public function setUp() {
36 $this->resetAfterTest();
37 }
38
39 /**
40 * Test the message contact added event.
41 */
42 public function test_message_contact_added() {
43 // Set this user as the admin.
44 $this->setAdminUser();
45
46 // Create a user to add to the admin's contact list.
47 $user = $this->getDataGenerator()->create_user();
48
49 // Trigger and capture the event when adding a contact.
50 $sink = $this->redirectEvents();
51 message_add_contact($user->id);
52 $events = $sink->get_events();
53 $event = reset($events);
54
55 // Check that the event data is valid.
56 $this->assertInstanceOf('\core\event\message_contact_added', $event);
57 $this->assertEquals(context_user::instance(2), $event->get_context());
58 $expected = array(SITEID, 'message', 'add contact', 'index.php?user1=' . $user->id .
59 '&amp;user2=2', $user->id);
60 $this->assertEventLegacyLogData($expected, $event);
b63f7732
AA
61 $url = new moodle_url('/message/index.php', array('user1' => $event->userid, 'user2' => $event->relateduserid));
62 $this->assertEquals($url, $event->get_url());
0d9bdf61 63 }
5edf9f3b
MN
64
65 /**
66 * Test the message contact removed event.
67 */
68 public function test_message_contact_removed() {
69 // Set this user as the admin.
70 $this->setAdminUser();
71
72 // Create a user to add to the admin's contact list.
73 $user = $this->getDataGenerator()->create_user();
74
75 // Add the user to the admin's contact list.
76 message_add_contact($user->id);
77
78 // Trigger and capture the event when adding a contact.
79 $sink = $this->redirectEvents();
80 message_remove_contact($user->id);
81 $events = $sink->get_events();
82 $event = reset($events);
83
84 // Check that the event data is valid.
85 $this->assertInstanceOf('\core\event\message_contact_removed', $event);
86 $this->assertEquals(context_user::instance(2), $event->get_context());
87 $expected = array(SITEID, 'message', 'remove contact', 'index.php?user1=' . $user->id .
88 '&amp;user2=2', $user->id);
89 $this->assertEventLegacyLogData($expected, $event);
b63f7732
AA
90 $url = new moodle_url('/message/index.php', array('user1' => $event->userid, 'user2' => $event->relateduserid));
91 $this->assertEquals($url, $event->get_url());
5edf9f3b 92 }
3f3d9521
MN
93
94 /**
95 * Test the message contact blocked event.
96 */
97 public function test_message_contact_blocked() {
98 // Set this user as the admin.
99 $this->setAdminUser();
100
101 // Create a user to add to the admin's contact list.
102 $user = $this->getDataGenerator()->create_user();
2236a565 103 $user2 = $this->getDataGenerator()->create_user();
3f3d9521
MN
104
105 // Add the user to the admin's contact list.
106 message_add_contact($user->id);
107
108 // Trigger and capture the event when blocking a contact.
109 $sink = $this->redirectEvents();
110 message_block_contact($user->id);
111 $events = $sink->get_events();
112 $event = reset($events);
113
114 // Check that the event data is valid.
115 $this->assertInstanceOf('\core\event\message_contact_blocked', $event);
116 $this->assertEquals(context_user::instance(2), $event->get_context());
117 $expected = array(SITEID, 'message', 'block contact', 'index.php?user1=' . $user->id . '&amp;user2=2', $user->id);
118 $this->assertEventLegacyLogData($expected, $event);
b63f7732
AA
119 $url = new moodle_url('/message/index.php', array('user1' => $event->userid, 'user2' => $event->relateduserid));
120 $this->assertEquals($url, $event->get_url());
2236a565 121
e8c5a98b
JP
122 // Make sure that the contact blocked event is not triggered again.
123 $sink->clear();
124 message_block_contact($user->id);
125 $events = $sink->get_events();
126 $event = reset($events);
127 $this->assertEmpty($event);
128 // Make sure that we still have 1 blocked user.
129 $this->assertEquals(1, message_count_blocked_users());
130
2236a565
FM
131 // Now blocking a user that is not a contact.
132 $sink->clear();
133 message_block_contact($user2->id);
134 $events = $sink->get_events();
135 $event = reset($events);
136
137 // Check that the event data is valid.
138 $this->assertInstanceOf('\core\event\message_contact_blocked', $event);
139 $this->assertEquals(context_user::instance(2), $event->get_context());
140 $expected = array(SITEID, 'message', 'block contact', 'index.php?user1=' . $user2->id . '&amp;user2=2', $user2->id);
141 $this->assertEventLegacyLogData($expected, $event);
142 $url = new moodle_url('/message/index.php', array('user1' => $event->userid, 'user2' => $event->relateduserid));
143 $this->assertEquals($url, $event->get_url());
3f3d9521 144 }
cd609365
MN
145
146 /**
147 * Test the message contact unblocked event.
148 */
149 public function test_message_contact_unblocked() {
150 // Set this user as the admin.
151 $this->setAdminUser();
152
153 // Create a user to add to the admin's contact list.
154 $user = $this->getDataGenerator()->create_user();
155
156 // Add the user to the admin's contact list.
157 message_add_contact($user->id);
158
e8c5a98b
JP
159 // Block the user.
160 message_block_contact($user->id);
161 // Make sure that we have 1 blocked user.
162 $this->assertEquals(1, message_count_blocked_users());
163
cd609365
MN
164 // Trigger and capture the event when unblocking a contact.
165 $sink = $this->redirectEvents();
166 message_unblock_contact($user->id);
167 $events = $sink->get_events();
168 $event = reset($events);
169
170 // Check that the event data is valid.
171 $this->assertInstanceOf('\core\event\message_contact_unblocked', $event);
172 $this->assertEquals(context_user::instance(2), $event->get_context());
173 $expected = array(SITEID, 'message', 'unblock contact', 'index.php?user1=' . $user->id . '&amp;user2=2', $user->id);
174 $this->assertEventLegacyLogData($expected, $event);
b63f7732
AA
175 $url = new moodle_url('/message/index.php', array('user1' => $event->userid, 'user2' => $event->relateduserid));
176 $this->assertEquals($url, $event->get_url());
e8c5a98b
JP
177
178 // Make sure that we have no blocked users.
179 $this->assertEmpty(message_count_blocked_users());
180
181 // Make sure that the contact unblocked event is not triggered again.
182 $sink->clear();
183 message_unblock_contact($user->id);
184 $events = $sink->get_events();
185 $event = reset($events);
186 $this->assertEmpty($event);
187
188 // Make sure that we still have no blocked users.
189 $this->assertEmpty(message_count_blocked_users());
cd609365 190 }
ab1bc5d2
MN
191
192 /**
193 * Test the message sent event.
194 *
195 * We can not use the message_send() function in the unit test to check that the event was fired as there is a
196 * conditional check to ensure a fake message is sent during unit tests when calling that particular function.
197 */
198 public function test_message_sent() {
199 $event = \core\event\message_sent::create(array(
200 'userid' => 1,
201 'context' => context_system::instance(),
202 'relateduserid' => 2,
203 'other' => array(
204 'messageid' => 3
205 )
206 ));
207
208 // Trigger and capturing the event.
209 $sink = $this->redirectEvents();
210 $event->trigger();
211 $events = $sink->get_events();
212 $event = reset($events);
213
214 // Check that the event data is valid.
215 $this->assertInstanceOf('\core\event\message_sent', $event);
216 $this->assertEquals(context_system::instance(), $event->get_context());
217 $expected = array(SITEID, 'message', 'write', 'index.php?user=1&id=2&history=1#m3', 1);
218 $this->assertEventLegacyLogData($expected, $event);
b63f7732
AA
219 $url = new moodle_url('/message/index.php', array('user1' => $event->userid, 'user2' => $event->relateduserid));
220 $this->assertEquals($url, $event->get_url());
ab1bc5d2 221 }
5b091909
MN
222
223 /**
f3d98189 224 * Test the message viewed event.
5b091909 225 */
f3d98189 226 public function test_message_viewed() {
5b091909
MN
227 global $DB;
228
229 // Create a message to mark as read.
230 $message = new stdClass();
231 $message->useridfrom = '1';
232 $message->useridto = '2';
233 $message->subject = 'Subject';
234 $message->message = 'Message';
235 $message->id = $DB->insert_record('message', $message);
236
237 // Trigger and capture the event.
238 $sink = $this->redirectEvents();
239 message_mark_message_read($message, time());
240 $events = $sink->get_events();
241 $event = reset($events);
242
243 // Check that the event data is valid.
f3d98189 244 $this->assertInstanceOf('\core\event\message_viewed', $event);
5b091909 245 $this->assertEquals(context_user::instance(2), $event->get_context());
b63f7732
AA
246 $url = new moodle_url('/message/index.php', array('user1' => $event->userid, 'user2' => $event->relateduserid));
247 $this->assertEquals($url, $event->get_url());
5b091909 248 }
6fff51d6
MN
249
250 /**
251 * Test the message deleted event.
252 */
253 public function test_message_deleted() {
254 global $DB;
255
256 // Create a message.
257 $message = new stdClass();
258 $message->useridfrom = '1';
259 $message->useridto = '2';
260 $message->subject = 'Subject';
261 $message->message = 'Message';
262 $message->timeuserfromdeleted = 0;
263 $message->timeusertodeleted = 0;
264 $message->id = $DB->insert_record('message', $message);
265
266 // Trigger and capture the event.
267 $sink = $this->redirectEvents();
268 message_delete_message($message, $message->useridfrom);
269 $events = $sink->get_events();
270 $event = reset($events);
271
272 // Check that the event data is valid.
273 $this->assertInstanceOf('\core\event\message_deleted', $event);
274 $this->assertEquals($message->useridfrom, $event->userid); // The user who deleted it.
275 $this->assertEquals($message->useridto, $event->relateduserid);
276 $this->assertEquals('message', $event->other['messagetable']);
277 $this->assertEquals($message->id, $event->other['messageid']);
278 $this->assertEquals($message->useridfrom, $event->other['useridfrom']);
279 $this->assertEquals($message->useridto, $event->other['useridto']);
280
281 // Create a read message.
282 $message = new stdClass();
283 $message->useridfrom = '2';
284 $message->useridto = '1';
285 $message->subject = 'Subject';
286 $message->message = 'Message';
287 $message->timeuserfromdeleted = 0;
288 $message->timeusertodeleted = 0;
289 $message->timeread = time();
290 $message->id = $DB->insert_record('message_read', $message);
291
292 // Trigger and capture the event.
293 $sink = $this->redirectEvents();
294 message_delete_message($message, $message->useridto);
295 $events = $sink->get_events();
296 $event = reset($events);
297
298 // Check that the event data is valid.
299 $this->assertInstanceOf('\core\event\message_deleted', $event);
300 $this->assertEquals($message->useridto, $event->userid);
301 $this->assertEquals($message->useridfrom, $event->relateduserid);
302 $this->assertEquals('message_read', $event->other['messagetable']);
303 $this->assertEquals($message->id, $event->other['messageid']);
304 $this->assertEquals($message->useridfrom, $event->other['useridfrom']);
305 $this->assertEquals($message->useridto, $event->other['useridto']);
306 }
0d9bdf61 307}