From 644a7ef7a4d0a500561c3004fa47d67a2904420e Mon Sep 17 00:00:00 2001 From: Ankit Agarwal Date: Mon, 10 Dec 2012 16:18:07 +0800 Subject: [PATCH] MDL-37077 phpunit: Adding phpunit tests for the ws api core_calendar_delete_event --- calendar/tests/externallib_tests.php | 257 +++++++++++++++++++++++++++ phpunit.xml.dist | 3 + 2 files changed, 260 insertions(+) create mode 100644 calendar/tests/externallib_tests.php diff --git a/calendar/tests/externallib_tests.php b/calendar/tests/externallib_tests.php new file mode 100644 index 00000000000..96071bc15d7 --- /dev/null +++ b/calendar/tests/externallib_tests.php @@ -0,0 +1,257 @@ +. + +/** + * External calendar functions unit tests + * + * @package core_calendar + * @category external + * @copyright 2012 Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; + +require_once($CFG->dirroot . '/webservice/tests/helpers.php'); + +/** + * External course functions unit tests + * + * @package core_calendar + * @category external + * @copyright 2012 Ankit Agarwal + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @since Moodle 2.5 + */ +class core_calendar_external_testcase extends externallib_advanced_testcase { + + /** + * Tests set up + */ + protected function setUp() { + global $CFG; + require_once($CFG->dirroot . '/calendar/externallib.php'); + } + + /** Create calendar events or update them + * Set $prop->id, if you want to do an update instead of creating an new event + * + * @param string $name Event title + * @param int $userid User id + * @param string $type Event type + * @param int $repeats Number of repeated events to create + * @param int $timestart Time stamp of the event start + * @param mixed $prop List of event properties as array or object + * @return mixed Event object or false; + * @since Moodle 2.5 + */ + + public static function create_calendar_event($name, $userid = 0, $type = 'user', $repeats = 0, $timestart = null, $prop = null) { + global $CFG, $DB, $USER, $SITE; + + require_once("$CFG->dirroot/calendar/lib.php"); + if (!empty($prop)) { + if (is_array($prop)) { + $prop = (object)$prop; + } + } else { + $prop = new stdClass(); + } + $prop->name = $name; + if (empty($prop->eventtype)) { + $prop->eventtype = $type; + } + if (empty($prop->repeats)) { + $prop->repeats = $repeats; + } + if (empty($prop->timestart)) { + $prop->timestart = time(); + } + if (empty($prop->timeduration)) { + $prop->timeduration = 0; + } + if (empty($prop->repeats)) { + $prop->repeat = 0; + } else { + $prop->repeat = 1; + } + if (empty($prop->userid)) { + if (!empty($userid)) { + $prop->userid = $userid; + } else { + return false; + } + } + if (empty($prop->courseid)) { + $prop->courseid = $SITE->id; + } + $event = new calendar_event($prop); + return $event->create($prop); + } + + public function test_create_calendar_events () { + global $DB, $USER; + + $this->setAdminUser(); + $this->resetAfterTest(); + $prevcount = count($DB->get_records("event")); + + // Create a few events and do asserts. + $this->create_calendar_event('test', $USER->id); + $count = count($DB->get_records("event", array('name' => 'test'))); + $this->assertEquals(1, $count); + $aftercount = count($DB->get_records("event")); + $this->assertEquals($prevcount + 1, $aftercount); + + $this->create_calendar_event('user', $USER->id, 'user', 3); + $count = count($DB->get_records("event", array('name' => 'user'))); + $this->assertEquals(3, $count); + $aftercount = count($DB->get_records("event")); + $this->assertEquals($prevcount + 4, $aftercount); + + } + + /** + * Test delete_courses + */ + public function test_delete_calendar_events() { + global $DB, $USER; + + $this->resetAfterTest(true); + $this->setAdminUser(); + + // Create a few stuff to test with. + $user = $this->getDataGenerator()->create_user(); + $course = $this->getDataGenerator()->create_course(); + $record = new stdClass(); + $record->courseid = $course->id; + $group = $this->getDataGenerator()->create_group($record); + + $notdeletedcount = $DB->count_records('event'); + + // Let's create a few events. + $siteevent = $this->create_calendar_event('site', $USER->id, 'site'); + $record = new stdClass(); + $record->courseid = $course->id; + $courseevent = $this->create_calendar_event('course', $USER->id, 'course', 2, time(), $record); + $userevent = $this->create_calendar_event('user', $USER->id); + $record = new stdClass(); + $record->courseid = $course->id; + $record->groupid = $group->id; + $groupevent = $this->create_calendar_event('group', $USER->id, 'group', 0, time(), $record); + + // Now lets try to delete stuff with proper rights. + $events = array( + array('eventid' => $siteevent->id, 'repeat' => 0), + array('eventid' => $courseevent->id, 'repeat' => 1), + array('eventid' => $userevent->id, 'repeat' => 0), + array('eventid' => $groupevent->id, 'repeat' => 0) + ); + core_calendar_external::delete_calendar_events($events); + + // Check to see if things were deleted properly. + $deletedcount = $DB->count_records('event'); + $this->assertEquals($notdeletedcount, $deletedcount); + + // Let's create a few events. + $siteevent = $this->create_calendar_event('site', $USER->id, 'site'); + $record = new stdClass(); + $record->courseid = $course->id; + $courseevent = $this->create_calendar_event('course', $USER->id, 'course', 3, time(), $record); + $userevent = $this->create_calendar_event('user', $USER->id); + $record = new stdClass(); + $record->courseid = $course->id; + $record->groupid = $group->id; + $groupevent = $this->create_calendar_event('group', $USER->id, 'group', 0, time(), $record); + + $this->setuser($user); + $sitecontext = context_system::instance(); + $coursecontext = context_course::instance($course->id); + $usercontext = context_user::instance($user->id); + $role = $DB->get_record('role', array('shortname' => 'student')); + $this->getDataGenerator()->enrol_user($user->id, $course->id, $role->id); + + // Remove all caps. + $this->unassignUserCapability('moodle/calendar:manageentries', $sitecontext->id, $role->id); + $this->unassignUserCapability('moodle/calendar:manageentries', $coursecontext->id, $role->id); + $this->unassignUserCapability('moodle/calendar:managegroupentries', $coursecontext->id, $role->id); + $this->unassignUserCapability('moodle/calendar:manageownentries', $usercontext->id, $role->id); + + // Assign proper caps and attempt delete. + $this->assignUserCapability('moodle/calendar:manageentries', $sitecontext->id, $role->id); + $events = array( + array('eventid' => $siteevent->id, 'repeat' => 0), + ); + core_calendar_external::delete_calendar_events($events); + $deletedcount = $DB->count_records('event'); + $count = $notdeletedcount+5; + $this->assertEquals($count, $deletedcount); + + $this->assignUserCapability('moodle/calendar:manageentries', $sitecontext->id, $role->id); + $events = array( + array('eventid' => $courseevent->id, 'repeat' => 0), + ); + core_calendar_external::delete_calendar_events($events); + $deletedcount = $DB->count_records('event'); + $count = $notdeletedcount+4; + $this->assertEquals($count, $deletedcount); + + $this->assignUserCapability('moodle/calendar:manageownentries', $usercontext->id, $role->id); + $events = array( + array('eventid' => $userevent->id, 'repeat' => 0), + ); + core_calendar_external::delete_calendar_events($events); + $deletedcount = $DB->count_records('event'); + $count = $notdeletedcount+3; + $this->assertEquals($count, $deletedcount); + + $this->assignUserCapability('moodle/calendar:managegroupentries', $coursecontext->id, $role->id); + $events = array( + array('eventid' => $groupevent->id, 'repeat' => 0), + ); + core_calendar_external::delete_calendar_events($events); + $deletedcount = $DB->count_records('event'); + $count = $notdeletedcount+2; + $this->assertEquals($count, $deletedcount); + + $notdeletedcount = $deletedcount; + + // Let us try deleting without caps. + + $siteevent = $this->create_calendar_event('site', $USER->id, 'site'); + $record = new stdClass(); + $record->courseid = $course->id; + $courseevent = $this->create_calendar_event('course', $USER->id, 'course', 3, time(), $record); + $userevent = $this->create_calendar_event('user', $USER->id); + $record = new stdClass(); + $record->courseid = $course->id; + $record->groupid = $group->id; + $groupevent = $this->create_calendar_event('group', $USER->id, 'group', 0, time(), $record); + + $this->setGuestUser(); + $this->setExpectedException('moodle_exception'); + $events = array( + array('eventid' => $siteevent->id, 'repeat' => 0), + array('eventid' => $courseevent->id, 'repeat' => 0), + array('eventid' => $userevent->id, 'repeat' => 0), + array('eventid' => $groupevent->id, 'repeat' => 0) + ); + core_calendar_external::delete_calendar_events($events); + } + +} \ No newline at end of file diff --git a/phpunit.xml.dist b/phpunit.xml.dist index d62dd73f82f..5325606eb98 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -69,6 +69,9 @@ cache/tests + + calendar/tests + -- 2.43.0