[ Index ] |
PHP Cross Reference of Unnamed Project |
[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 * Unit tests for lib.php 19 * 20 * @package mod_data 21 * @category phpunit 22 * @copyright 2013 Adrian Greeve 23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 24 */ 25 26 defined('MOODLE_INTERNAL') || die(); 27 28 global $CFG; 29 require_once($CFG->dirroot . '/mod/data/lib.php'); 30 31 /** 32 * Unit tests for lib.php 33 * 34 * @package mod_data 35 * @copyright 2013 Adrian Greeve 36 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 37 */ 38 class mod_data_lib_testcase extends advanced_testcase { 39 40 public function test_data_delete_record() { 41 global $DB; 42 43 $this->resetAfterTest(); 44 45 // Create a record for deleting. 46 $this->setAdminUser(); 47 $course = $this->getDataGenerator()->create_course(); 48 $record = new stdClass(); 49 $record->course = $course->id; 50 $record->name = "Mod data delete test"; 51 $record->intro = "Some intro of some sort"; 52 53 $module = $this->getDataGenerator()->create_module('data', $record); 54 55 $field = data_get_field_new('text', $module); 56 57 $fielddetail = new stdClass(); 58 $fielddetail->d = $module->id; 59 $fielddetail->mode = 'add'; 60 $fielddetail->type = 'text'; 61 $fielddetail->sesskey = sesskey(); 62 $fielddetail->name = 'Name'; 63 $fielddetail->description = 'Some name'; 64 65 $field->define_field($fielddetail); 66 $field->insert_field(); 67 $recordid = data_add_record($module); 68 69 $datacontent = array(); 70 $datacontent['fieldid'] = $field->field->id; 71 $datacontent['recordid'] = $recordid; 72 $datacontent['content'] = 'Asterix'; 73 74 $contentid = $DB->insert_record('data_content', $datacontent); 75 $cm = get_coursemodule_from_instance('data', $module->id, $course->id); 76 77 // Check to make sure that we have a database record. 78 $data = $DB->get_records('data', array('id' => $module->id)); 79 $this->assertEquals(1, count($data)); 80 81 $datacontent = $DB->get_records('data_content', array('id' => $contentid)); 82 $this->assertEquals(1, count($datacontent)); 83 84 $datafields = $DB->get_records('data_fields', array('id' => $field->field->id)); 85 $this->assertEquals(1, count($datafields)); 86 87 $datarecords = $DB->get_records('data_records', array('id' => $recordid)); 88 $this->assertEquals(1, count($datarecords)); 89 90 // Test to see if a failed delete returns false. 91 $result = data_delete_record(8798, $module, $course->id, $cm->id); 92 $this->assertFalse($result); 93 94 // Delete the record. 95 $result = data_delete_record($recordid, $module, $course->id, $cm->id); 96 97 // Check that all of the record is gone. 98 $datacontent = $DB->get_records('data_content', array('id' => $contentid)); 99 $this->assertEquals(0, count($datacontent)); 100 101 $datarecords = $DB->get_records('data_records', array('id' => $recordid)); 102 $this->assertEquals(0, count($datarecords)); 103 104 // Make sure the function returns true on a successful deletion. 105 $this->assertTrue($result); 106 } 107 108 /** 109 * Test comment_created event. 110 */ 111 public function test_data_comment_created_event() { 112 global $CFG, $DB; 113 require_once($CFG->dirroot . '/comment/lib.php'); 114 115 $this->resetAfterTest(); 116 117 // Create a record for deleting. 118 $this->setAdminUser(); 119 $course = $this->getDataGenerator()->create_course(); 120 $record = new stdClass(); 121 $record->course = $course->id; 122 $record->name = "Mod data delete test"; 123 $record->intro = "Some intro of some sort"; 124 $record->comments = 1; 125 126 $module = $this->getDataGenerator()->create_module('data', $record); 127 $field = data_get_field_new('text', $module); 128 129 $fielddetail = new stdClass(); 130 $fielddetail->name = 'Name'; 131 $fielddetail->description = 'Some name'; 132 133 $field->define_field($fielddetail); 134 $field->insert_field(); 135 $recordid = data_add_record($module); 136 137 $datacontent = array(); 138 $datacontent['fieldid'] = $field->field->id; 139 $datacontent['recordid'] = $recordid; 140 $datacontent['content'] = 'Asterix'; 141 142 $contentid = $DB->insert_record('data_content', $datacontent); 143 $cm = get_coursemodule_from_instance('data', $module->id, $course->id); 144 145 $context = context_module::instance($module->cmid); 146 $cmt = new stdClass(); 147 $cmt->context = $context; 148 $cmt->course = $course; 149 $cmt->cm = $cm; 150 $cmt->area = 'database_entry'; 151 $cmt->itemid = $recordid; 152 $cmt->showcount = true; 153 $cmt->component = 'mod_data'; 154 $comment = new comment($cmt); 155 156 // Triggering and capturing the event. 157 $sink = $this->redirectEvents(); 158 $comment->add('New comment'); 159 $events = $sink->get_events(); 160 $this->assertCount(1, $events); 161 $event = reset($events); 162 163 // Checking that the event contains the expected values. 164 $this->assertInstanceOf('\mod_data\event\comment_created', $event); 165 $this->assertEquals($context, $event->get_context()); 166 $url = new moodle_url('/mod/data/view.php', array('id' => $cm->id)); 167 $this->assertEquals($url, $event->get_url()); 168 $this->assertEventContextNotUsed($event); 169 } 170 171 /** 172 * Test comment_deleted event. 173 */ 174 public function test_data_comment_deleted_event() { 175 global $CFG, $DB; 176 require_once($CFG->dirroot . '/comment/lib.php'); 177 178 $this->resetAfterTest(); 179 180 // Create a record for deleting. 181 $this->setAdminUser(); 182 $course = $this->getDataGenerator()->create_course(); 183 $record = new stdClass(); 184 $record->course = $course->id; 185 $record->name = "Mod data delete test"; 186 $record->intro = "Some intro of some sort"; 187 $record->comments = 1; 188 189 $module = $this->getDataGenerator()->create_module('data', $record); 190 $field = data_get_field_new('text', $module); 191 192 $fielddetail = new stdClass(); 193 $fielddetail->name = 'Name'; 194 $fielddetail->description = 'Some name'; 195 196 $field->define_field($fielddetail); 197 $field->insert_field(); 198 $recordid = data_add_record($module); 199 200 $datacontent = array(); 201 $datacontent['fieldid'] = $field->field->id; 202 $datacontent['recordid'] = $recordid; 203 $datacontent['content'] = 'Asterix'; 204 205 $contentid = $DB->insert_record('data_content', $datacontent); 206 $cm = get_coursemodule_from_instance('data', $module->id, $course->id); 207 208 $context = context_module::instance($module->cmid); 209 $cmt = new stdClass(); 210 $cmt->context = $context; 211 $cmt->course = $course; 212 $cmt->cm = $cm; 213 $cmt->area = 'database_entry'; 214 $cmt->itemid = $recordid; 215 $cmt->showcount = true; 216 $cmt->component = 'mod_data'; 217 $comment = new comment($cmt); 218 $newcomment = $comment->add('New comment 1'); 219 220 // Triggering and capturing the event. 221 $sink = $this->redirectEvents(); 222 $comment->delete($newcomment->id); 223 $events = $sink->get_events(); 224 $this->assertCount(1, $events); 225 $event = reset($events); 226 227 // Checking that the event contains the expected values. 228 $this->assertInstanceOf('\mod_data\event\comment_deleted', $event); 229 $this->assertEquals($context, $event->get_context()); 230 $url = new moodle_url('/mod/data/view.php', array('id' => $module->cmid)); 231 $this->assertEquals($url, $event->get_url()); 232 $this->assertEventContextNotUsed($event); 233 } 234 235 /** 236 * Checks that data_user_can_manage_entry will return true if the user 237 * has the mod/data:manageentries capability. 238 */ 239 public function test_data_user_can_manage_entry_return_true_with_capability() { 240 241 $this->resetAfterTest(); 242 $testdata = $this->create_user_test_data(); 243 244 $user = $testdata['user']; 245 $course = $testdata['course']; 246 $roleid = $testdata['roleid']; 247 $context = $testdata['context']; 248 $record = $testdata['record']; 249 $data = new stdClass(); 250 251 $this->setUser($user); 252 253 assign_capability('mod/data:manageentries', CAP_ALLOW, $roleid, $context); 254 255 $this->assertTrue(data_user_can_manage_entry($record, $data, $context), 256 'data_user_can_manage_entry() returns true if the user has mod/data:manageentries capability'); 257 } 258 259 /** 260 * Checks that data_user_can_manage_entry will return false if the data 261 * is set to readonly. 262 */ 263 public function test_data_user_can_manage_entry_return_false_readonly() { 264 265 $this->resetAfterTest(); 266 $testdata = $this->create_user_test_data(); 267 268 $user = $testdata['user']; 269 $course = $testdata['course']; 270 $roleid = $testdata['roleid']; 271 $context = $testdata['context']; 272 $record = $testdata['record']; 273 274 $this->setUser($user); 275 276 // Need to make sure they don't have this capability in order to fall back to 277 // the other checks. 278 assign_capability('mod/data:manageentries', CAP_PROHIBIT, $roleid, $context); 279 280 // Causes readonly mode to be enabled. 281 $data = new stdClass(); 282 $now = time(); 283 // Add a small margin around the periods to prevent errors with slow tests. 284 $data->timeviewfrom = $now - 1; 285 $data->timeviewto = $now + 5; 286 287 $this->assertFalse(data_user_can_manage_entry($record, $data, $context), 288 'data_user_can_manage_entry() returns false if the data is read only'); 289 } 290 291 /** 292 * Checks that data_user_can_manage_entry will return false if the record 293 * can't be found in the database. 294 */ 295 public function test_data_user_can_manage_entry_return_false_no_record() { 296 297 $this->resetAfterTest(); 298 $testdata = $this->create_user_test_data(); 299 300 $user = $testdata['user']; 301 $course = $testdata['course']; 302 $roleid = $testdata['roleid']; 303 $context = $testdata['context']; 304 $record = $testdata['record']; 305 $data = new stdClass(); 306 // Causes readonly mode to be disabled. 307 $now = time(); 308 $data->timeviewfrom = $now + 100; 309 $data->timeviewto = $now - 100; 310 311 $this->setUser($user); 312 313 // Need to make sure they don't have this capability in order to fall back to 314 // the other checks. 315 assign_capability('mod/data:manageentries', CAP_PROHIBIT, $roleid, $context); 316 317 // Pass record id instead of object to force DB lookup. 318 $this->assertFalse(data_user_can_manage_entry(1, $data, $context), 319 'data_user_can_manage_entry() returns false if the record cannot be found'); 320 } 321 322 /** 323 * Checks that data_user_can_manage_entry will return false if the record 324 * isn't owned by the user. 325 */ 326 public function test_data_user_can_manage_entry_return_false_not_owned_record() { 327 328 $this->resetAfterTest(); 329 $testdata = $this->create_user_test_data(); 330 331 $user = $testdata['user']; 332 $course = $testdata['course']; 333 $roleid = $testdata['roleid']; 334 $context = $testdata['context']; 335 $record = $testdata['record']; 336 $data = new stdClass(); 337 // Causes readonly mode to be disabled. 338 $now = time(); 339 $data->timeviewfrom = $now + 100; 340 $data->timeviewto = $now - 100; 341 // Make sure the record isn't owned by this user. 342 $record->userid = $user->id + 1; 343 344 $this->setUser($user); 345 346 // Need to make sure they don't have this capability in order to fall back to 347 // the other checks. 348 assign_capability('mod/data:manageentries', CAP_PROHIBIT, $roleid, $context); 349 350 $this->assertFalse(data_user_can_manage_entry($record, $data, $context), 351 'data_user_can_manage_entry() returns false if the record isnt owned by the user'); 352 } 353 354 /** 355 * Checks that data_user_can_manage_entry will return true if the data 356 * doesn't require approval. 357 */ 358 public function test_data_user_can_manage_entry_return_true_data_no_approval() { 359 360 $this->resetAfterTest(); 361 $testdata = $this->create_user_test_data(); 362 363 $user = $testdata['user']; 364 $course = $testdata['course']; 365 $roleid = $testdata['roleid']; 366 $context = $testdata['context']; 367 $record = $testdata['record']; 368 $data = new stdClass(); 369 // Causes readonly mode to be disabled. 370 $now = time(); 371 $data->timeviewfrom = $now + 100; 372 $data->timeviewto = $now - 100; 373 // The record doesn't need approval. 374 $data->approval = false; 375 // Make sure the record is owned by this user. 376 $record->userid = $user->id; 377 378 $this->setUser($user); 379 380 // Need to make sure they don't have this capability in order to fall back to 381 // the other checks. 382 assign_capability('mod/data:manageentries', CAP_PROHIBIT, $roleid, $context); 383 384 $this->assertTrue(data_user_can_manage_entry($record, $data, $context), 385 'data_user_can_manage_entry() returns true if the record doesnt require approval'); 386 } 387 388 /** 389 * Checks that data_user_can_manage_entry will return true if the record 390 * isn't yet approved. 391 */ 392 public function test_data_user_can_manage_entry_return_true_record_unapproved() { 393 394 $this->resetAfterTest(); 395 $testdata = $this->create_user_test_data(); 396 397 $user = $testdata['user']; 398 $course = $testdata['course']; 399 $roleid = $testdata['roleid']; 400 $context = $testdata['context']; 401 $record = $testdata['record']; 402 $data = new stdClass(); 403 // Causes readonly mode to be disabled. 404 $now = time(); 405 $data->timeviewfrom = $now + 100; 406 $data->timeviewto = $now - 100; 407 // The record needs approval. 408 $data->approval = true; 409 // Make sure the record is owned by this user. 410 $record->userid = $user->id; 411 // The record hasn't yet been approved. 412 $record->approved = false; 413 414 $this->setUser($user); 415 416 // Need to make sure they don't have this capability in order to fall back to 417 // the other checks. 418 assign_capability('mod/data:manageentries', CAP_PROHIBIT, $roleid, $context); 419 420 $this->assertTrue(data_user_can_manage_entry($record, $data, $context), 421 'data_user_can_manage_entry() returns true if the record is not yet approved'); 422 } 423 424 /** 425 * Checks that data_user_can_manage_entry will return the 'manageapproved' 426 * value if the record has already been approved. 427 */ 428 public function test_data_user_can_manage_entry_return_manageapproved() { 429 430 $this->resetAfterTest(); 431 $testdata = $this->create_user_test_data(); 432 433 $user = $testdata['user']; 434 $course = $testdata['course']; 435 $roleid = $testdata['roleid']; 436 $context = $testdata['context']; 437 $record = $testdata['record']; 438 $data = new stdClass(); 439 // Causes readonly mode to be disabled. 440 $now = time(); 441 $data->timeviewfrom = $now + 100; 442 $data->timeviewto = $now - 100; 443 // The record needs approval. 444 $data->approval = true; 445 // Can the user managed approved records? 446 $data->manageapproved = false; 447 // Make sure the record is owned by this user. 448 $record->userid = $user->id; 449 // The record has been approved. 450 $record->approved = true; 451 452 $this->setUser($user); 453 454 // Need to make sure they don't have this capability in order to fall back to 455 // the other checks. 456 assign_capability('mod/data:manageentries', CAP_PROHIBIT, $roleid, $context); 457 458 $canmanageentry = data_user_can_manage_entry($record, $data, $context); 459 460 // Make sure the result of the check is what ever the manageapproved setting 461 // is set to. 462 $this->assertEquals($data->manageapproved, $canmanageentry, 463 'data_user_can_manage_entry() returns the manageapproved setting on approved records'); 464 } 465 466 /** 467 * Helper method to create a set of test data for data_user_can_manage tests 468 * 469 * @return array contains user, course, roleid, module, context and record 470 */ 471 private function create_user_test_data() { 472 $user = $this->getDataGenerator()->create_user(); 473 $course = $this->getDataGenerator()->create_course(); 474 $roleid = $this->getDataGenerator()->create_role(); 475 $record = new stdClass(); 476 $record->name = "test name"; 477 $record->intro = "test intro"; 478 $record->comments = 1; 479 $record->course = $course->id; 480 $record->userid = $user->id; 481 482 $module = $this->getDataGenerator()->create_module('data', $record); 483 $cm = get_coursemodule_from_instance('data', $module->id, $course->id); 484 $context = context_module::instance($module->cmid); 485 486 $this->getDataGenerator()->role_assign($roleid, $user->id, $context->id); 487 488 return array( 489 'user' => $user, 490 'course' => $course, 491 'roleid' => $roleid, 492 'module' => $module, 493 'context' => $context, 494 'record' => $record 495 ); 496 } 497 498 /** 499 * Tests for mod_data_rating_can_see_item_ratings(). 500 * 501 * @throws coding_exception 502 * @throws rating_exception 503 */ 504 public function test_mod_data_rating_can_see_item_ratings() { 505 global $DB; 506 507 $this->resetAfterTest(); 508 509 // Setup test data. 510 $course = new stdClass(); 511 $course->groupmode = SEPARATEGROUPS; 512 $course->groupmodeforce = true; 513 $course = $this->getDataGenerator()->create_course($course); 514 $data = $this->getDataGenerator()->create_module('data', array('course' => $course->id)); 515 $cm = get_coursemodule_from_instance('data', $data->id); 516 $context = context_module::instance($cm->id); 517 518 // Create users. 519 $user1 = $this->getDataGenerator()->create_user(); 520 $user2 = $this->getDataGenerator()->create_user(); 521 $user3 = $this->getDataGenerator()->create_user(); 522 $user4 = $this->getDataGenerator()->create_user(); 523 524 // Groups and stuff. 525 $role = $DB->get_record('role', array('shortname' => 'teacher'), '*', MUST_EXIST); 526 $this->getDataGenerator()->enrol_user($user1->id, $course->id, $role->id); 527 $this->getDataGenerator()->enrol_user($user2->id, $course->id, $role->id); 528 $this->getDataGenerator()->enrol_user($user3->id, $course->id, $role->id); 529 $this->getDataGenerator()->enrol_user($user4->id, $course->id, $role->id); 530 531 $group1 = $this->getDataGenerator()->create_group(array('courseid' => $course->id)); 532 $group2 = $this->getDataGenerator()->create_group(array('courseid' => $course->id)); 533 groups_add_member($group1, $user1); 534 groups_add_member($group1, $user2); 535 groups_add_member($group2, $user3); 536 groups_add_member($group2, $user4); 537 538 // Add data. 539 $field = data_get_field_new('text', $data); 540 541 $fielddetail = new stdClass(); 542 $fielddetail->name = 'Name'; 543 $fielddetail->description = 'Some name'; 544 545 $field->define_field($fielddetail); 546 $field->insert_field(); 547 548 // Add a record with a group id of zero (all participants). 549 $recordid1 = data_add_record($data, 0); 550 551 $datacontent = array(); 552 $datacontent['fieldid'] = $field->field->id; 553 $datacontent['recordid'] = $recordid1; 554 $datacontent['content'] = 'Obelix'; 555 $DB->insert_record('data_content', $datacontent); 556 557 $recordid = data_add_record($data, $group1->id); 558 559 $datacontent = array(); 560 $datacontent['fieldid'] = $field->field->id; 561 $datacontent['recordid'] = $recordid; 562 $datacontent['content'] = 'Asterix'; 563 $DB->insert_record('data_content', $datacontent); 564 565 // Now try to access it as various users. 566 unassign_capability('moodle/site:accessallgroups', $role->id); 567 // Eveyone should have access to the record with the group id of zero. 568 $params1 = array('contextid' => 2, 569 'component' => 'mod_data', 570 'ratingarea' => 'entry', 571 'itemid' => $recordid1, 572 'scaleid' => 2); 573 574 $params = array('contextid' => 2, 575 'component' => 'mod_data', 576 'ratingarea' => 'entry', 577 'itemid' => $recordid, 578 'scaleid' => 2); 579 580 $this->setUser($user1); 581 $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); 582 $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); 583 $this->setUser($user2); 584 $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); 585 $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); 586 $this->setUser($user3); 587 $this->assertFalse(mod_data_rating_can_see_item_ratings($params)); 588 $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); 589 $this->setUser($user4); 590 $this->assertFalse(mod_data_rating_can_see_item_ratings($params)); 591 $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); 592 593 // Now try with accessallgroups cap and make sure everything is visible. 594 assign_capability('moodle/site:accessallgroups', CAP_ALLOW, $role->id, $context->id); 595 $this->setUser($user1); 596 $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); 597 $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); 598 $this->setUser($user2); 599 $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); 600 $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); 601 $this->setUser($user3); 602 $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); 603 $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); 604 $this->setUser($user4); 605 $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); 606 $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); 607 608 // Change group mode and verify visibility. 609 $course->groupmode = VISIBLEGROUPS; 610 $DB->update_record('course', $course); 611 unassign_capability('moodle/site:accessallgroups', $role->id); 612 $this->setUser($user1); 613 $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); 614 $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); 615 $this->setUser($user2); 616 $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); 617 $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); 618 $this->setUser($user3); 619 $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); 620 $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); 621 $this->setUser($user4); 622 $this->assertTrue(mod_data_rating_can_see_item_ratings($params)); 623 $this->assertTrue(mod_data_rating_can_see_item_ratings($params1)); 624 625 } 626 627 /** 628 * Tests for mod_data_refresh_events. 629 */ 630 public function test_data_refresh_events() { 631 global $DB; 632 $this->resetAfterTest(); 633 $this->setAdminUser(); 634 635 $timeopen = time(); 636 $timeclose = time() + 86400; 637 638 $course = $this->getDataGenerator()->create_course(); 639 $generator = $this->getDataGenerator()->get_plugin_generator('mod_data'); 640 $params['course'] = $course->id; 641 $params['timeavailablefrom'] = $timeopen; 642 $params['timeavailableto'] = $timeclose; 643 $data = $generator->create_instance($params); 644 645 // Normal case, with existing course. 646 $this->assertTrue(data_refresh_events($course->id)); 647 $eventparams = array('modulename' => 'data', 'instance' => $data->id, 'eventtype' => 'open'); 648 $openevent = $DB->get_record('event', $eventparams, '*', MUST_EXIST); 649 $this->assertEquals($openevent->timestart, $timeopen); 650 651 $eventparams = array('modulename' => 'data', 'instance' => $data->id, 'eventtype' => 'close'); 652 $closeevent = $DB->get_record('event', $eventparams, '*', MUST_EXIST); 653 $this->assertEquals($closeevent->timestart, $timeclose); 654 // In case the course ID is passed as a numeric string. 655 $this->assertTrue(data_refresh_events('' . $course->id)); 656 // Course ID not provided. 657 $this->assertTrue(data_refresh_events()); 658 $eventparams = array('modulename' => 'data'); 659 $events = $DB->get_records('event', $eventparams); 660 foreach ($events as $event) { 661 if ($event->modulename === 'data' && $event->instance === $data->id && $event->eventtype === 'open') { 662 $this->assertEquals($event->timestart, $timeopen); 663 } 664 if ($event->modulename === 'data' && $event->instance === $data->id && $event->eventtype === 'close') { 665 $this->assertEquals($event->timestart, $timeclose); 666 } 667 } 668 } 669 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Aug 11 10:00:09 2016 | Cross-referenced by PHPXref 0.7.1 |