[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
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 * This file contains tests for scorm events. 19 * 20 * @package mod_scorm 21 * @copyright 2013 onwards Ankit Agarwal 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 global $CFG; 26 require_once($CFG->dirroot . '/mod/scorm/locallib.php'); 27 require_once($CFG->dirroot . '/mod/scorm/lib.php'); 28 29 /** 30 * Test class for various events related to Scorm. 31 * 32 * @package mod_scorm 33 * @copyright 2013 onwards Ankit Agarwal 34 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 35 */ 36 class mod_scorm_event_testcase extends advanced_testcase { 37 38 /** @var stdClass store course object */ 39 protected $eventcourse; 40 41 /** @var stdClass store user object */ 42 protected $eventuser; 43 44 /** @var stdClass store scorm object */ 45 protected $eventscorm; 46 47 /** @var stdClass store course module object */ 48 protected $eventcm; 49 50 protected function setUp() { 51 $this->setAdminUser(); 52 $this->eventcourse = $this->getDataGenerator()->create_course(); 53 $this->eventuser = $this->getDataGenerator()->create_user(); 54 $record = new stdClass(); 55 $record->course = $this->eventcourse->id; 56 $this->eventscorm = $this->getDataGenerator()->create_module('scorm', $record); 57 $this->eventcm = get_coursemodule_from_instance('scorm', $this->eventscorm->id); 58 } 59 60 /** Tests for attempt deleted event */ 61 public function test_attempt_deleted_event() { 62 63 global $USER; 64 65 $this->resetAfterTest(); 66 scorm_insert_track(2, $this->eventscorm->id, 1, 4, 'cmi.core.score.raw', 10); 67 $sink = $this->redirectEvents(); 68 scorm_delete_attempt(2, $this->eventscorm, 4); 69 $events = $sink->get_events(); 70 $sink->close(); 71 $event = reset($events); 72 73 // Verify data. 74 $this->assertCount(3, $events); 75 $this->assertInstanceOf('\mod_scorm\event\attempt_deleted', $event); 76 $this->assertEquals($USER->id, $event->userid); 77 $this->assertEquals(context_module::instance($this->eventcm->id), $event->get_context()); 78 $this->assertEquals(4, $event->other['attemptid']); 79 $this->assertEquals(2, $event->relateduserid); 80 $expected = array($this->eventcourse->id, 'scorm', 'delete attempts', 'report.php?id=' . $this->eventcm->id, 81 4, $this->eventcm->id); 82 $this->assertEventLegacyLogData($expected, $events[0]); 83 $this->assertEventContextNotUsed($event); 84 85 // Test event validations. 86 $this->setExpectedException('coding_exception'); 87 \mod_scorm\event\attempt_deleted::create(array( 88 'contextid' => 5, 89 'relateduserid' => 2 90 )); 91 $this->fail('event \\mod_scorm\\event\\attempt_deleted is not validating events properly'); 92 } 93 94 /** 95 * Tests for course module viewed event. 96 * 97 * There is no api involved so the best we can do is test legacy data by triggering event manually. 98 */ 99 public function test_course_module_viewed_event() { 100 $this->resetAfterTest(); 101 $event = \mod_scorm\event\course_module_viewed::create(array( 102 'objectid' => $this->eventscorm->id, 103 'context' => context_module::instance($this->eventcm->id), 104 'courseid' => $this->eventcourse->id 105 )); 106 107 // Trigger and capture the event. 108 $sink = $this->redirectEvents(); 109 $event->trigger(); 110 $events = $sink->get_events(); 111 $event = reset($events); 112 113 // Check that the legacy log data is valid. 114 $expected = array($this->eventcourse->id, 'scorm', 'pre-view', 'view.php?id=' . $this->eventcm->id, 115 $this->eventscorm->id, $this->eventcm->id); 116 $this->assertEventLegacyLogData($expected, $event); 117 $this->assertEventContextNotUsed($event); 118 } 119 120 /** 121 * Tests for instance list viewed event. 122 * 123 * There is no api involved so the best we can do is test legacy data by triggering event manually. 124 */ 125 public function test_course_module_instance_list_viewed_event() { 126 $this->resetAfterTest(); 127 $event = \mod_scorm\event\course_module_instance_list_viewed::create(array( 128 'context' => context_course::instance($this->eventcourse->id), 129 'courseid' => $this->eventcourse->id 130 )); 131 132 // Trigger and capture the event. 133 $sink = $this->redirectEvents(); 134 $event->trigger(); 135 $events = $sink->get_events(); 136 $event = reset($events); 137 138 // Check that the legacy log data is valid. 139 $expected = array($this->eventcourse->id, 'scorm', 'view all', 'index.php?id=' . $this->eventcourse->id, ''); 140 $this->assertEventLegacyLogData($expected, $event); 141 $this->assertEventContextNotUsed($event); 142 } 143 144 /** 145 * Tests for interactions viewed. 146 * 147 * There is no api involved so the best we can do is test legacy data by triggering event manually and test validations. 148 */ 149 public function test_interactions_viewed_event() { 150 $this->resetAfterTest(); 151 $event = \mod_scorm\event\interactions_viewed::create(array( 152 'relateduserid' => 5, 153 'context' => context_module::instance($this->eventcm->id), 154 'courseid' => $this->eventcourse->id, 155 'other' => array('attemptid' => 2, 'instanceid' => $this->eventscorm->id) 156 )); 157 158 // Trigger and capture the event. 159 $sink = $this->redirectEvents(); 160 $event->trigger(); 161 $events = $sink->get_events(); 162 $event = reset($events); 163 164 // Check that the legacy log data is valid. 165 $expected = array($this->eventcourse->id, 'scorm', 'userreportinteractions', 'report/userreportinteractions.php?id=' . 166 $this->eventcm->id . '&user=5&attempt=' . 2, $this->eventscorm->id, $this->eventcm->id); 167 $this->assertEventLegacyLogData($expected, $event); 168 $this->assertEventContextNotUsed($event); 169 } 170 171 /** 172 * Tests for interactions viewed validations. 173 */ 174 public function test_interactions_viewed_event_validations() { 175 $this->resetAfterTest(); 176 try { 177 \mod_scorm\event\interactions_viewed::create(array( 178 'context' => context_module::instance($this->eventcm->id), 179 'courseid' => $this->eventcourse->id, 180 'other' => array('attemptid' => 2) 181 )); 182 $this->fail("Event validation should not allow \\mod_scorm\\event\\interactions_viewed to be triggered without 183 other['instanceid']"); 184 } catch (Exception $e) { 185 $this->assertInstanceOf('coding_exception', $e); 186 } 187 try { 188 \mod_scorm\event\interactions_viewed::create(array( 189 'context' => context_module::instance($this->eventcm->id), 190 'courseid' => $this->eventcourse->id, 191 'other' => array('instanceid' => 2) 192 )); 193 $this->fail("Event validation should not allow \\mod_scorm\\event\\interactions_viewed to be triggered without 194 other['attemptid']"); 195 } catch (Exception $e) { 196 $this->assertInstanceOf('coding_exception', $e); 197 } 198 } 199 200 /** Tests for report viewed. 201 * 202 * There is no api involved so the best we can do is test legacy data and validations by triggering event manually. 203 */ 204 public function test_report_viewed_event() { 205 $this->resetAfterTest(); 206 $event = \mod_scorm\event\report_viewed::create(array( 207 'context' => context_module::instance($this->eventcm->id), 208 'courseid' => $this->eventcourse->id, 209 'other' => array( 210 'scormid' => $this->eventscorm->id, 211 'mode' => 'basic' 212 ) 213 )); 214 215 // Trigger and capture the event. 216 $sink = $this->redirectEvents(); 217 $event->trigger(); 218 $events = $sink->get_events(); 219 $event = reset($events); 220 221 // Check that the legacy log data is valid. 222 $expected = array($this->eventcourse->id, 'scorm', 'report', 'report.php?id=' . $this->eventcm->id . '&mode=basic', 223 $this->eventscorm->id, $this->eventcm->id); 224 $this->assertEventLegacyLogData($expected, $event); 225 $this->assertEventContextNotUsed($event); 226 } 227 228 /** Tests for sco launched event. 229 * 230 * There is no api involved so the best we can do is test legacy data and validations by triggering event manually. 231 */ 232 public function test_sco_launched_event() { 233 $this->resetAfterTest(); 234 $event = \mod_scorm\event\sco_launched::create(array( 235 'objectid' => 2, 236 'context' => context_module::instance($this->eventcm->id), 237 'courseid' => $this->eventcourse->id, 238 'other' => array('loadedcontent' => 'url_to_content_that_was_laoded.php') 239 )); 240 241 // Trigger and capture the event. 242 $sink = $this->redirectEvents(); 243 $event->trigger(); 244 $events = $sink->get_events(); 245 $event = reset($events); 246 247 // Check that the legacy log data is valid. 248 $expected = array($this->eventcourse->id, 'scorm', 'launch', 'view.php?id=' . $this->eventcm->id, 249 'url_to_content_that_was_laoded.php', $this->eventcm->id); 250 $this->assertEventLegacyLogData($expected, $event); 251 $this->assertEventContextNotUsed($event); 252 253 // Test validations. 254 $this->setExpectedException('coding_exception'); 255 \mod_scorm\event\sco_launched::create(array( 256 'objectid' => $this->eventscorm->id, 257 'context' => context_module::instance($this->eventcm->id), 258 'courseid' => $this->eventcourse->id, 259 )); 260 $this->fail('Event \\mod_scorm\\event\\sco_launched is not validating "loadedcontent" properly'); 261 } 262 263 /** 264 * Tests for tracks viewed event. 265 * 266 * There is no api involved so the best we can do is test validations by triggering event manually. 267 */ 268 public function test_tracks_viewed_event() { 269 $this->resetAfterTest(); 270 $event = \mod_scorm\event\tracks_viewed::create(array( 271 'relateduserid' => 5, 272 'context' => context_module::instance($this->eventcm->id), 273 'courseid' => $this->eventcourse->id, 274 'other' => array('attemptid' => 2, 'instanceid' => $this->eventscorm->id, 'scoid' => 3) 275 )); 276 277 // Trigger and capture the event. 278 $sink = $this->redirectEvents(); 279 $event->trigger(); 280 $events = $sink->get_events(); 281 $event = reset($events); 282 283 // Check that the legacy log data is valid. 284 $expected = array($this->eventcourse->id, 'scorm', 'userreporttracks', 'report/userreporttracks.php?id=' . 285 $this->eventcm->id . '&user=5&attempt=' . 2 . '&scoid=3', $this->eventscorm->id, $this->eventcm->id); 286 $this->assertEventLegacyLogData($expected, $event); 287 $this->assertEventContextNotUsed($event); 288 } 289 290 /** 291 * Tests for tracks viewed event validations. 292 */ 293 public function test_tracks_viewed_event_validations() { 294 $this->resetAfterTest(); 295 try { 296 \mod_scorm\event\tracks_viewed::create(array( 297 'context' => context_module::instance($this->eventcm->id), 298 'courseid' => $this->eventcourse->id, 299 'other' => array('attemptid' => 2, 'scoid' => 2) 300 )); 301 $this->fail("Event validation should not allow \\mod_scorm\\event\\tracks_viewed to be triggered without 302 other['instanceid']"); 303 } catch (Exception $e) { 304 $this->assertInstanceOf('coding_exception', $e); 305 } 306 try { 307 \mod_scorm\event\tracks_viewed::create(array( 308 'context' => context_module::instance($this->eventcm->id), 309 'courseid' => $this->eventcourse->id, 310 'other' => array('instanceid' => 2, 'scoid' => 2) 311 )); 312 $this->fail("Event validation should not allow \\mod_scorm\\event\\tracks_viewed to be triggered without 313 other['attemptid']"); 314 } catch (Exception $e) { 315 $this->assertInstanceOf('coding_exception', $e); 316 } 317 318 try { 319 \mod_scorm\event\tracks_viewed::create(array( 320 'context' => context_module::instance($this->eventcm->id), 321 'courseid' => $this->eventcourse->id, 322 'other' => array('attemptid' => 2, 'instanceid' => 2) 323 )); 324 $this->fail("Event validation should not allow \\mod_scorm\\event\\tracks_viewed to be triggered without 325 other['scoid']"); 326 } catch (Exception $e) { 327 $this->assertInstanceOf('coding_exception', $e); 328 } 329 } 330 331 /** 332 * Tests for userreport viewed event. 333 * 334 * There is no api involved so the best we can do is test validations and legacy log by triggering event manually. 335 */ 336 public function test_user_report_viewed_event() { 337 $this->resetAfterTest(); 338 $event = \mod_scorm\event\user_report_viewed::create(array( 339 'relateduserid' => 5, 340 'context' => context_module::instance($this->eventcm->id), 341 'courseid' => $this->eventcourse->id, 342 'other' => array('attemptid' => 2, 'instanceid' => $this->eventscorm->id) 343 )); 344 345 // Trigger and capture the event. 346 $sink = $this->redirectEvents(); 347 $event->trigger(); 348 $events = $sink->get_events(); 349 $event = reset($events); 350 351 // Check that the legacy log data is valid. 352 $expected = array($this->eventcourse->id, 'scorm', 'userreport', 'report/userreport.php?id=' . 353 $this->eventcm->id . '&user=5&attempt=' . 2, $this->eventscorm->id, $this->eventcm->id); 354 $this->assertEventLegacyLogData($expected, $event); 355 $this->assertEventContextNotUsed($event); 356 } 357 358 /** 359 * Tests for userreport viewed event validations. 360 */ 361 public function test_user_report_viewed_event_validations() { 362 $this->resetAfterTest(); 363 try { 364 \mod_scorm\event\user_report_viewed::create(array( 365 'context' => context_module::instance($this->eventcm->id), 366 'courseid' => $this->eventcourse->id, 367 'other' => array('attemptid' => 2) 368 )); 369 $this->fail("Event validation should not allow \\mod_scorm\\event\\user_report_viewed to be triggered without 370 other['instanceid']"); 371 } catch (Exception $e) { 372 $this->assertInstanceOf('coding_exception', $e); 373 } 374 try { 375 \mod_scorm\event\user_report_viewed::create(array( 376 'context' => context_module::instance($this->eventcm->id), 377 'courseid' => $this->eventcourse->id, 378 'other' => array('instanceid' => 2) 379 )); 380 $this->fail("Event validation should not allow \\mod_scorm\\event\\user_report_viewed to be triggered without 381 other['attemptid']"); 382 } catch (Exception $e) { 383 $this->assertInstanceOf('coding_exception', $e); 384 } 385 } 386 } 387
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |