/** * Helper function that runs the user import for a sample enrolment * * @param array $data Import data to use */ private function run_enrolment_import($data) { global $CFG; $file = get_plugin_directory('dhimport', 'version1elis') . '/version1elis.class.php'; require_once $file; $provider = new rlipimport_version1elis_importprovider_mockenrolment($data); $importplugin = new rlip_importplugin_version1elis($provider); $importplugin->run(); }
/** * Helper function that runs the userset import for a sample userset * * @param array $extradata Extra fields to set for the new userset * @param boolean $usedefaultdata If true, use the default userset data, * along with any data specifically provided */ private function run_core_userset_import($extradata, $usedefaultdata = true) { global $CFG; $file = get_plugin_directory('dhimport', 'version1elis') . '/version1elis.class.php'; require_once $file; if ($usedefaultdata) { $data = $this->get_core_userset_data(); } else { $data = array(); } foreach ($extradata as $key => $value) { $data[$key] = $value; } $provider = new rlipimport_version1elis_importprovider_mockuserset($data); $importplugin = new rlip_importplugin_version1elis($provider); $importplugin->run(); }
/** * Helper function that runs the user import for a sample user * * @param array $data Import data to use */ private function run_user_import($data, $usedefaultdata = true) { global $CFG; $file = get_plugin_directory('dhimport', 'version1elis') . '/version1elis.class.php'; require_once $file; $provider = new rlipimport_version1elis_importprovider_mockuser($data); $importplugin = new rlip_importplugin_version1elis($provider); $importplugin->run(); }
/** * User import test cases * * @uses $DB * @dataProvider dataproviderfortests */ public function test_elis_user_import($action, $userdata, $setupindex, $elisexists, $mdlexists) { global $CFG, $DB; $file = get_plugin_directory('dhimport', 'version1elis') . '/version1elis.class.php'; require_once $file; $CFG->siteguest = ''; $importdata = array('action' => $action); foreach ($userdata as $key => $value) { $importdata[$key] = $value; } try { if ($setupindex != NO_TEST_SETUP) { $provider = new rlipimport_version1elis_importprovider_mockuser($this->testsetupdata[$setupindex]); $importplugin = new rlip_importplugin_version1elis($provider); @$importplugin->run(); } $mdluserdata = $this->map_moodle_user($userdata); ob_start(); var_dump($mdluserdata); $mdluserdatadump = ob_get_contents(); ob_end_clean(); $mdluserid = $DB->get_field('user', 'id', $mdluserdata); $provider = new rlipimport_version1elis_importprovider_mockuser($importdata); $importplugin = new rlip_importplugin_version1elis($provider); @$importplugin->run(); } catch (Exception $e) { mtrace("\nException in test_elis_user_import(): " . $e->getMessage() . "\n"); } $elisuserdata = $this->map_elis_user($userdata, $elisexists); ob_start(); var_dump($elisuserdata); $tmp = ob_get_contents(); ob_end_clean(); ob_start(); var_dump($DB->get_records(user::TABLE)); $crlmuser = ob_get_contents(); ob_end_clean(); ob_start(); var_dump($DB->get_records('user')); $mdluser = ob_get_contents(); ob_end_clean(); $this->assertEquals($elisexists, $DB->record_exists(user::TABLE, $elisuserdata), "ELIS user assertion: elis_user_data; " . user::TABLE . " = {$tmp} ; {$crlmuser}"); if ($mdlexists === true) { $mdluserdata['deleted'] = 0; } else { if ($mdlexists === MDL_USER_DELETED) { $mdlexists = true; $mdluserdata = array('id' => $mdluserid, 'deleted' => 1); } } $this->assertEquals($mdlexists, $DB->record_exists('user', $mdluserdata), "Moodle user assertion: mdl_user_data; mdl_user = {$mdluserdatadump} ; {$mdluser}"); }
/** * User import test cases * * @uses $DB * @dataProvider dataproviderfortests */ public function test_elis_entity_import($action, $context, $entitydata, $setuparray, $entityexists) { global $CFG, $DB; if (empty($context)) { $this->markTestSkipped("\nPHPunit test coding error, 'context' NOT set - skipping!\n"); return; } $file = get_plugin_directory('dhimport', 'version1elis') . '/version1elis.class.php'; require_once $file; set_config('enable_curriculum_expiration', true, 'local_elisprogram'); $importdata = array('action' => $action, 'context' => $context); foreach ($entitydata as $key => $value) { $importdata[$key] = $value; } try { foreach ($setuparray as $index) { $provider = new rlipimport_version1elis_importprovider_mockcourse($this->testsetupdata[$index]); $importplugin = new rlip_importplugin_version1elis($provider); @$importplugin->run(); } $provider = new rlipimport_version1elis_importprovider_mockcourse($importdata); $importplugin = new rlip_importplugin_version1elis($provider); $importplugin->run(); } catch (Exception $e) { mtrace("\nException in test_elis_entity_import(): " . $e->getMessage() . "\n"); } // Call any mapping functions to transform IP column to DB field. $mapfcn = 'map_' . $context; if (method_exists($this, $mapfcn)) { $entitydata = $this->{$mapfcn}($entitydata, $entityexists); } ob_start(); var_dump($entitydata); $tmp = ob_get_contents(); ob_end_clean(); $crlmtable = $this->contexttotable[$context]; ob_start(); var_dump($DB->get_records($crlmtable)); $crlmtabledata = ob_get_contents(); ob_end_clean(); $this->assertEquals($entityexists, $DB->record_exists($crlmtable, $entitydata), "ELIS entity assertion: [mapped]entity_data ; {$crlmtable} = {$tmp} ; {$crlmtabledata}"); }
/** * Test custom mapping summaries. * * @dataProvider custommappinganddataprovider * @param string $entity The entity type for import ('user', 'course', 'enrolment') * @param array $mapping The custom field mapping * @param array $data */ public function test_custom_mapping_summaries($entity, $mapping, $data) { global $DB; // Setup the custom mapping values. rlipimport_version1elis_save_mapping($entity, array_keys($mapping), $mapping); // Setup the class name fo the mock import provider we need. $mockprovider = 'rlipimport_version1elis_importprovider_mock' . $entity; $provider = new $mockprovider($data); $importplugin = new rlip_importplugin_version1elis($provider); $importplugin->run(); // Attempt to handle all of the specific messages in as general a way as possible. $requiredfields = array(); $messageend = 'Please fix the import file and re-upload it.'; // Testing a custom action mapping value. if (isset($mapping['action'])) { $message = 'Import file memoryfile was not processed because it is missing the following required column: ' . $mapping['action'] . '.'; } else { if ($entity == 'user' && $data['action'] == 'create') { // echo "\n", 'user create', "\n"; // User create is only a subset of the required fields. $message = 'Import file memoryfile was not processed because one of the following columns is required but all are unspecified: '; $possiblefields = array('username', 'email', 'idnumber', 'user_username', 'user_email', 'user_idnumber'); foreach ($possiblefields as $possiblefield) { $requiredfields[] = !empty($mapping[$possiblefield]) ? $mapping[$possiblefield] : $possiblefield; } } else { if ($entity == 'course') { // Course actions will only initially display a message if the context field is missing. $message = 'Import file memoryfile was not processed because it is missing the following required column: ' . $mapping['context'] . '.'; } else { if ($entity == 'enrolment') { // Enrolment actions will only initially display a message if one of the three required fields is missing. // (at least one of the three is required). $message = 'Import file memoryfile was not processed because one of the following columns is required but all are unspecified: '; $possiblefields = array('user_username', 'user_email', 'user_idnumber'); foreach ($possiblefields as $possiblefield) { $requiredfields[] = !empty($mapping[$possiblefield]) ? $mapping[$possiblefield] : $possiblefield; } } else { // Handle generic cases below. if (count($mapping) > 1) { // echo 'Generic: count($mapping) > 1', "\n"; $message = 'Import file memoryfile was not processed because one of the following columns is required but all are unspecified: '; $requiredfields = $mappings; // TBD } else { // We're importing data where some fields are requires in an OR condition, so we just need to replace that. // Single field value with it's custom mapped representation. $message = 'Import file memoryfile was not processed because one of the following columns is required but all are unspecified: '; $possiblefields = array('user_username', 'user_email', 'user_idnumber', 'username', 'email', 'idnumber'); foreach ($possiblefields as $possiblefield) { $requiredfields[] = !empty($mapping[$possiblefield]) ? $mapping[$possiblefield] : $possiblefield; } } } } } } $logs = $DB->get_records(RLIP_LOG_TABLE); // var_dump($logs); $log = end($logs); // echo 'Required: '; // var_dump($requiredfields); $realmessage = $log->statusmessage; $this->assertEquals(0, strpos($realmessage, $message)); $fieldstart = strlen($message); $fieldend = strpos($realmessage, $messageend); $this->assertGreaterThanOrEqual($fieldstart, $fieldend); $fieldsection = substr($realmessage, $fieldstart - 1, $fieldend - $fieldstart); $fieldspresent = explode(', ', trim($fieldsection, ' .')); // echo 'Present: '; // var_dump($fieldspresent); foreach ($requiredfields as $requiredfield) { $this->assertTrue(in_array($requiredfield, $fieldspresent)); } }
/** * Validate that MANUAL import obeys maxruntime * @dataProvider fileprovider */ public function test_manualimportobeysmaxruntime($filename, $entity) { global $CFG, $DB; require_once $CFG->dirroot . '/local/datahub/tests/other/csv_delay.class.php'; $file = get_plugin_directory('dhimport', 'version1elis') . '/version1elis.class.php'; require_once $file; // Set the log file name to a fixed value. $filepath = $CFG->dataroot; // MUST copy file to temp area 'cause it'll be deleted after import. $testfile = dirname(__FILE__) . '/fixtures/' . $filename; $tempdir = $CFG->dataroot . '/local_datahub_phpunit/'; $file = $tempdir . $filename; @mkdir($tempdir, 0777, true); @copy($testfile, $file); $provider = new rlipimport_version1elis_importprovider_manual_delay($file, $entity); // Run the import. $importplugin = new rlip_importplugin_version1elis($provider, true); ob_start(); $result = $importplugin->run(0, 0, 1); // Maxruntime 1 sec. ob_end_clean(); $this->assertNotNull($result); // Get most recent record. $records = $DB->get_records(RLIP_LOG_TABLE, null, 'starttime DESC'); foreach ($records as $record) { $ui = $record->statusmessage; break; } $expectedui = "/.*Failed importing all lines from import file.*due to time limit exceeded.*/"; $this->assertRegExp($expectedui, $ui); // Test that the filename is also included in the error message. // The mock provider returns 'filename' as the filename. $expectedui = "/.*filename*/"; $this->assertRegExp($expectedui, $ui); // Clean-up data file & tempdir. @unlink($file); @rmdir($tempdir); }