2 // This file is part of Moodle - http://moodle.org/
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.
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.
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/>.
18 * Unit tests for Web service events.
22 * @copyright 2013 Frédéric Massart
23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
26 defined('MOODLE_INTERNAL') || die();
29 * Unit tests for Web service events.
33 * @copyright 2013 Frédéric Massart
34 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
36 class webservice_events_testcase extends advanced_testcase {
38 public function setUp() {
39 $this->resetAfterTest();
42 public function test_function_called() {
43 // The Web service API doesn't allow the testing of the events directly by
44 // calling some functions which trigger the events, so what we are going here
45 // is just checking that the event returns the expected information.
47 $sink = $this->redirectEvents();
49 $fakelogdata = array(1, 'B', true, null);
52 'function' => 'A function'
55 $event = \core\event\webservice_function_called::create($params);
56 $event->set_legacy_logdata($fakelogdata);
59 $events = $sink->get_events();
60 $this->assertCount(1, $events);
61 $event = reset($events);
63 $this->assertEquals(context_system::instance(), $event->get_context());
64 $this->assertEquals('A function', $event->other['function']);
65 $this->assertEventLegacyLogData($fakelogdata, $event);
68 public function test_login_failed() {
69 // The Web service API doesn't allow the testing of the events directly by
70 // calling some functions which trigger the events, so what we are going here
71 // is just checking that the event returns the expected information.
73 $sink = $this->redirectEvents();
75 $fakelogdata = array(1, 'B', true, null);
78 'reason' => 'Unit Test',
79 'method' => 'Some method',
80 'token' => 'A fake token'
83 $event = \core\event\webservice_login_failed::create($params);
84 $event->set_legacy_logdata($fakelogdata);
87 $events = $sink->get_events();
88 $this->assertCount(1, $events);
89 $event = reset($events);
91 $this->assertEquals(context_system::instance(), $event->get_context());
92 $this->assertEquals($params['other']['reason'], $event->other['reason']);
93 $this->assertEquals($params['other']['method'], $event->other['method']);
94 $this->assertEquals($params['other']['token'], $event->other['token']);
95 $this->assertEventLegacyLogData($fakelogdata, $event);
98 public function test_service_created() {
101 // The Web service API doesn't allow the testing of the events directly by
102 // calling some functions which trigger the events, so what we are going here
103 // is just checking that the event returns the expected information.
105 $sink = $this->redirectEvents();
107 // Creating a fake service.
108 $service = (object) array(
111 'requiredcapability' => '',
112 'restrictedusers' => 0,
114 'timecreated' => time(),
115 'timemodified' => time(),
117 'downloadfiles' => 0,
120 $service->id = $DB->insert_record('external_services', $service);
122 // Trigger the event.
124 'objectid' => $service->id,
126 $event = \core\event\webservice_service_created::create($params);
127 $event->add_record_snapshot('external_services', $service);
130 $events = $sink->get_events();
131 $this->assertCount(1, $events);
132 $event = reset($events);
134 // Assert that the event contains the right information.
135 $this->assertEquals(context_system::instance(), $event->get_context());
136 $this->assertEquals($service->id, $event->objectid);
137 $returnurl = $CFG->wwwroot . "/" . $CFG->admin . "/settings.php?section=externalservices";
138 $expected = array(SITEID, 'webservice', 'add', $returnurl, get_string('addservice', 'webservice', $service));
139 $this->assertEventLegacyLogData($expected, $event);
142 public function test_service_updated() {
145 // The Web service API doesn't allow the testing of the events directly by
146 // calling some functions which trigger the events, so what we are going here
147 // is just checking that the event returns the expected information.
149 $sink = $this->redirectEvents();
151 // Creating a fake service.
152 $service = (object) array(
155 'requiredcapability' => '',
156 'restrictedusers' => 0,
158 'timecreated' => time(),
159 'timemodified' => time(),
161 'downloadfiles' => 0,
164 $service->id = $DB->insert_record('external_services', $service);
166 // Trigger the event.
168 'objectid' => $service->id,
170 $event = \core\event\webservice_service_updated::create($params);
171 $event->add_record_snapshot('external_services', $service);
174 $events = $sink->get_events();
175 $this->assertCount(1, $events);
176 $event = reset($events);
178 // Assert that the event contains the right information.
179 $this->assertEquals(context_system::instance(), $event->get_context());
180 $this->assertEquals($service->id, $event->objectid);
181 $returnurl = $CFG->wwwroot . "/" . $CFG->admin . "/settings.php?section=externalservices";
182 $expected = array(SITEID, 'webservice', 'edit', $returnurl, get_string('editservice', 'webservice', $service));
183 $this->assertEventLegacyLogData($expected, $event);
186 public function test_service_deleted() {
189 // The Web service API doesn't allow the testing of the events directly by
190 // calling some functions which trigger the events, so what we are going here
191 // is just checking that the event returns the expected information.
193 $sink = $this->redirectEvents();
195 // Creating a fake service.
196 $service = (object) array(
199 'requiredcapability' => '',
200 'restrictedusers' => 0,
202 'timecreated' => time(),
203 'timemodified' => time(),
205 'downloadfiles' => 0,
208 $service->id = $DB->insert_record('external_services', $service);
210 // Trigger the event.
212 'objectid' => $service->id,
214 $event = \core\event\webservice_service_deleted::create($params);
215 $event->add_record_snapshot('external_services', $service);
218 $events = $sink->get_events();
219 $this->assertCount(1, $events);
220 $event = reset($events);
222 // Assert that the event contains the right information.
223 $this->assertEquals(context_system::instance(), $event->get_context());
224 $this->assertEquals($service->id, $event->objectid);
225 $returnurl = $CFG->wwwroot . "/" . $CFG->admin . "/settings.php?section=externalservices";
226 $expected = array(SITEID, 'webservice', 'delete', $returnurl, get_string('deleteservice', 'webservice', $service));
227 $this->assertEventLegacyLogData($expected, $event);
230 public function test_service_user_added() {
233 // The Web service API doesn't allow the testing of the events directly by
234 // calling some functions which trigger the events, so what we are going here
235 // is just checking that the event returns the expected information.
237 $sink = $this->redirectEvents();
243 $event = \core\event\webservice_service_user_added::create($params);
246 $events = $sink->get_events();
247 $this->assertCount(1, $events);
248 $event = reset($events);
250 $this->assertEquals(context_system::instance(), $event->get_context());
251 $this->assertEquals(1, $event->objectid);
252 $this->assertEquals(2, $event->relateduserid);
253 $expected = array(SITEID, 'core', 'assign', $CFG->admin . '/webservice/service_users.php?id=' . $params['objectid'],
254 'add', '', $params['relateduserid']);
255 $this->assertEventLegacyLogData($expected, $event);
258 public function test_service_user_removed() {
261 // The Web service API doesn't allow the testing of the events directly by
262 // calling some functions which trigger the events, so what we are going here
263 // is just checking that the event returns the expected information.
265 $sink = $this->redirectEvents();
271 $event = \core\event\webservice_service_user_removed::create($params);
274 $events = $sink->get_events();
275 $this->assertCount(1, $events);
276 $event = reset($events);
278 $this->assertEquals(context_system::instance(), $event->get_context());
279 $this->assertEquals(1, $event->objectid);
280 $this->assertEquals(2, $event->relateduserid);
281 $expected = array(SITEID, 'core', 'assign', $CFG->admin . '/webservice/service_users.php?id=' . $params['objectid'],
282 'remove', '', $params['relateduserid']);
283 $this->assertEventLegacyLogData($expected, $event);
286 public function test_token_created() {
287 // The Web service API doesn't allow the testing of the events directly by
288 // calling some functions which trigger the events, so what we are going here
289 // is just checking that the event returns the expected information.
291 $sink = $this->redirectEvents();
295 'relateduserid' => 2,
300 $event = \core\event\webservice_token_created::create($params);
303 $events = $sink->get_events();
304 $this->assertCount(1, $events);
305 $event = reset($events);
307 $this->assertEquals(context_system::instance(), $event->get_context());
308 $this->assertEquals(1, $event->objectid);
309 $this->assertEquals(2, $event->relateduserid);
310 $expected = array(SITEID, 'webservice', 'automatically create user token', '' , 'User ID: ' . 2);
311 $this->assertEventLegacyLogData($expected, $event);
314 public function test_token_sent() {
315 $user = $this->getDataGenerator()->create_user();
316 $this->setUser($user);
318 // The Web service API doesn't allow the testing of the events directly by
319 // calling some functions which trigger the events, so what we are going here
320 // is just checking that the event returns the expected information.
322 $sink = $this->redirectEvents();
330 $event = \core\event\webservice_token_sent::create($params);
333 $events = $sink->get_events();
334 $this->assertCount(1, $events);
335 $event = reset($events);
337 $this->assertEquals(context_system::instance(), $event->get_context());
338 $this->assertEquals(1, $event->objectid);
339 $expected = array(SITEID, 'webservice', 'sending requested user token', '' , 'User ID: ' . $user->id);
340 $this->assertEventLegacyLogData($expected, $event);