[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/mod/assign/tests/ -> events_test.php (source)

   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   * Contains the event tests for the module assign.
  19   *
  20   * @package   mod_assign
  21   * @copyright 2014 Adrian Greeve <adrian@moodle.com>
  22   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  
  25  defined('MOODLE_INTERNAL') || die();
  26  
  27  global $CFG;
  28  require_once($CFG->dirroot . '/mod/assign/tests/base_test.php');
  29  require_once($CFG->dirroot . '/mod/assign/tests/fixtures/event_mod_assign_fixtures.php');
  30  
  31  /**
  32   * Contains the event tests for the module assign.
  33   *
  34   * @package   mod_assign
  35   * @copyright 2014 Adrian Greeve <adrian@moodle.com>
  36   * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  37   */
  38  class assign_events_testcase extends mod_assign_base_testcase {
  39  
  40      /**
  41       * Basic tests for the submission_created() abstract class.
  42       */
  43      public function test_base_event() {
  44          $generator = $this->getDataGenerator()->get_plugin_generator('mod_assign');
  45          $instance = $generator->create_instance(array('course' => $this->course->id));
  46          $modcontext = context_module::instance($instance->cmid);
  47  
  48          $data = array(
  49              'context' => $modcontext,
  50          );
  51          /** @var \mod_assign_unittests\event\nothing_happened $event */
  52          $event = \mod_assign_unittests\event\nothing_happened::create($data);
  53          $assign = $event->get_assign();
  54          $this->assertDebuggingCalled();
  55          $this->assertInstanceOf('assign', $assign);
  56  
  57          $event = \mod_assign_unittests\event\nothing_happened::create($data);
  58          $event->set_assign($assign);
  59          $assign2 = $event->get_assign();
  60          $this->assertDebuggingNotCalled();
  61          $this->assertSame($assign, $assign2);
  62      }
  63  
  64      /**
  65       * Basic tests for the submission_created() abstract class.
  66       */
  67      public function test_submission_created() {
  68          $generator = $this->getDataGenerator()->get_plugin_generator('mod_assign');
  69          $instance = $generator->create_instance(array('course' => $this->course->id));
  70          $modcontext = context_module::instance($instance->cmid);
  71  
  72          // Standard Event parameters.
  73          $params = array(
  74              'context' => $modcontext,
  75              'courseid' => $this->course->id
  76          );
  77  
  78          $eventinfo = $params;
  79          $eventinfo['other'] = array(
  80              'submissionid' => '17',
  81              'submissionattempt' => 0,
  82              'submissionstatus' => 'submitted'
  83          );
  84  
  85          $sink = $this->redirectEvents();
  86          $event = \mod_assign_unittests\event\submission_created::create($eventinfo);
  87          $event->trigger();
  88          $result = $sink->get_events();
  89          $event = reset($result);
  90          $sink->close();
  91  
  92          $this->assertEquals($modcontext->id, $event->contextid);
  93          $this->assertEquals($this->course->id, $event->courseid);
  94  
  95          // Check that an error occurs when teamsubmission is not set.
  96          try {
  97              \mod_assign_unittests\event\submission_created::create($params);
  98              $this->fail('Other must contain the key submissionid.');
  99          } catch (Exception $e) {
 100              $this->assertInstanceOf('coding_exception', $e);
 101          }
 102          // Check that the submission status debugging is fired.
 103          $subinfo = $params;
 104          $subinfo['other'] = array('submissionid' => '23');
 105          try {
 106              \mod_assign_unittests\event\submission_created::create($subinfo);
 107              $this->fail('Other must contain the key submissionattempt.');
 108          } catch (Exception $e) {
 109              $this->assertInstanceOf('coding_exception', $e);
 110          }
 111  
 112          $subinfo['other'] = array('submissionattempt' => '0');
 113          try {
 114              \mod_assign_unittests\event\submission_created::create($subinfo);
 115              $this->fail('Other must contain the key submissionstatus.');
 116          } catch (Exception $e) {
 117              $this->assertInstanceOf('coding_exception', $e);
 118          }
 119      }
 120  
 121      /**
 122       * Basic tests for the submission_updated() abstract class.
 123       */
 124      public function test_submission_updated() {
 125          $generator = $this->getDataGenerator()->get_plugin_generator('mod_assign');
 126          $instance = $generator->create_instance(array('course' => $this->course->id));
 127          $modcontext = context_module::instance($instance->cmid);
 128  
 129          // Standard Event parameters.
 130          $params = array(
 131              'context' => $modcontext,
 132              'courseid' => $this->course->id
 133          );
 134  
 135          $eventinfo = $params;
 136          $eventinfo['other'] = array(
 137              'submissionid' => '17',
 138              'submissionattempt' => 0,
 139              'submissionstatus' => 'submitted'
 140          );
 141  
 142          $sink = $this->redirectEvents();
 143          $event = \mod_assign_unittests\event\submission_updated::create($eventinfo);
 144          $event->trigger();
 145          $result = $sink->get_events();
 146          $event = reset($result);
 147          $sink->close();
 148  
 149          $this->assertEquals($modcontext->id, $event->contextid);
 150          $this->assertEquals($this->course->id, $event->courseid);
 151  
 152          // Check that an error occurs when teamsubmission is not set.
 153          try {
 154              \mod_assign_unittests\event\submission_created::create($params);
 155              $this->fail('Other must contain the key submissionid.');
 156          } catch (Exception $e) {
 157              $this->assertInstanceOf('coding_exception', $e);
 158          }
 159          // Check that the submission status debugging is fired.
 160          $subinfo = $params;
 161          $subinfo['other'] = array('submissionid' => '23');
 162          try {
 163              \mod_assign_unittests\event\submission_created::create($subinfo);
 164              $this->fail('Other must contain the key submissionattempt.');
 165          } catch (Exception $e) {
 166              $this->assertInstanceOf('coding_exception', $e);
 167          }
 168  
 169          $subinfo['other'] = array('submissionattempt' => '0');
 170          try {
 171              \mod_assign_unittests\event\submission_created::create($subinfo);
 172              $this->fail('Other must contain the key submissionstatus.');
 173          } catch (Exception $e) {
 174              $this->assertInstanceOf('coding_exception', $e);
 175          }
 176      }
 177  
 178      public function test_extension_granted() {
 179          $this->setUser($this->editingteachers[0]);
 180  
 181          $tomorrow = time() + 24*60*60;
 182          $yesterday = time() - 24*60*60;
 183  
 184          $assign = $this->create_instance(array('duedate' => $yesterday, 'cutoffdate' => $yesterday));
 185          $sink = $this->redirectEvents();
 186  
 187          $assign->testable_save_user_extension($this->students[0]->id, $tomorrow);
 188  
 189          $events = $sink->get_events();
 190          $this->assertCount(1, $events);
 191          $event = reset($events);
 192          $this->assertInstanceOf('\mod_assign\event\extension_granted', $event);
 193          $this->assertEquals($assign->get_context(), $event->get_context());
 194          $this->assertEquals($assign->get_instance()->id, $event->objectid);
 195          $this->assertEquals($this->students[0]->id, $event->relateduserid);
 196          $expected = array(
 197              $assign->get_course()->id,
 198              'assign',
 199              'grant extension',
 200              'view.php?id=' . $assign->get_course_module()->id,
 201              $this->students[0]->id,
 202              $assign->get_course_module()->id
 203          );
 204          $this->assertEventLegacyLogData($expected, $event);
 205          $sink->close();
 206      }
 207  
 208      public function test_submission_locked() {
 209          $this->editingteachers[0]->ignoresesskey = true;
 210          $this->setUser($this->editingteachers[0]);
 211  
 212          $assign = $this->create_instance();
 213          $sink = $this->redirectEvents();
 214  
 215          $assign->lock_submission($this->students[0]->id);
 216  
 217          $events = $sink->get_events();
 218          $this->assertCount(1, $events);
 219          $event = reset($events);
 220          $this->assertInstanceOf('\mod_assign\event\submission_locked', $event);
 221          $this->assertEquals($assign->get_context(), $event->get_context());
 222          $this->assertEquals($assign->get_instance()->id, $event->objectid);
 223          $this->assertEquals($this->students[0]->id, $event->relateduserid);
 224          $expected = array(
 225              $assign->get_course()->id,
 226              'assign',
 227              'lock submission',
 228              'view.php?id=' . $assign->get_course_module()->id,
 229              get_string('locksubmissionforstudent', 'assign', array('id' => $this->students[0]->id,
 230                  'fullname' => fullname($this->students[0]))),
 231              $assign->get_course_module()->id
 232          );
 233          $this->assertEventLegacyLogData($expected, $event);
 234          $sink->close();
 235  
 236          // Revert to defaults.
 237          $this->editingteachers[0]->ignoresesskey = false;
 238      }
 239  
 240      public function test_identities_revealed() {
 241          $this->editingteachers[0]->ignoresesskey = true;
 242          $this->setUser($this->editingteachers[0]);
 243  
 244          $assign = $this->create_instance(array('blindmarking'=>1));
 245          $sink = $this->redirectEvents();
 246  
 247          $assign->reveal_identities();
 248  
 249          $events = $sink->get_events();
 250          $this->assertCount(1, $events);
 251          $event = reset($events);
 252          $this->assertInstanceOf('\mod_assign\event\identities_revealed', $event);
 253          $this->assertEquals($assign->get_context(), $event->get_context());
 254          $this->assertEquals($assign->get_instance()->id, $event->objectid);
 255          $expected = array(
 256              $assign->get_course()->id,
 257              'assign',
 258              'reveal identities',
 259              'view.php?id=' . $assign->get_course_module()->id,
 260              get_string('revealidentities', 'assign'),
 261              $assign->get_course_module()->id
 262          );
 263          $this->assertEventLegacyLogData($expected, $event);
 264          $sink->close();
 265  
 266          // Revert to defaults.
 267          $this->editingteachers[0]->ignoresesskey = false;
 268      }
 269  
 270      /**
 271       * Test the submission_status_viewed event.
 272       */
 273      public function test_submission_status_viewed() {
 274          global $PAGE;
 275  
 276          $this->setUser($this->editingteachers[0]);
 277  
 278          $assign = $this->create_instance();
 279  
 280          // We need to set the URL in order to view the feedback.
 281          $PAGE->set_url('/a_url');
 282  
 283          // Trigger and capture the event.
 284          $sink = $this->redirectEvents();
 285          $assign->view();
 286          $events = $sink->get_events();
 287          $this->assertCount(1, $events);
 288          $event = reset($events);
 289  
 290          // Check that the event contains the expected values.
 291          $this->assertInstanceOf('\mod_assign\event\submission_status_viewed', $event);
 292          $this->assertEquals($assign->get_context(), $event->get_context());
 293          $expected = array(
 294              $assign->get_course()->id,
 295              'assign',
 296              'view',
 297              'view.php?id=' . $assign->get_course_module()->id,
 298              get_string('viewownsubmissionstatus', 'assign'),
 299              $assign->get_course_module()->id
 300          );
 301          $this->assertEventLegacyLogData($expected, $event);
 302          $this->assertEventContextNotUsed($event);
 303      }
 304  
 305      public function test_submission_status_updated() {
 306          $this->editingteachers[0]->ignoresesskey = true;
 307          $this->setUser($this->editingteachers[0]);
 308  
 309          $assign = $this->create_instance();
 310          $submission = $assign->get_user_submission($this->students[0]->id, true);
 311          $submission->status = ASSIGN_SUBMISSION_STATUS_SUBMITTED;
 312          $assign->testable_update_submission($submission, $this->students[0]->id, true, false);
 313  
 314          $sink = $this->redirectEvents();
 315          $assign->revert_to_draft($this->students[0]->id);
 316  
 317          $events = $sink->get_events();
 318          $this->assertCount(2, $events);
 319          $event = $events[1];
 320          $this->assertInstanceOf('\mod_assign\event\submission_status_updated', $event);
 321          $this->assertEquals($assign->get_context(), $event->get_context());
 322          $this->assertEquals($submission->id, $event->objectid);
 323          $this->assertEquals($this->students[0]->id, $event->relateduserid);
 324          $this->assertEquals(ASSIGN_SUBMISSION_STATUS_DRAFT, $event->other['newstatus']);
 325          $expected = array(
 326              $assign->get_course()->id,
 327              'assign',
 328              'revert submission to draft',
 329              'view.php?id=' . $assign->get_course_module()->id,
 330              get_string('reverttodraftforstudent', 'assign', array('id' => $this->students[0]->id,
 331                  'fullname' => fullname($this->students[0]))),
 332              $assign->get_course_module()->id
 333          );
 334          $this->assertEventLegacyLogData($expected, $event);
 335          $sink->close();
 336  
 337          // Revert to defaults.
 338          $this->editingteachers[0]->ignoresesskey = false;
 339      }
 340  
 341      public function test_marker_updated() {
 342          $this->editingteachers[0]->ignoresesskey = true;
 343          $this->setUser($this->editingteachers[0]);
 344  
 345          $assign = $this->create_instance();
 346  
 347          $sink = $this->redirectEvents();
 348          $assign->testable_process_set_batch_marking_allocation($this->students[0]->id, $this->teachers[0]->id);
 349  
 350          $events = $sink->get_events();
 351          $this->assertCount(1, $events);
 352          $event = reset($events);
 353          $this->assertInstanceOf('\mod_assign\event\marker_updated', $event);
 354          $this->assertEquals($assign->get_context(), $event->get_context());
 355          $this->assertEquals($assign->get_instance()->id, $event->objectid);
 356          $this->assertEquals($this->students[0]->id, $event->relateduserid);
 357          $this->assertEquals($this->editingteachers[0]->id, $event->userid);
 358          $this->assertEquals($this->teachers[0]->id, $event->other['markerid']);
 359          $expected = array(
 360              $assign->get_course()->id,
 361              'assign',
 362              'set marking allocation',
 363              'view.php?id=' . $assign->get_course_module()->id,
 364              get_string('setmarkerallocationforlog', 'assign', array('id' => $this->students[0]->id,
 365                  'fullname' => fullname($this->students[0]), 'marker' => fullname($this->teachers[0]))),
 366              $assign->get_course_module()->id
 367          );
 368          $this->assertEventLegacyLogData($expected, $event);
 369          $sink->close();
 370  
 371          // Revert to defaults.
 372          $this->editingteachers[0]->ignoresesskey = false;
 373      }
 374  
 375      public function test_workflow_state_updated() {
 376          $this->editingteachers[0]->ignoresesskey = true;
 377          $this->setUser($this->editingteachers[0]);
 378  
 379          $assign = $this->create_instance();
 380  
 381          // Test process_set_batch_marking_workflow_state.
 382          $sink = $this->redirectEvents();
 383          $assign->testable_process_set_batch_marking_workflow_state($this->students[0]->id, ASSIGN_MARKING_WORKFLOW_STATE_INREVIEW);
 384  
 385          $events = $sink->get_events();
 386          $this->assertCount(1, $events);
 387          $event = reset($events);
 388          $this->assertInstanceOf('\mod_assign\event\workflow_state_updated', $event);
 389          $this->assertEquals($assign->get_context(), $event->get_context());
 390          $this->assertEquals($assign->get_instance()->id, $event->objectid);
 391          $this->assertEquals($this->students[0]->id, $event->relateduserid);
 392          $this->assertEquals($this->editingteachers[0]->id, $event->userid);
 393          $this->assertEquals(ASSIGN_MARKING_WORKFLOW_STATE_INREVIEW, $event->other['newstate']);
 394          $expected = array(
 395              $assign->get_course()->id,
 396              'assign',
 397              'set marking workflow state',
 398              'view.php?id=' . $assign->get_course_module()->id,
 399              get_string('setmarkingworkflowstateforlog', 'assign', array('id' => $this->students[0]->id,
 400                  'fullname' => fullname($this->students[0]), 'state' => ASSIGN_MARKING_WORKFLOW_STATE_INREVIEW)),
 401              $assign->get_course_module()->id
 402          );
 403          $this->assertEventLegacyLogData($expected, $event);
 404          $sink->close();
 405  
 406          // Test setting workflow state in apply_grade_to_user.
 407          $sink = $this->redirectEvents();
 408          $data = new stdClass();
 409          $data->grade = '50.0';
 410          $data->workflowstate = 'readyforrelease';
 411          $assign->testable_apply_grade_to_user($data, $this->students[0]->id, 0);
 412  
 413          $events = $sink->get_events();
 414          $this->assertCount(4, $events);
 415          $event = reset($events);
 416          $this->assertInstanceOf('\mod_assign\event\workflow_state_updated', $event);
 417          $this->assertEquals($assign->get_context(), $event->get_context());
 418          $this->assertEquals($assign->get_instance()->id, $event->objectid);
 419          $this->assertEquals($this->students[0]->id, $event->relateduserid);
 420          $this->assertEquals($this->editingteachers[0]->id, $event->userid);
 421          $this->assertEquals(ASSIGN_MARKING_WORKFLOW_STATE_READYFORRELEASE, $event->other['newstate']);
 422          $expected = array(
 423              $assign->get_course()->id,
 424              'assign',
 425              'set marking workflow state',
 426              'view.php?id=' . $assign->get_course_module()->id,
 427              get_string('setmarkingworkflowstateforlog', 'assign', array('id' => $this->students[0]->id,
 428                  'fullname' => fullname($this->students[0]), 'state' => ASSIGN_MARKING_WORKFLOW_STATE_READYFORRELEASE)),
 429              $assign->get_course_module()->id
 430          );
 431          $this->assertEventLegacyLogData($expected, $event);
 432          $sink->close();
 433  
 434          // Test setting workflow state in process_save_quick_grades.
 435          $sink = $this->redirectEvents();
 436  
 437          $data = array(
 438              'grademodified_' . $this->students[0]->id => time(),
 439              'gradeattempt_' . $this->students[0]->id => '',
 440              'quickgrade_' . $this->students[0]->id => '60.0',
 441              'quickgrade_' . $this->students[0]->id . '_workflowstate' => 'inmarking'
 442          );
 443          $assign->testable_process_save_quick_grades($data);
 444  
 445          $events = $sink->get_events();
 446          $this->assertCount(4, $events);
 447          $event = reset($events);
 448          $this->assertInstanceOf('\mod_assign\event\workflow_state_updated', $event);
 449          $this->assertEquals($assign->get_context(), $event->get_context());
 450          $this->assertEquals($assign->get_instance()->id, $event->objectid);
 451          $this->assertEquals($this->students[0]->id, $event->relateduserid);
 452          $this->assertEquals($this->editingteachers[0]->id, $event->userid);
 453          $this->assertEquals(ASSIGN_MARKING_WORKFLOW_STATE_INMARKING, $event->other['newstate']);
 454          $expected = array(
 455              $assign->get_course()->id,
 456              'assign',
 457              'set marking workflow state',
 458              'view.php?id=' . $assign->get_course_module()->id,
 459              get_string('setmarkingworkflowstateforlog', 'assign', array('id' => $this->students[0]->id,
 460                  'fullname' => fullname($this->students[0]), 'state' => ASSIGN_MARKING_WORKFLOW_STATE_INMARKING)),
 461              $assign->get_course_module()->id
 462          );
 463          $this->assertEventLegacyLogData($expected, $event);
 464          $sink->close();
 465  
 466          // Revert to defaults.
 467          $this->editingteachers[0]->ignoresesskey = false;
 468      }
 469  
 470      public function test_submission_duplicated() {
 471          $this->setUser($this->students[0]);
 472  
 473          $assign = $this->create_instance();
 474          $submission1 = $assign->get_user_submission($this->students[0]->id, true, 0);
 475          $submission2 = $assign->get_user_submission($this->students[0]->id, true, 1);
 476          $submission2->status = ASSIGN_SUBMISSION_STATUS_REOPENED;
 477          $assign->testable_update_submission($submission2, $this->students[0]->id, time(), $assign->get_instance()->teamsubmission);
 478  
 479          $sink = $this->redirectEvents();
 480          $notices = null;
 481          $assign->copy_previous_attempt($notices);
 482  
 483          $events = $sink->get_events();
 484          $this->assertCount(1, $events);
 485          $event = reset($events);
 486          $this->assertInstanceOf('\mod_assign\event\submission_duplicated', $event);
 487          $this->assertEquals($assign->get_context(), $event->get_context());
 488          $this->assertEquals($submission2->id, $event->objectid);
 489          $this->assertEquals($this->students[0]->id, $event->userid);
 490          $submission2->status = ASSIGN_SUBMISSION_STATUS_DRAFT;
 491          $expected = array(
 492              $assign->get_course()->id,
 493              'assign',
 494              'submissioncopied',
 495              'view.php?id=' . $assign->get_course_module()->id,
 496              $assign->testable_format_submission_for_log($submission2),
 497              $assign->get_course_module()->id
 498          );
 499          $this->assertEventLegacyLogData($expected, $event);
 500          $sink->close();
 501      }
 502  
 503      public function test_submission_unlocked() {
 504          $this->editingteachers[0]->ignoresesskey = true;
 505          $this->setUser($this->editingteachers[0]);
 506  
 507          $assign = $this->create_instance();
 508          $sink = $this->redirectEvents();
 509  
 510          $assign->unlock_submission($this->students[0]->id);
 511  
 512          $events = $sink->get_events();
 513          $this->assertCount(1, $events);
 514          $event = reset($events);
 515          $this->assertInstanceOf('\mod_assign\event\submission_unlocked', $event);
 516          $this->assertEquals($assign->get_context(), $event->get_context());
 517          $this->assertEquals($assign->get_instance()->id, $event->objectid);
 518          $this->assertEquals($this->students[0]->id, $event->relateduserid);
 519          $expected = array(
 520              $assign->get_course()->id,
 521              'assign',
 522              'unlock submission',
 523              'view.php?id=' . $assign->get_course_module()->id,
 524              get_string('unlocksubmissionforstudent', 'assign', array('id' => $this->students[0]->id,
 525                  'fullname' => fullname($this->students[0]))),
 526              $assign->get_course_module()->id
 527          );
 528          $this->assertEventLegacyLogData($expected, $event);
 529          $sink->close();
 530  
 531          // Revert to defaults.
 532          $this->editingteachers[0]->ignoresesskey = false;
 533      }
 534  
 535      public function test_submission_graded() {
 536          $this->editingteachers[0]->ignoresesskey = true;
 537          $this->setUser($this->editingteachers[0]);
 538          $assign = $this->create_instance();
 539  
 540          // Test apply_grade_to_user.
 541          $sink = $this->redirectEvents();
 542  
 543          $data = new stdClass();
 544          $data->grade = '50.0';
 545          $assign->testable_apply_grade_to_user($data, $this->students[0]->id, 0);
 546          $grade = $assign->get_user_grade($this->students[0]->id, false, 0);
 547  
 548          $events = $sink->get_events();
 549          $this->assertCount(3, $events);
 550          $event = $events[2];
 551          $this->assertInstanceOf('\mod_assign\event\submission_graded', $event);
 552          $this->assertEquals($assign->get_context(), $event->get_context());
 553          $this->assertEquals($grade->id, $event->objectid);
 554          $this->assertEquals($this->students[0]->id, $event->relateduserid);
 555          $expected = array(
 556              $assign->get_course()->id,
 557              'assign',
 558              'grade submission',
 559              'view.php?id=' . $assign->get_course_module()->id,
 560              $assign->format_grade_for_log($grade),
 561              $assign->get_course_module()->id
 562          );
 563          $this->assertEventLegacyLogData($expected, $event);
 564          $sink->close();
 565  
 566          // Test process_save_quick_grades.
 567          $sink = $this->redirectEvents();
 568  
 569          $grade = $assign->get_user_grade($this->students[0]->id, false);
 570          $data = array(
 571              'grademodified_' . $this->students[0]->id => time(),
 572              'gradeattempt_' . $this->students[0]->id => $grade->attemptnumber,
 573              'quickgrade_' . $this->students[0]->id => '60.0'
 574          );
 575          $assign->testable_process_save_quick_grades($data);
 576          $grade = $assign->get_user_grade($this->students[0]->id, false);
 577          $this->assertEquals('60.0', $grade->grade);
 578  
 579          $events = $sink->get_events();
 580          $this->assertCount(3, $events);
 581          $event = $events[2];
 582          $this->assertInstanceOf('\mod_assign\event\submission_graded', $event);
 583          $this->assertEquals($assign->get_context(), $event->get_context());
 584          $this->assertEquals($grade->id, $event->objectid);
 585          $this->assertEquals($this->students[0]->id, $event->relateduserid);
 586          $expected = array(
 587              $assign->get_course()->id,
 588              'assign',
 589              'grade submission',
 590              'view.php?id=' . $assign->get_course_module()->id,
 591              $assign->format_grade_for_log($grade),
 592              $assign->get_course_module()->id
 593          );
 594          $this->assertEventLegacyLogData($expected, $event);
 595          $sink->close();
 596  
 597          // Test update_grade.
 598          $sink = $this->redirectEvents();
 599          $data = clone($grade);
 600          $data->grade = '50.0';
 601          $assign->update_grade($data);
 602          $grade = $assign->get_user_grade($this->students[0]->id, false, 0);
 603          $this->assertEquals('50.0', $grade->grade);
 604          $events = $sink->get_events();
 605  
 606          $this->assertCount(3, $events);
 607          $event = $events[2];
 608          $this->assertInstanceOf('\mod_assign\event\submission_graded', $event);
 609          $this->assertEquals($assign->get_context(), $event->get_context());
 610          $this->assertEquals($grade->id, $event->objectid);
 611          $this->assertEquals($this->students[0]->id, $event->relateduserid);
 612          $expected = array(
 613              $assign->get_course()->id,
 614              'assign',
 615              'grade submission',
 616              'view.php?id=' . $assign->get_course_module()->id,
 617              $assign->format_grade_for_log($grade),
 618              $assign->get_course_module()->id
 619          );
 620          $this->assertEventLegacyLogData($expected, $event);
 621          $sink->close();
 622          // Revert to defaults.
 623          $this->editingteachers[0]->ignoresesskey = false;
 624      }
 625  
 626      /**
 627       * Test the submission_viewed event.
 628       */
 629      public function test_submission_viewed() {
 630          global $PAGE;
 631  
 632          $this->setUser($this->editingteachers[0]);
 633  
 634          $assign = $this->create_instance();
 635          $submission = $assign->get_user_submission($this->students[0]->id, true);
 636  
 637          // We need to set the URL in order to view the submission.
 638          $PAGE->set_url('/a_url');
 639          // A hack - these variables are used by the view_plugin_content function to
 640          // determine what we actually want to view - would usually be set in URL.
 641          global $_POST;
 642          $_POST['plugin'] = 'comments';
 643          $_POST['sid'] = $submission->id;
 644  
 645          // Trigger and capture the event.
 646          $sink = $this->redirectEvents();
 647          $assign->view('viewpluginassignsubmission');
 648          $events = $sink->get_events();
 649          $this->assertCount(1, $events);
 650          $event = reset($events);
 651  
 652          // Check that the event contains the expected values.
 653          $this->assertInstanceOf('\mod_assign\event\submission_viewed', $event);
 654          $this->assertEquals($assign->get_context(), $event->get_context());
 655          $this->assertEquals($submission->id, $event->objectid);
 656          $expected = array(
 657              $assign->get_course()->id,
 658              'assign',
 659              'view submission',
 660              'view.php?id=' . $assign->get_course_module()->id,
 661              get_string('viewsubmissionforuser', 'assign', $this->students[0]->id),
 662              $assign->get_course_module()->id
 663          );
 664          $this->assertEventLegacyLogData($expected, $event);
 665          $this->assertEventContextNotUsed($event);
 666      }
 667  
 668      /**
 669       * Test the feedback_viewed event.
 670       */
 671      public function test_feedback_viewed() {
 672          global $DB, $PAGE;
 673  
 674          $this->setUser($this->editingteachers[0]);
 675  
 676          $assign = $this->create_instance();
 677          $submission = $assign->get_user_submission($this->students[0]->id, true);
 678  
 679          // Insert a grade for this submission.
 680          $grade = new stdClass();
 681          $grade->assignment = $assign->get_instance()->id;
 682          $grade->userid = $this->students[0]->id;
 683          $gradeid = $DB->insert_record('assign_grades', $grade);
 684  
 685          // We need to set the URL in order to view the feedback.
 686          $PAGE->set_url('/a_url');
 687          // A hack - these variables are used by the view_plugin_content function to
 688          // determine what we actually want to view - would usually be set in URL.
 689          global $_POST;
 690          $_POST['plugin'] = 'comments';
 691          $_POST['gid'] = $gradeid;
 692          $_POST['sid'] = $submission->id;
 693  
 694          // Trigger and capture the event.
 695          $sink = $this->redirectEvents();
 696          $assign->view('viewpluginassignfeedback');
 697          $events = $sink->get_events();
 698          $this->assertCount(1, $events);
 699          $event = reset($events);
 700  
 701          // Check that the event contains the expected values.
 702          $this->assertInstanceOf('\mod_assign\event\feedback_viewed', $event);
 703          $this->assertEquals($assign->get_context(), $event->get_context());
 704          $this->assertEquals($gradeid, $event->objectid);
 705          $expected = array(
 706              $assign->get_course()->id,
 707              'assign',
 708              'view feedback',
 709              'view.php?id=' . $assign->get_course_module()->id,
 710              get_string('viewfeedbackforuser', 'assign', $this->students[0]->id),
 711              $assign->get_course_module()->id
 712          );
 713          $this->assertEventLegacyLogData($expected, $event);
 714          $this->assertEventContextNotUsed($event);
 715      }
 716  
 717      /**
 718       * Test the grading_form_viewed event.
 719       */
 720      public function test_grading_form_viewed() {
 721          global $PAGE;
 722  
 723          $this->setUser($this->editingteachers[0]);
 724  
 725          $assign = $this->create_instance();
 726  
 727          // We need to set the URL in order to view the feedback.
 728          $PAGE->set_url('/a_url');
 729          // A hack - this variable is used by the view_single_grade_page function.
 730          global $_POST;
 731          $_POST['rownum'] = 1;
 732          $_POST['userid'] = $this->students[0]->id;
 733  
 734          // Trigger and capture the event.
 735          $sink = $this->redirectEvents();
 736          $assign->view('grade');
 737          $events = $sink->get_events();
 738          $this->assertCount(1, $events);
 739          $event = reset($events);
 740  
 741          // Check that the event contains the expected values.
 742          $this->assertInstanceOf('\mod_assign\event\grading_form_viewed', $event);
 743          $this->assertEquals($assign->get_context(), $event->get_context());
 744          $expected = array(
 745              $assign->get_course()->id,
 746              'assign',
 747              'view grading form',
 748              'view.php?id=' . $assign->get_course_module()->id,
 749              get_string('viewgradingformforstudent', 'assign', array('id' => $this->students[0]->id,
 750                  'fullname' => fullname($this->students[0]))),
 751              $assign->get_course_module()->id
 752          );
 753          $this->assertEventLegacyLogData($expected, $event);
 754          $this->assertEventContextNotUsed($event);
 755      }
 756  
 757      /**
 758       * Test the grading_table_viewed event.
 759       */
 760      public function test_grading_table_viewed() {
 761          global $PAGE;
 762  
 763          $this->setUser($this->editingteachers[0]);
 764  
 765          $assign = $this->create_instance();
 766  
 767          // We need to set the URL in order to view the feedback.
 768          $PAGE->set_url('/a_url');
 769          // A hack - this variable is used by the view_single_grade_page function.
 770          global $_POST;
 771          $_POST['rownum'] = 1;
 772          $_POST['userid'] = $this->students[0]->id;
 773  
 774          // Trigger and capture the event.
 775          $sink = $this->redirectEvents();
 776          $assign->view('grading');
 777          $events = $sink->get_events();
 778          $this->assertCount(1, $events);
 779          $event = reset($events);
 780  
 781          // Check that the event contains the expected values.
 782          $this->assertInstanceOf('\mod_assign\event\grading_table_viewed', $event);
 783          $this->assertEquals($assign->get_context(), $event->get_context());
 784          $expected = array(
 785              $assign->get_course()->id,
 786              'assign',
 787              'view submission grading table',
 788              'view.php?id=' . $assign->get_course_module()->id,
 789              get_string('viewsubmissiongradingtable', 'assign'),
 790              $assign->get_course_module()->id
 791          );
 792          $this->assertEventLegacyLogData($expected, $event);
 793          $this->assertEventContextNotUsed($event);
 794      }
 795  
 796      /**
 797       * Test the submission_form_viewed event.
 798       */
 799      public function test_submission_form_viewed() {
 800          global $PAGE;
 801  
 802          $this->setUser($this->students[0]);
 803  
 804          $assign = $this->create_instance();
 805  
 806          // We need to set the URL in order to view the submission form.
 807          $PAGE->set_url('/a_url');
 808  
 809          // Trigger and capture the event.
 810          $sink = $this->redirectEvents();
 811          $assign->view('editsubmission');
 812          $events = $sink->get_events();
 813          $this->assertCount(1, $events);
 814          $event = reset($events);
 815  
 816          // Check that the event contains the expected values.
 817          $this->assertInstanceOf('\mod_assign\event\submission_form_viewed', $event);
 818          $this->assertEquals($assign->get_context(), $event->get_context());
 819          $expected = array(
 820              $assign->get_course()->id,
 821              'assign',
 822              'view submit assignment form',
 823              'view.php?id=' . $assign->get_course_module()->id,
 824              get_string('editsubmission', 'assign'),
 825              $assign->get_course_module()->id
 826          );
 827          $this->assertEventLegacyLogData($expected, $event);
 828          $this->assertEventContextNotUsed($event);
 829      }
 830  
 831      /**
 832       * Test the submission_form_viewed event.
 833       */
 834      public function test_submission_confirmation_form_viewed() {
 835          global $PAGE;
 836  
 837          $this->setUser($this->students[0]);
 838  
 839          $assign = $this->create_instance();
 840  
 841          // We need to set the URL in order to view the submission form.
 842          $PAGE->set_url('/a_url');
 843  
 844          // Trigger and capture the event.
 845          $sink = $this->redirectEvents();
 846          $assign->view('submit');
 847          $events = $sink->get_events();
 848          $this->assertCount(1, $events);
 849          $event = reset($events);
 850  
 851          // Check that the event contains the expected values.
 852          $this->assertInstanceOf('\mod_assign\event\submission_confirmation_form_viewed', $event);
 853          $this->assertEquals($assign->get_context(), $event->get_context());
 854          $expected = array(
 855              $assign->get_course()->id,
 856              'assign',
 857              'view confirm submit assignment form',
 858              'view.php?id=' . $assign->get_course_module()->id,
 859              get_string('viewownsubmissionform', 'assign'),
 860              $assign->get_course_module()->id
 861          );
 862          $this->assertEventLegacyLogData($expected, $event);
 863          $this->assertEventContextNotUsed($event);
 864      }
 865  
 866      /**
 867       * Test the reveal_identities_confirmation_page_viewed event.
 868       */
 869      public function test_reveal_identities_confirmation_page_viewed() {
 870          global $PAGE;
 871  
 872          // Set to the admin user so we have the permission to reveal identities.
 873          $this->setAdminUser();
 874  
 875          $assign = $this->create_instance();
 876  
 877          // We need to set the URL in order to view the submission form.
 878          $PAGE->set_url('/a_url');
 879  
 880          // Trigger and capture the event.
 881          $sink = $this->redirectEvents();
 882          $assign->view('revealidentities');
 883          $events = $sink->get_events();
 884          $this->assertCount(1, $events);
 885          $event = reset($events);
 886  
 887          // Check that the event contains the expected values.
 888          $this->assertInstanceOf('\mod_assign\event\reveal_identities_confirmation_page_viewed', $event);
 889          $this->assertEquals($assign->get_context(), $event->get_context());
 890          $expected = array(
 891              $assign->get_course()->id,
 892              'assign',
 893              'view',
 894              'view.php?id=' . $assign->get_course_module()->id,
 895              get_string('viewrevealidentitiesconfirm', 'assign'),
 896              $assign->get_course_module()->id
 897          );
 898          $this->assertEventLegacyLogData($expected, $event);
 899          $this->assertEventContextNotUsed($event);
 900      }
 901  
 902      /**
 903       * Test the statement_accepted event.
 904       */
 905      public function test_statement_accepted() {
 906          // We want to be a student so we can submit assignments.
 907          $this->setUser($this->students[0]);
 908  
 909          // We do not want to send any messages to the student during the PHPUNIT test.
 910          set_config('submissionreceipts', false, 'assign');
 911  
 912          $assign = $this->create_instance();
 913  
 914          // Create the data we want to pass to the submit_for_grading function.
 915          $data = new stdClass();
 916          $data->submissionstatement = 'We are the Borg. You will be assimilated. Resistance is futile. - do you agree
 917              to these terms?';
 918  
 919          // Trigger and capture the event.
 920          $sink = $this->redirectEvents();
 921          $assign->submit_for_grading($data, array());
 922          $events = $sink->get_events();
 923          $event = reset($events);
 924  
 925          // Check that the event contains the expected values.
 926          $this->assertInstanceOf('\mod_assign\event\statement_accepted', $event);
 927          $this->assertEquals($assign->get_context(), $event->get_context());
 928          $expected = array(
 929              $assign->get_course()->id,
 930              'assign',
 931              'submission statement accepted',
 932              'view.php?id=' . $assign->get_course_module()->id,
 933              get_string('submissionstatementacceptedlog',
 934                  'mod_assign',
 935                  fullname($this->students[0])),
 936              $assign->get_course_module()->id
 937          );
 938          $this->assertEventLegacyLogData($expected, $event);
 939          $this->assertEventContextNotUsed($event);
 940  
 941          // Enable the online text submission plugin.
 942          $submissionplugins = $assign->get_submission_plugins();
 943          foreach ($submissionplugins as $plugin) {
 944              if ($plugin->get_type() === 'onlinetext') {
 945                  $plugin->enable();
 946                  break;
 947              }
 948          }
 949  
 950          // Create the data we want to pass to the save_submission function.
 951          $data = new stdClass();
 952          $data->onlinetext_editor = array(
 953              'text' => 'Online text',
 954              'format' => FORMAT_HTML,
 955              'itemid' => file_get_unused_draft_itemid()
 956          );
 957          $data->submissionstatement = 'We are the Borg. You will be assimilated. Resistance is futile. - do you agree
 958              to these terms?';
 959  
 960          // Trigger and capture the event.
 961          $sink = $this->redirectEvents();
 962          $assign->save_submission($data, $notices);
 963          $events = $sink->get_events();
 964          $event = $events[2];
 965  
 966          // Check that the event contains the expected values.
 967          $this->assertInstanceOf('\mod_assign\event\statement_accepted', $event);
 968          $this->assertEquals($assign->get_context(), $event->get_context());
 969          $this->assertEventLegacyLogData($expected, $event);
 970          $this->assertEventContextNotUsed($event);
 971      }
 972  
 973      /**
 974       * Test the batch_set_workflow_state_viewed event.
 975       */
 976      public function test_batch_set_workflow_state_viewed() {
 977          $assign = $this->create_instance();
 978  
 979          // Trigger and capture the event.
 980          $sink = $this->redirectEvents();
 981          $assign->testable_view_batch_set_workflow_state($this->students[0]->id);
 982          $events = $sink->get_events();
 983          $event = reset($events);
 984  
 985          // Check that the event contains the expected values.
 986          $this->assertInstanceOf('\mod_assign\event\batch_set_workflow_state_viewed', $event);
 987          $this->assertEquals($assign->get_context(), $event->get_context());
 988          $expected = array(
 989              $assign->get_course()->id,
 990              'assign',
 991              'view batch set marking workflow state',
 992              'view.php?id=' . $assign->get_course_module()->id,
 993              get_string('viewbatchsetmarkingworkflowstate', 'assign'),
 994              $assign->get_course_module()->id
 995          );
 996          $this->assertEventLegacyLogData($expected, $event);
 997          $this->assertEventContextNotUsed($event);
 998      }
 999  
1000      /**
1001       * Test the batch_set_marker_allocation_viewed event.
1002       */
1003      public function test_batch_set_marker_allocation_viewed() {
1004          $assign = $this->create_instance();
1005  
1006          // Trigger and capture the event.
1007          $sink = $this->redirectEvents();
1008          $assign->testable_view_batch_markingallocation($this->students[0]->id);
1009          $events = $sink->get_events();
1010          $event = reset($events);
1011  
1012          // Check that the event contains the expected values.
1013          $this->assertInstanceOf('\mod_assign\event\batch_set_marker_allocation_viewed', $event);
1014          $this->assertEquals($assign->get_context(), $event->get_context());
1015          $expected = array(
1016              $assign->get_course()->id,
1017              'assign',
1018              'view batch set marker allocation',
1019              'view.php?id=' . $assign->get_course_module()->id,
1020              get_string('viewbatchmarkingallocation', 'assign'),
1021              $assign->get_course_module()->id
1022          );
1023          $this->assertEventLegacyLogData($expected, $event);
1024          $this->assertEventContextNotUsed($event);
1025      }
1026  }


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1