/grade/tests/events_test.php

https://github.com/abgreeve/moodle · PHP · 204 lines · 99 code · 27 blank · 78 comment · 1 complexity · 537dc16076a63e19176ea39fdbce474a MD5 · raw file

  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. * Unit tests for events found in /grade/letter and /grade/scale.
  18. *
  19. * @package core_grades
  20. * @category test
  21. * @copyright 2017 Stephen Bourget
  22. * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  23. */
  24. defined('MOODLE_INTERNAL') || die();
  25. global $CFG;
  26. require_once($CFG->dirroot . '/grade/lib.php');
  27. /**
  28. * Unit tests for grade events.
  29. *
  30. * @package core_grades
  31. * @category test
  32. * @copyright 2017 Stephen Bourget
  33. * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  34. */
  35. class core_grade_events_test extends advanced_testcase {
  36. /** @var stdClass the course used for testing */
  37. private $course;
  38. /**
  39. * Test set up.
  40. *
  41. * This is executed before running any test in this file.
  42. */
  43. public function setUp(): void {
  44. $this->resetAfterTest();
  45. $this->setAdminUser();
  46. $this->course = $this->getDataGenerator()->create_course();
  47. }
  48. /**
  49. * Test the grade letter created event.
  50. *
  51. * There is no external API for triggering this event, so the unit test will simply
  52. * create and trigger the event and ensure the data is returned as expected.
  53. */
  54. public function test_grade_letter_created() {
  55. // Create a grade letter created event.
  56. $event = \core\event\grade_letter_created::create(array(
  57. 'objectid' => 10,
  58. 'context' => context_course::instance($this->course->id)
  59. ));
  60. // Trigger and capture the event.
  61. $sink = $this->redirectEvents();
  62. $event->trigger();
  63. $events = $sink->get_events();
  64. $event = reset($events);
  65. // Check that the event data is valid.
  66. $this->assertInstanceOf('\core\event\grade_letter_created', $event);
  67. $this->assertEquals(context_course::instance($this->course->id), $event->get_context());
  68. }
  69. /**
  70. * Test the grade letter deleted event.
  71. *
  72. * There is no external API for triggering this event, so the unit test will simply
  73. * create and trigger the event and ensure the data is returned as expected.
  74. */
  75. public function test_grade_letter_deleted() {
  76. // Create a grade letter deleted event.
  77. $event = \core\event\grade_letter_deleted::create(array(
  78. 'objectid' => 10,
  79. 'context' => context_course::instance($this->course->id)
  80. ));
  81. // Trigger and capture the event.
  82. $sink = $this->redirectEvents();
  83. $event->trigger();
  84. $events = $sink->get_events();
  85. $event = reset($events);
  86. // Check that the event data is valid.
  87. $this->assertInstanceOf('\core\event\grade_letter_deleted', $event);
  88. $this->assertEquals(context_course::instance($this->course->id), $event->get_context());
  89. }
  90. /**
  91. * Test the grade letter updated event.
  92. *
  93. * There is no external API for triggering this event, so the unit test will simply
  94. * create and trigger the event and ensure the data is returned as expected.
  95. */
  96. public function test_grade_letter_updated() {
  97. // Create a grade letter updated event.
  98. $event = \core\event\grade_letter_updated::create(array(
  99. 'objectid' => 10,
  100. 'context' => context_course::instance($this->course->id)
  101. ));
  102. // Trigger and capture the event.
  103. $sink = $this->redirectEvents();
  104. $event->trigger();
  105. $events = $sink->get_events();
  106. $event = reset($events);
  107. // Check that the event data is valid.
  108. $this->assertInstanceOf('\core\event\grade_letter_updated', $event);
  109. $this->assertEquals(context_course::instance($this->course->id), $event->get_context());
  110. }
  111. /**
  112. * Test the scale created event.
  113. */
  114. public function test_scale_created() {
  115. $gradescale = new grade_scale();
  116. $gradescale->name = 'unittestscale3';
  117. $gradescale->courseid = $this->course->id;
  118. $gradescale->userid = 317;
  119. $gradescale->scale = 'Distinction, Very Good, Good, Pass, Fail';
  120. $gradescale->description = 'This scale is used to mark standard assignments.';
  121. $url = new \moodle_url('/grade/edit/scale/index.php', array('id' => $this->course->id));
  122. // Trigger and capture the event.
  123. $sink = $this->redirectEvents();
  124. $id = $gradescale->insert();
  125. $events = $sink->get_events();
  126. $event = reset($events);
  127. // Check that the event data is valid.
  128. $this->assertInstanceOf('\core\event\scale_created', $event);
  129. $this->assertEquals($id, $event->objectid);
  130. $this->assertEquals($url, $event->get_url());
  131. $this->assertEquals(context_course::instance($this->course->id), $event->get_context());
  132. }
  133. /**
  134. * Test the scale deleted event.
  135. */
  136. public function test_scale_deleted() {
  137. $gradescale = new grade_scale();
  138. $gradescale->name = 'unittestscale3';
  139. $gradescale->courseid = $this->course->id;
  140. $gradescale->userid = 317;
  141. $gradescale->scale = 'Distinction, Very Good, Good, Pass, Fail';
  142. $gradescale->description = 'This scale is used to mark standard assignments.';
  143. $gradescale->insert();
  144. // Trigger and capture the event.
  145. $sink = $this->redirectEvents();
  146. $gradescale->delete();
  147. $events = $sink->get_events();
  148. $event = reset($events);
  149. // Check that the event data is valid.
  150. $this->assertInstanceOf('\core\event\scale_deleted', $event);
  151. $this->assertEquals(context_course::instance($this->course->id), $event->get_context());
  152. }
  153. /**
  154. * Test the scale updated event.
  155. */
  156. public function test_scale_updated() {
  157. $gradescale = new grade_scale();
  158. $gradescale->name = 'unittestscale3';
  159. $gradescale->courseid = $this->course->id;
  160. $gradescale->userid = 317;
  161. $gradescale->scale = 'Distinction, Very Good, Good, Pass, Fail';
  162. $gradescale->description = 'This scale is used to mark standard assignments.';
  163. $id = $gradescale->insert();
  164. $gradescale->name = 'Updated info for this unittest grade_scale';
  165. $url = new \moodle_url('/grade/edit/scale/index.php', array('id' => $this->course->id));
  166. // Trigger and capture the event.
  167. $sink = $this->redirectEvents();
  168. $gradescale->update();
  169. $events = $sink->get_events();
  170. $event = reset($events);
  171. // Check that the event data is valid.
  172. $this->assertInstanceOf('\core\event\scale_updated', $event);
  173. $this->assertEquals($id, $event->objectid);
  174. $this->assertEquals($url, $event->get_url());
  175. $this->assertEquals(context_course::instance($this->course->id), $event->get_context());
  176. }
  177. }