Merge branch 'MDL-70075-39-2' of git://github.com/andrewnicols/moodle into MOODLE_39_...
[moodle.git] / grade / tests / events_test.php
blob5789fcd3f4832718e6a0418b5cd45d74f27ec8c9
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.
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/>.
17 /**
18 * Unit tests for events found in /grade/letter and /grade/scale.
20 * @package core_grades
21 * @category test
22 * @copyright 2017 Stephen Bourget
23 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
26 defined('MOODLE_INTERNAL') || die();
28 global $CFG;
29 require_once($CFG->dirroot . '/grade/lib.php');
31 /**
32 * Unit tests for grade events.
34 * @package core_grades
35 * @category test
36 * @copyright 2017 Stephen Bourget
37 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
39 class core_grade_events_test extends advanced_testcase {
41 /** @var stdClass the course used for testing */
42 private $course;
44 /**
45 * Test set up.
47 * This is executed before running any test in this file.
49 public function setUp() {
50 $this->resetAfterTest();
52 $this->setAdminUser();
53 $this->course = $this->getDataGenerator()->create_course();
56 /**
57 * Test the grade letter created event.
59 * There is no external API for triggering this event, so the unit test will simply
60 * create and trigger the event and ensure the data is returned as expected.
62 public function test_grade_letter_created() {
63 // Create a grade letter created event.
64 $event = \core\event\grade_letter_created::create(array(
65 'objectid' => 10,
66 'context' => context_course::instance($this->course->id)
67 ));
69 // Trigger and capture the event.
70 $sink = $this->redirectEvents();
71 $event->trigger();
72 $events = $sink->get_events();
73 $event = reset($events);
75 // Check that the event data is valid.
76 $this->assertInstanceOf('\core\event\grade_letter_created', $event);
77 $this->assertEquals(context_course::instance($this->course->id), $event->get_context());
80 /**
81 * Test the grade letter deleted event.
83 * There is no external API for triggering this event, so the unit test will simply
84 * create and trigger the event and ensure the data is returned as expected.
86 public function test_grade_letter_deleted() {
87 // Create a grade letter deleted event.
88 $event = \core\event\grade_letter_deleted::create(array(
89 'objectid' => 10,
90 'context' => context_course::instance($this->course->id)
91 ));
93 // Trigger and capture the event.
94 $sink = $this->redirectEvents();
95 $event->trigger();
96 $events = $sink->get_events();
97 $event = reset($events);
99 // Check that the event data is valid.
100 $this->assertInstanceOf('\core\event\grade_letter_deleted', $event);
101 $this->assertEquals(context_course::instance($this->course->id), $event->get_context());
105 * Test the grade letter updated event.
107 * There is no external API for triggering this event, so the unit test will simply
108 * create and trigger the event and ensure the data is returned as expected.
110 public function test_grade_letter_updated() {
111 // Create a grade letter updated event.
112 $event = \core\event\grade_letter_updated::create(array(
113 'objectid' => 10,
114 'context' => context_course::instance($this->course->id)
117 // Trigger and capture the event.
118 $sink = $this->redirectEvents();
119 $event->trigger();
120 $events = $sink->get_events();
121 $event = reset($events);
123 // Check that the event data is valid.
124 $this->assertInstanceOf('\core\event\grade_letter_updated', $event);
125 $this->assertEquals(context_course::instance($this->course->id), $event->get_context());
129 * Test the scale created event.
131 public function test_scale_created() {
132 $gradescale = new grade_scale();
133 $gradescale->name = 'unittestscale3';
134 $gradescale->courseid = $this->course->id;
135 $gradescale->userid = 317;
136 $gradescale->scale = 'Distinction, Very Good, Good, Pass, Fail';
137 $gradescale->description = 'This scale is used to mark standard assignments.';
139 $url = new \moodle_url('/grade/edit/scale/index.php', array('id' => $this->course->id));
141 // Trigger and capture the event.
142 $sink = $this->redirectEvents();
143 $id = $gradescale->insert();
144 $events = $sink->get_events();
145 $event = reset($events);
147 // Check that the event data is valid.
148 $this->assertInstanceOf('\core\event\scale_created', $event);
149 $this->assertEquals($id, $event->objectid);
150 $this->assertEquals($url, $event->get_url());
151 $this->assertEquals(context_course::instance($this->course->id), $event->get_context());
155 * Test the scale deleted event.
157 public function test_scale_deleted() {
158 $gradescale = new grade_scale();
159 $gradescale->name = 'unittestscale3';
160 $gradescale->courseid = $this->course->id;
161 $gradescale->userid = 317;
162 $gradescale->scale = 'Distinction, Very Good, Good, Pass, Fail';
163 $gradescale->description = 'This scale is used to mark standard assignments.';
164 $gradescale->insert();
166 // Trigger and capture the event.
167 $sink = $this->redirectEvents();
168 $gradescale->delete();
169 $events = $sink->get_events();
170 $event = reset($events);
172 // Check that the event data is valid.
173 $this->assertInstanceOf('\core\event\scale_deleted', $event);
174 $this->assertEquals(context_course::instance($this->course->id), $event->get_context());
178 * Test the scale updated event.
180 public function test_scale_updated() {
181 $gradescale = new grade_scale();
182 $gradescale->name = 'unittestscale3';
183 $gradescale->courseid = $this->course->id;
184 $gradescale->userid = 317;
185 $gradescale->scale = 'Distinction, Very Good, Good, Pass, Fail';
186 $gradescale->description = 'This scale is used to mark standard assignments.';
187 $id = $gradescale->insert();
189 $gradescale->name = 'Updated info for this unittest grade_scale';
190 $url = new \moodle_url('/grade/edit/scale/index.php', array('id' => $this->course->id));
192 // Trigger and capture the event.
193 $sink = $this->redirectEvents();
194 $gradescale->update();
195 $events = $sink->get_events();
196 $event = reset($events);
198 // Check that the event data is valid.
199 $this->assertInstanceOf('\core\event\scale_updated', $event);
200 $this->assertEquals($id, $event->objectid);
201 $this->assertEquals($url, $event->get_url());
202 $this->assertEquals(context_course::instance($this->course->id), $event->get_context());