/**
  * 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();
 }
예제 #2
0
 /**
  * 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();
 }
예제 #4
0
 /**
  * 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}");
 }
예제 #5
0
 /**
  * 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);
 }