From 1aeb58faad00ed3051ead8bd995f2a245445ce26 Mon Sep 17 00:00:00 2001 From: Ryan Wyllie Date: Wed, 1 Mar 2017 05:56:18 +0000 Subject: [PATCH] MDL-57503 calendat: test external function get action events by courses Part of MDL-55611 epic. --- calendar/tests/externallib_test.php | 150 ++++++++++++++++++++++++++-- 1 file changed, 142 insertions(+), 8 deletions(-) diff --git a/calendar/tests/externallib_test.php b/calendar/tests/externallib_test.php index 37af94d6677..96900918743 100644 --- a/calendar/tests/externallib_test.php +++ b/calendar/tests/externallib_test.php @@ -557,7 +557,7 @@ class core_calendar_externallib_testcase extends externallib_advanced_testcase { * If there are no events on or after the given time then an empty result set should * be returned. */ - function test_get_calendar_action_events_by_timesort_after_time() { + public function test_get_calendar_action_events_by_timesort_after_time() { $user = $this->getDataGenerator()->create_user(); $course = $this->getDataGenerator()->create_course(); $generator = $this->getDataGenerator()->get_plugin_generator('mod_assign'); @@ -617,7 +617,7 @@ class core_calendar_externallib_testcase extends externallib_advanced_testcase { * If there are no events before the given time then an empty result set should be * returned. */ - function test_get_calendar_action_events_by_timesort_before_time() { + public function test_get_calendar_action_events_by_timesort_before_time() { $user = $this->getDataGenerator()->create_user(); $course = $this->getDataGenerator()->create_course(); $generator = $this->getDataGenerator()->get_plugin_generator('mod_assign'); @@ -676,7 +676,7 @@ class core_calendar_externallib_testcase extends externallib_advanced_testcase { * If there are no events in the given time range then an empty result set should be * returned. */ - function test_get_calendar_action_events_by_timesort_time_range() { + public function test_get_calendar_action_events_by_timesort_time_range() { $user = $this->getDataGenerator()->create_user(); $course = $this->getDataGenerator()->create_course(); $generator = $this->getDataGenerator()->get_plugin_generator('mod_assign'); @@ -736,7 +736,7 @@ class core_calendar_externallib_testcase extends externallib_advanced_testcase { * If there are no events in the given time range then an empty result set should be * returned. */ - function test_get_calendar_action_events_by_timesort_time_limit_offset() { + public function test_get_calendar_action_events_by_timesort_time_limit_offset() { $user = $this->getDataGenerator()->create_user(); $course = $this->getDataGenerator()->create_course(); $generator = $this->getDataGenerator()->get_plugin_generator('mod_assign'); @@ -807,7 +807,7 @@ class core_calendar_externallib_testcase extends externallib_advanced_testcase { * If there are no events on or after the given time then an empty result set should * be returned. */ - function test_get_calendar_action_events_by_course_after_time() { + public function test_get_calendar_action_events_by_course_after_time() { $user = $this->getDataGenerator()->create_user(); $course1 = $this->getDataGenerator()->create_course(); $course2 = $this->getDataGenerator()->create_course(); @@ -871,7 +871,7 @@ class core_calendar_externallib_testcase extends externallib_advanced_testcase { * If there are no events before the given time then an empty result set should be * returned. */ - function test_get_calendar_action_events_by_course_before_time() { + public function test_get_calendar_action_events_by_course_before_time() { $user = $this->getDataGenerator()->create_user(); $course1 = $this->getDataGenerator()->create_course(); $course2 = $this->getDataGenerator()->create_course(); @@ -935,7 +935,7 @@ class core_calendar_externallib_testcase extends externallib_advanced_testcase { * If there are no events in the given time range then an empty result set should be * returned. */ - function test_get_calendar_action_events_by_course_time_range() { + public function test_get_calendar_action_events_by_course_time_range() { $user = $this->getDataGenerator()->create_user(); $course1 = $this->getDataGenerator()->create_course(); $course2 = $this->getDataGenerator()->create_course(); @@ -1000,7 +1000,7 @@ class core_calendar_externallib_testcase extends externallib_advanced_testcase { * If there are no events in the given time range then an empty result set should be * returned. */ - function test_get_calendar_action_events_by_course_time_limit_offset() { + public function test_get_calendar_action_events_by_course_time_limit_offset() { $user = $this->getDataGenerator()->create_user(); $course1 = $this->getDataGenerator()->create_course(); $course2 = $this->getDataGenerator()->create_course(); @@ -1067,4 +1067,138 @@ class core_calendar_externallib_testcase extends externallib_advanced_testcase { $this->assertEmpty($result); } + + /** + * Test that get_action_events_by_courses will return a list of events for each + * course you provided as long as the user is enrolled in the course. + */ + public function test_get_action_events_by_courses() { + $user = $this->getDataGenerator()->create_user(); + $course1 = $this->getDataGenerator()->create_course(); + $course2 = $this->getDataGenerator()->create_course(); + $course3 = $this->getDataGenerator()->create_course(); + $generator = $this->getDataGenerator()->get_plugin_generator('mod_assign'); + $instance1 = $generator->create_instance(['course' => $course1->id]); + $instance2 = $generator->create_instance(['course' => $course2->id]); + $instance3 = $generator->create_instance(['course' => $course3->id]); + $records = []; + $mapresult = function($result) { + $groupedbycourse = []; + foreach ($result['groupedbycourse'] as $group) { + $events = $group['events']; + $courseid = $group['courseid']; + $groupedbycourse[$courseid] = $events; + } + + return $groupedbycourse; + }; + + $this->getDataGenerator()->enrol_user($user->id, $course1->id); + $this->getDataGenerator()->enrol_user($user->id, $course2->id); + $this->resetAfterTest(true); + $this->setUser($user); + + for ($i = 1; $i < 10; $i++) { + if ($i < 3) { + $courseid = $course1->id; + $instance = $instance1->id; + } else if ($i < 6) { + $courseid = $course2->id; + $instance = $instance2->id; + } else { + $courseid = $course3->id; + $instance = $instance3->id; + } + + $records[] = $this->create_calendar_event( + sprintf('Event %d', $i), + $user->id, + 'user', + 0, + 1, + [ + 'type' => CALENDAR_EVENT_TYPE_ACTION, + 'courseid' => $courseid, + 'timesort' => $i, + 'modulename' => 'assign', + 'instance' => $instance, + ] + ); + } + + $result = core_calendar_external::get_calendar_action_events_by_courses([], 1); + $result = external_api::clean_returnvalue( + core_calendar_external::get_calendar_action_events_by_courses_returns(), + $result + ); + $result = $result['groupedbycourse']; + + $this->assertEmpty($result); + + $result = core_calendar_external::get_calendar_action_events_by_courses([$course1->id], 3); + $result = external_api::clean_returnvalue( + core_calendar_external::get_calendar_action_events_by_courses_returns(), + $result + ); + + $groupedbycourse = $mapresult($result); + + $this->assertEmpty($groupedbycourse[$course1->id]); + + $result = core_calendar_external::get_calendar_action_events_by_courses([$course1->id], 1); + $result = external_api::clean_returnvalue( + core_calendar_external::get_calendar_action_events_by_courses_returns(), + $result + ); + $groupedbycourse = $mapresult($result); + + $this->assertCount(2, $groupedbycourse[$course1->id]); + $this->assertEquals('Event 1', $groupedbycourse[$course1->id][0]['name']); + $this->assertEquals('Event 2', $groupedbycourse[$course1->id][1]['name']); + + $result = core_calendar_external::get_calendar_action_events_by_courses( + [$course1->id, $course2->id], 1); + $result = external_api::clean_returnvalue( + core_calendar_external::get_calendar_action_events_by_courses_returns(), + $result + ); + $groupedbycourse = $mapresult($result); + + $this->assertCount(2, $groupedbycourse[$course1->id]); + $this->assertEquals('Event 1', $groupedbycourse[$course1->id][0]['name']); + $this->assertEquals('Event 2', $groupedbycourse[$course1->id][1]['name']); + $this->assertCount(3, $groupedbycourse[$course2->id]); + $this->assertEquals('Event 3', $groupedbycourse[$course2->id][0]['name']); + $this->assertEquals('Event 4', $groupedbycourse[$course2->id][1]['name']); + $this->assertEquals('Event 5', $groupedbycourse[$course2->id][2]['name']); + + $result = core_calendar_external::get_calendar_action_events_by_courses( + [$course1->id, $course2->id], 2, 4); + $result = external_api::clean_returnvalue( + core_calendar_external::get_calendar_action_events_by_courses_returns(), + $result + ); + $groupedbycourse = $mapresult($result); + + $this->assertCount(2, $groupedbycourse); + $this->assertCount(1, $groupedbycourse[$course1->id]); + $this->assertEquals('Event 2', $groupedbycourse[$course1->id][0]['name']); + $this->assertCount(2, $groupedbycourse[$course2->id]); + $this->assertEquals('Event 3', $groupedbycourse[$course2->id][0]['name']); + $this->assertEquals('Event 4', $groupedbycourse[$course2->id][1]['name']); + + $result = core_calendar_external::get_calendar_action_events_by_courses( + [$course1->id, $course2->id], 1, null, 1); + $result = external_api::clean_returnvalue( + core_calendar_external::get_calendar_action_events_by_courses_returns(), + $result + ); + $groupedbycourse = $mapresult($result); + + $this->assertCount(2, $groupedbycourse); + $this->assertCount(1, $groupedbycourse[$course1->id]); + $this->assertEquals('Event 1', $groupedbycourse[$course1->id][0]['name']); + $this->assertCount(1, $groupedbycourse[$course2->id]); + $this->assertEquals('Event 3', $groupedbycourse[$course2->id][0]['name']); + } }