/** * Test can_delete_instance */ public function test_can_delete_instance() { global $DB, $CFG; require_once $CFG->dirroot . '/enrol/uaims/lib.php'; $this->resetAfterTest(); // Create users to enrol. $user1 = $this->getDataGenerator()->create_user(); $user2 = $this->getDataGenerator()->create_user(); // User to use in IMS enrol. $user3 = $this->getDataGenerator()->create_user(array('idnumber' => 'testuser3')); $xmldoc = <<<DOC <?xml version="1.0" encoding="utf-8"?> <enterprise xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <group recstatus="1"> <sourcedid> <source>AIS</source> <id>IDNUMBER</id> </sourcedid> <grouptype> <typevalue>Course</typevalue> </grouptype> <description> <short>IDNUMBER</short> <long>Long description</long> </description> <org /> <timeframe> <begin>1420441200</begin> <end>1431237600</end> </timeframe> <enrollcontrol /> <relationship> <sourcedid> <source>AIS</source> <id>UOFAB-TEST</id> </sourcedid> </relationship> <extension> <settings> <setting>visible</setting> <value>0</value> </settings> <settings> <setting>format</setting> <value>topics</value> </settings> </extension></group> <membership> <sourcedid> <source>AIS</source> <id>IDNUMBER</id> </sourcedid> <member> <idtype>1</idtype> <sourcedid> <source>AIS</source> <id>testuser3</id> </sourcedid> <role recstatus="1" roletype="05"> <status>1</status> </role> </member> </membership></enterprise> DOC; $category = new stdClass(); $category->name = "test"; $category->description = "UOFAB-TEST"; $category->idnumber = "UOFAB-TEST"; $category->timemodified = time(); $DB->insert_record('course_categories', $category); $enrol = new enrol_uaims_plugin(); // Make sure the course does not already exist. $course = $DB->get_record('course', array('idnumber' => "IDNUMBER"), $fields = '*', $strictness = IGNORE_MISSING); $this->assertEquals(false, $course); // Process the IMS Doc. $enrol->process_imsdoc($xmldoc); $course = $DB->get_record('course', array('idnumber' => "IDNUMBER"), $fields = '*', $strictness = MUST_EXIST); $manplugin = enrol_get_plugin('manual'); $uaimsplugin = enrol_get_plugin('uaims'); // Get the manager and teacher roles. $managerrole = $DB->get_record('role', array('shortname' => 'manager')); $this->assertNotEmpty($managerrole); $teacherrole = $DB->get_record('role', array('shortname' => 'teacher')); $this->assertNotEmpty($teacherrole); $maninstance1 = $DB->get_record('enrol', array('courseid' => $course->id, 'enrol' => 'manual'), '*', MUST_EXIST); $uaimsinstance1 = $DB->get_record('enrol', array('courseid' => $course->id, 'enrol' => 'uaims'), '*', MUST_EXIST); // Manually enrol users since the IMS plugin incorrectly assigns roles. CC does this as a separate process. $manplugin->enrol_user($maninstance1, $user1->id, $managerrole->id); $manplugin->enrol_user($maninstance1, $user2->id, $teacherrole->id); // Test that managers can delete the UAIM enrol method. $this->setUser($user1); $this->assertEquals(true, $uaimsplugin->can_delete_instance($uaimsinstance1)); // Test that teachers can NOT delete the UAIM enrol method. $this->setUser($user2); $this->assertEquals(false, $uaimsplugin->can_delete_instance($uaimsinstance1)); }
/** * Test the case in which the course is created outside uaims (doesn't create a corresponding eclass_course_management * entry) then process_imsdoc is then called with rec=1 (new course), this should instead update the existing course. */ public function test_process_course_created_outside_uaims_and_have_no_eclass_course_management_entry_ims_rec_1() { global $DB, $CFG; $this->resetAfterTest(true); $xmldoc = <<<DOC <?xml version="1.0" encoding="utf-8"?> <enterprise xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <group recstatus="1"> <sourcedid> <source>AIS</source> <id>IDNUMBER</id> </sourcedid> <grouptype> <typevalue>Course</typevalue> </grouptype> <description> <short>IDNUMBER</short> <long>Long description</long> </description> <org /> <timeframe> <begin>1420106400</begin> <end>1420106410</end> </timeframe> <enrollcontrol /> <relationship> <sourcedid> <source>AIS</source> <id>UOFAB-TEST</id> </sourcedid> </relationship> <extension> <settings> <setting>visible</setting> <value>0</value> </settings> <settings> <setting>format</setting> <value>topics</value> </settings> </extension> </group></enterprise> DOC; // Dummy category. $category = new stdClass(); $category->name = "test"; $category->description = "UOFAB-TEST"; $category->idnumber = "UOFAB-TEST"; $category->timemodified = time(); $category->id = $DB->insert_record('course_categories', $category); // Dummy course. $course = new stdClass(); $course->category = $category->id; $course->sortorder = 0; $course->fullname = "Long description"; $course->shortname = "IDNUMBER-HARPER-SEAL-IS-THE-DOGEST-SPECIES"; $course->idnumber = "IDNUMBER"; $course->summary = "summaryformat"; $course->showgrades = 1; $course->format = 'topics'; $course->visible = 0; $course->timecreated = time(); $course->startdate = time(); $course->sortorder = 0; $course->timemodified = 0; $course->id = $DB->insert_record('course', $course); // Process missing end date. $enrol = new enrol_uaims_plugin(); $enrol->process_imsdoc($xmldoc); // Confirm that a corresponding eclass_course_management entry is created. $coursemanagementexist = $DB->get_record('eclass_course_management', array('courseid' => $course->id), $fields = 'id', $strictness = IGNORE_MISSING) != false; // Although rec=1 means insert, this will default to update in the case of // course create outside uaims. Thus, other values in $xmldoc should update the course. $updatedcourse = $DB->get_record('course', array('id' => $course->id)); $this->assertEquals('IDNUMBER', $updatedcourse->shortname); $this->assertEquals('Long description', $updatedcourse->fullname); $this->assertEquals('IDNUMBER', $updatedcourse->idnumber); $this->assertTrue($coursemanagementexist); }
public function test_enrol_uaims_cron() { global $DB, $CFG; $this->resetAfterTest(true); // Run the cron on whatever data is in the database. // This checks that cron won't crash if the table is missing. $eup = new enrol_uaims_plugin(); $eup->set_config('enableautocourseopenclose', 1); // Output buffering is disabled in phpunit runs. ini_set('output_buffering', 'On'); ob_start(); $eup->cron(); ob_end_clean(); ini_set('output_buffering', 'Off'); $dbtables = $DB->get_tables(false); $this->assertEquals(true, array_key_exists('eclass_course_management', $dbtables)); $ecmt = new eclass_course_manager_test(); $eergisteren = time() - 2 * 86400; $gisteren = time() - 86400; $morgen = time() + 86400; $overmorgen = time() + 2 * 86400; // Course names are appended with Start, Now, and End, in chronological order. $coursense = $ecmt->create_course_vis_start_end(0, $morgen, $overmorgen); $coursesne = $ecmt->create_course_vis_start_end(0, $gisteren, $morgen); $coursesen = $ecmt->create_course_vis_start_end(0, $eergisteren, $gisteren); $coursenes = $ecmt->create_course_vis_start_end(0, $overmorgen, $morgen); $courseens = $ecmt->create_course_vis_start_end(1, $morgen, $gisteren); $courseesn = $ecmt->create_course_vis_start_end(0, $gisteren, $eergisteren); $courseopendone = $ecmt->create_course_vis_start_end(0, $gisteren, $morgen, time() - 86000); $courseclosedone = $ecmt->create_course_vis_start_end(1, $eergisteren, $gisteren, null, time() - 86000); // Disable auto open/close. Visibility and times should stay unchanged. $eup->set_config('enableautocourseopenclose', 0); // Output buffering is disabled in phpunit runs. ini_set('output_buffering', 'On'); ob_start(); $eup->cron(); ob_end_clean(); ini_set('output_buffering', 'Off'); $ecmt->check_courseid_vis_opened_closed($coursense->id, 0, true, true); $ecmt->check_courseid_vis_opened_closed($coursesne->id, 0, true, true); $ecmt->check_courseid_vis_opened_closed($coursesen->id, 0, true, true); $ecmt->check_courseid_vis_opened_closed($coursenes->id, 0, true, true); $ecmt->check_courseid_vis_opened_closed($courseens->id, 1, true, true); $ecmt->check_courseid_vis_opened_closed($courseesn->id, 0, true, true); $ecmt->check_courseid_vis_opened_closed($courseopendone->id, 0, false, true); $ecmt->check_courseid_vis_opened_closed($courseclosedone->id, 1, true, false); // Enable auto open/close. Visibility and times should change selectively. $eup->set_config('enableautocourseopenclose', 1); // Output buffering is disabled in phpunit runs. ini_set('output_buffering', 'On'); ob_start(); $eup->cron(); ob_end_clean(); ini_set('output_buffering', 'Off'); $ecmt->check_courseid_vis_opened_closed($coursense->id, 0, true, true); $ecmt->check_courseid_vis_opened_closed($coursesne->id, 1, false, true); $ecmt->check_courseid_vis_opened_closed($coursesen->id, 0, false, false); $ecmt->check_courseid_vis_opened_closed($coursenes->id, 0, true, true); $ecmt->check_courseid_vis_opened_closed($courseens->id, 0, true, false); $ecmt->check_courseid_vis_opened_closed($courseesn->id, 0, false, false); $ecmt->check_courseid_vis_opened_closed($courseopendone->id, 0, false, true); $ecmt->check_courseid_vis_opened_closed($courseclosedone->id, 1, false, false); }
// This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * * * @version $Id$ * @copyright 2011 */ require_once dirname(dirname(dirname(__FILE__))) . '/config.php'; $site = get_site(); global $CFG, $DB; require_once 'lib.php'; $enrol = new enrol_uaims_plugin(); if (md5($_POST['imsdoc'] . $_POST['timestamp'] . $CFG->uaimssecret) == $_POST['mac']) { $enrol->process_imsdoc($_POST['imsdoc']); } else { echo 'Invalid Mac.'; }