MDL-47813 tool_monitor: Fix rule manager unit tests in oracle
[moodle.git] / admin / tool / monitor / tests / rule_manager_test.php
blob12967914e77307d856343b5075e754266c8db068
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 rule manager api.
20 * @package tool_monitor
21 * @category test
22 * @copyright 2014 onwards Simey Lameze <simey@moodle.com>
23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
26 defined('MOODLE_INTERNAL') || die();
28 global $CFG;
30 /**
31 * Tests for rule manager.
33 * Class tool_monitor_rule_manager_testcase
35 class tool_monitor_rule_manager_testcase extends advanced_testcase {
37 /**
38 * Test add_rule method.
40 public function test_add_rule() {
41 $this->setAdminUser();
42 $this->resetAfterTest(true);
44 $user = $this->getDataGenerator()->create_user();
45 $course = $this->getDataGenerator()->create_course();
46 $now = time();
48 $rule = new stdClass();
49 $rule->userid = $user->id;
50 $rule->courseid = $course->id;
51 $rule->name = 'test rule 1';
52 $rule->plugin = 'core';
53 $rule->eventname = '\core\event\course_updated';
54 $rule->description = 'test description 1';
55 $rule->descriptionformat = FORMAT_HTML;
56 $rule->frequency = 15;
57 $rule->template = 'test template message';
58 $rule->templateformat = FORMAT_HTML;
59 $rule->timewindow = 300;
60 $rule->timecreated = $now;
61 $rule->timemodified = $now;
63 $ruledata = \tool_monitor\rule_manager::add_rule($rule);
64 foreach ($rule as $prop => $value) {
65 $this->assertEquals($ruledata->$prop, $value);
69 /**
70 * Test get_rule method.
72 public function test_get_rule() {
73 $this->setAdminUser();
74 $this->resetAfterTest(true);
76 $monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
77 $rule = $monitorgenerator->create_rule();
78 $rules1 = \tool_monitor\rule_manager::get_rule($rule->id);
79 $this->assertInstanceOf('tool_monitor\rule', $rules1);
80 $this->assertEquals($rules1, $rule);
83 /**
84 * Test update_rule method.
86 public function test_update_rule() {
87 $this->setAdminUser();
88 $this->resetAfterTest(true);
90 $monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
91 $rule = $monitorgenerator->create_rule();
93 $ruledata = new stdClass;
94 $ruledata->id = $rule->id;
95 $ruledata->frequency = 25;
97 \tool_monitor\rule_manager::update_rule($ruledata);
98 $this->assertEquals(25, $ruledata->frequency);
103 * Test get_rules_by_courseid method.
105 public function test_get_rules_by_courseid() {
106 $this->setAdminUser();
107 $this->resetAfterTest(true);
109 $monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
111 $course1 = $this->getDataGenerator()->create_course();
112 $course2 = $this->getDataGenerator()->create_course();
114 $record = new stdClass();
115 $record->courseid = $course1->id;
117 $record2 = new stdClass();
118 $record2->courseid = $course2->id;
120 $ruleids = array();
121 for ($i = 0; $i < 10; $i++) {
122 $rule = $monitorgenerator->create_rule($record);
123 $ruleids[] = $rule->id;
124 $rule = $monitorgenerator->create_rule(); // Create some site level rules.
125 $ruleids[] = $rule->id;
126 $rule = $monitorgenerator->create_rule($record2); // Create rules in a different course.
128 $ruledata = \tool_monitor\rule_manager::get_rules_by_courseid($course1->id);
129 $this->assertEmpty(array_merge(array_diff(array_keys($ruledata), $ruleids), array_diff($ruleids, array_keys($ruledata))));
130 $this->assertCount(20, $ruledata);
134 * Test get_rules_by_plugin method.
136 public function test_get_rules_by_plugin() {
137 $this->setAdminUser();
138 $this->resetAfterTest(true);
140 $monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
142 $record = new stdClass();
143 $record->plugin = 'core';
145 $record2 = new stdClass();
146 $record2->plugin = 'mod_assign';
148 $ruleids = array();
149 for ($i = 0; $i < 10; $i++) {
150 $rule = $monitorgenerator->create_rule($record);
151 $ruleids[] = $rule->id;
152 $rule = $monitorgenerator->create_rule($record2); // Create rules in a different plugin.
155 $ruledata = \tool_monitor\rule_manager::get_rules_by_plugin('core');
156 $this->assertEmpty(array_merge(array_diff(array_keys($ruledata), $ruleids), array_diff($ruleids, array_keys($ruledata))));
157 $this->assertCount(10, $ruledata);
161 * Test get_rules_by_event method.
163 public function test_get_rules_by_event() {
164 $this->setAdminUser();
165 $this->resetAfterTest(true);
167 $monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor');
168 $rule = $monitorgenerator->create_rule();
170 $record = new stdClass();
171 $record->eventname = '\core\event\calendar_event_created';
173 $record2 = new stdClass();
174 $record2->eventname = '\core\event\calendar_event_updated';
176 $ruleids = array();
177 for ($i = 0; $i < 10; $i++) {
178 $rule = $monitorgenerator->create_rule($record);
179 $ruleids[] = $rule->id;
180 $rule = $monitorgenerator->create_rule($record2); // Create rules in a different plugin.
183 $ruledata = \tool_monitor\rule_manager::get_rules_by_event('\core\event\calendar_event_created');
184 $this->assertEmpty(array_diff(array_keys($ruledata), $ruleids));
185 $this->assertCount(10, $ruledata);