diff --git a/admin/tool/monitor/tests/eventobservers_test.php b/admin/tool/monitor/tests/eventobservers_test.php index 74276d38397..6014ab3ee5a 100644 --- a/admin/tool/monitor/tests/eventobservers_test.php +++ b/admin/tool/monitor/tests/eventobservers_test.php @@ -114,20 +114,88 @@ class tool_monitor_eventobservers_testcase extends advanced_testcase { $this->resetAfterTest(); - // Create events and verify data is fine. + // Create the necessary items for testing. + $user = $this->getDataGenerator()->create_user(); $course = $this->getDataGenerator()->create_course(); + $course2 = $this->getDataGenerator()->create_course(); + $monitorgenerator = $this->getDataGenerator()->get_plugin_generator('tool_monitor'); - $initialevents = $DB->get_records('tool_monitor_events'); - $initalcount = count($initialevents); + // Fire a bunch of events. + // Trigger a bunch of other events. + $eventparams = array( + 'context' => context_course::instance($course->id) + ); + for ($i = 0; $i < 5; $i++) { + \core\event\course_viewed::create($eventparams)->trigger(); + \mod_quiz\event\course_module_instance_list_viewed::create($eventparams)->trigger(); + \mod_scorm\event\course_module_instance_list_viewed::create($eventparams)->trigger(); + } + + // Confirm that nothing was stored in the tool_monitor_events table + // as we do not have any subscriptions associated for the above events. + $this->assertEquals(0, $DB->count_records('tool_monitor_events')); + + // Now, let's create a rule so an event can be stored. + $rule = new stdClass(); + $rule->courseid = $course->id; + $rule->plugin = 'mod_book'; + $rule->eventname = '\mod_book\event\course_module_instance_list_viewed'; + $rule = $monitorgenerator->create_rule($rule); + + // Let's subscribe to this rule. + $sub = new stdClass; + $sub->courseid = $course->id; + $sub->ruleid = $rule->id; + $sub->userid = $user->id; + $monitorgenerator->create_subscription($sub); + + // Again, let's just fire more events to make sure they still aren't stored. + for ($i = 0; $i < 5; $i++) { + \core\event\course_viewed::create($eventparams)->trigger(); + \mod_quiz\event\course_module_instance_list_viewed::create($eventparams)->trigger(); + \mod_scorm\event\course_module_instance_list_viewed::create($eventparams)->trigger(); + } + + // Fire the event we want to capture. $event = \mod_book\event\course_module_instance_list_viewed::create_from_course($course); $event->trigger(); + // Check that the event data is valid. $events = $DB->get_records('tool_monitor_events'); - $count = count($events); - $this->assertEquals($initalcount + 1, $count); + $this->assertEquals(1, count($events)); $monitorevent = array_pop($events); + $this->assertEquals($event->eventname, $monitorevent->eventname); + $this->assertEquals($event->contextid, $monitorevent->contextid); + $this->assertEquals($event->contextlevel, $monitorevent->contextlevel); + $this->assertEquals($event->get_url()->out(), $monitorevent->link); + $this->assertEquals($event->courseid, $monitorevent->courseid); + $this->assertEquals($event->timecreated, $monitorevent->timecreated); - // Match values. + // Remove the stored events. + $DB->delete_records('tool_monitor_events'); + + // Now, let's create a site wide rule. + $rule = new stdClass(); + $rule->courseid = 0; + $rule->plugin = 'mod_book'; + $rule->eventname = '\mod_book\event\course_module_instance_list_viewed'; + $rule = $monitorgenerator->create_rule($rule); + + // Let's subscribe to this rule. + $sub = new stdClass; + $sub->courseid = 0; + $sub->ruleid = $rule->id; + $sub->userid = $user->id; + $monitorgenerator->create_subscription($sub); + + // Fire the event we want to capture - but in a different course. + $event = \mod_book\event\course_module_instance_list_viewed::create_from_course($course2); + $event->trigger(); + + // Check that the event data is valid. + $events = $DB->get_records('tool_monitor_events'); + $this->assertEquals(1, count($events)); + $monitorevent = array_pop($events); $this->assertEquals($event->eventname, $monitorevent->eventname); $this->assertEquals($event->contextid, $monitorevent->contextid); $this->assertEquals($event->contextlevel, $monitorevent->contextlevel); diff --git a/admin/tool/monitor/tests/events_test.php b/admin/tool/monitor/tests/events_test.php index 825fd5a2ffa..4ed829d3f40 100644 --- a/admin/tool/monitor/tests/events_test.php +++ b/admin/tool/monitor/tests/events_test.php @@ -50,6 +50,8 @@ class tool_monitor_events_testcase extends advanced_testcase { $ruledata = new stdClass(); $ruledata->userid = $user->id; $ruledata->courseid = $course->id; + $ruledata->plugin = 'mod_assign'; + $ruledata->eventname = '\mod_assign\event\submission_viewed'; $ruledata->description = 'Rule description'; $ruledata->descriptionformat = FORMAT_HTML; $ruledata->template = 'A message template'; diff --git a/admin/tool/monitor/tests/task_clean_events_test.php b/admin/tool/monitor/tests/task_clean_events_test.php index c9067ea0a0a..9de32269c36 100644 --- a/admin/tool/monitor/tests/task_clean_events_test.php +++ b/admin/tool/monitor/tests/task_clean_events_test.php @@ -94,6 +94,31 @@ class tool_monitor_task_clean_events_testcase extends advanced_testcase { $rule->timewindow = 500; $rule6 = $monitorgenerator->create_rule($rule); + + // Let's subscribe to these rules. + $sub = new stdClass; + $sub->courseid = $course->id; + $sub->ruleid = $rule1->id; + $sub->userid = $user->id; + $monitorgenerator->create_subscription($sub); + + $sub->ruleid = $rule2->id; + $monitorgenerator->create_subscription($sub); + + $sub->ruleid = $rule3->id; + $monitorgenerator->create_subscription($sub); + + $sub->ruleid = $rule4->id; + $monitorgenerator->create_subscription($sub); + + $sub->ruleid = $rule5->id; + $sub->courseid = $course2->id; + $monitorgenerator->create_subscription($sub); + + $sub->ruleid = $rule6->id; + $sub->courseid = 0; + $monitorgenerator->create_subscription($sub); + // Now let's populate the tool_monitor table with the events associated with those rules. \mod_book\event\course_module_viewed::create_from_book($book, $bookcontext)->trigger(); \mod_book\event\course_module_instance_list_viewed::create_from_course($course)->trigger(); @@ -115,8 +140,8 @@ class tool_monitor_task_clean_events_testcase extends advanced_testcase { \mod_scorm\event\course_module_instance_list_viewed::create($eventparams)->trigger(); } - // Check that the events exist - there will be additional events for creating courses, modules and rules. - $this->assertEquals(26, $DB->count_records('tool_monitor_events')); + // We do not store events that have no subscriptions - so there will be only 4 events. + $this->assertEquals(4, $DB->count_records('tool_monitor_events')); // Run the task and check that all the quiz, scorm and rule events are removed as well as the course_module_* // viewed events in the second course.