[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/files/tests/ -> externallib_test.php (source)

   1  <?php
   2  // This file is part of Moodle - http://moodle.org/
   3  //
   4  // Moodle is free software: you can redistribute it and/or modify
   5  // it under the terms of the GNU General Public License as published by
   6  // the Free Software Foundation, either version 3 of the License, or
   7  // (at your option) any later version.
   8  //
   9  // Moodle is distributed in the hope that it will be useful,
  10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  // GNU General Public License for more details.
  13  //
  14  // You should have received a copy of the GNU General Public License
  15  // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
  16  
  17  
  18  /**
  19   * PHPunit tests for external files API.
  20   *
  21   * @package    core_files
  22   * @category   external
  23   * @copyright  2013 Ankit Agarwal
  24   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  25   * @since Moodle 2.6
  26   */
  27  defined('MOODLE_INTERNAL') || die();
  28  
  29  global $CFG;
  30  
  31  require_once($CFG->dirroot . '/webservice/tests/helpers.php');
  32  require_once($CFG->dirroot . '/files/externallib.php');
  33  
  34  class core_files_externallib_testcase extends advanced_testcase {
  35  
  36      /*
  37       * Test core_files_external::upload().
  38       */
  39  
  40      public function test_upload() {
  41          global $USER;
  42  
  43          $this->resetAfterTest();
  44          $this->setAdminUser();
  45          $context = context_user::instance($USER->id);
  46          $contextid = $context->id;
  47          $component = "user";
  48          $filearea = "draft";
  49          $itemid = 0;
  50          $filepath = "/";
  51          $filename = "Simple.txt";
  52          $filecontent = base64_encode("Let us create a nice simple file");
  53          $contextlevel = null;
  54          $instanceid = null;
  55          $browser = get_file_browser();
  56  
  57          // Make sure no file exists.
  58          $file = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, $filename);
  59          $this->assertEmpty($file);
  60  
  61          // Call the api to create a file.
  62          $fileinfo = core_files_external::upload($contextid, $component, $filearea, $itemid, $filepath,
  63                  $filename, $filecontent, $contextlevel, $instanceid);
  64          // Get the created draft item id.
  65          $itemid = $fileinfo['itemid'];
  66  
  67          // Make sure the file was created.
  68          $file = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, $filename);
  69          $this->assertNotEmpty($file);
  70  
  71          // Make sure no file exists.
  72          $filename = "Simple2.txt";
  73          $file = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, $filename);
  74          $this->assertEmpty($file);
  75  
  76          // Call the api to create a file.
  77          $fileinfo = core_files_external::upload($contextid, $component, $filearea, $itemid,
  78                  $filepath, $filename, $filecontent, $contextlevel, $instanceid);
  79          $file = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, $filename);
  80          $this->assertNotEmpty($file);
  81  
  82          // Let us try creating a file using contextlevel and instance id.
  83          $filename = "Simple5.txt";
  84          $contextid = 0;
  85          $contextlevel = "user";
  86          $instanceid = $USER->id;
  87          $file = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, $filename);
  88          $this->assertEmpty($file);
  89          $fileinfo = core_files_external::upload($contextid, $component, $filearea, $itemid, $filepath,
  90                  $filename, $filecontent, $contextlevel, $instanceid);
  91          $file = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, $filename);
  92          $this->assertNotEmpty($file);
  93  
  94          // Make sure the same file cannot be created again.
  95          $this->setExpectedException("moodle_exception");
  96          core_files_external::upload($contextid, $component, $filearea, $itemid, $filepath,
  97                  $filename, $filecontent, $contextlevel, $instanceid);
  98      }
  99  
 100      /*
 101       * Make sure only user component is allowed in  core_files_external::upload().
 102       */
 103      public function test_upload_param_component() {
 104          global $USER;
 105  
 106          $this->resetAfterTest();
 107          $this->setAdminUser();
 108          $context = context_user::instance($USER->id);
 109          $contextid = $context->id;
 110          $component = "backup";
 111          $filearea = "private";
 112          $itemid = 0;
 113          $filepath = "/";
 114          $filename = "Simple3.txt";
 115          $filecontent = base64_encode("Let us create a nice simple file");
 116          $contextlevel = null;
 117          $instanceid = null;
 118  
 119          // Make sure exception is thrown.
 120          $this->setExpectedException("coding_exception");
 121          core_files_external::upload($contextid, $component, $filearea, $itemid,
 122                  $filepath, $filename, $filecontent, $contextlevel, $instanceid);
 123      }
 124  
 125      /*
 126       * Make sure only private or draft areas are allowed in  core_files_external::upload().
 127       */
 128      public function test_upload_param_area() {
 129          global $USER;
 130  
 131          $this->resetAfterTest();
 132          $this->setAdminUser();
 133          $context = context_user::instance($USER->id);
 134          $contextid = $context->id;
 135          $component = "user";
 136          $filearea = "draft";
 137          $itemid = file_get_unused_draft_itemid();
 138          $filepath = "/";
 139          $filename = "Simple4.txt";
 140          $filecontent = base64_encode("Let us create a nice simple file");
 141          $contextlevel = null;
 142          $instanceid = null;
 143  
 144          // Make sure the file is created.
 145          @core_files_external::upload($contextid, $component, $filearea, $itemid, $filepath, $filename, $filecontent);
 146          $browser = get_file_browser();
 147          $file = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, $filename);
 148          $this->assertNotEmpty($file);
 149      }
 150  
 151      /*
 152       * Make sure core_files_external::upload() works without new parameters.
 153       */
 154      public function test_upload_without_new_param() {
 155          global $USER;
 156  
 157          $this->resetAfterTest();
 158          $this->setAdminUser();
 159          $context = context_user::instance($USER->id);
 160          $contextid = $context->id;
 161          $component = "user";
 162          $filearea = "private";
 163          $itemid = 0;
 164          $filepath = "/";
 165          $filename = "Simple4.txt";
 166          $filecontent = base64_encode("Let us create a nice simple file");
 167  
 168          @core_files_external::upload($contextid, $component, $filearea, $itemid, $filepath, $filename, $filecontent);
 169  
 170          // Assert debugging called (deprecation warning).
 171          $this->assertDebuggingCalled();
 172  
 173          // Make sure the file is created.
 174          $browser = get_file_browser();
 175          $file = $browser->get_file_info($context, $component, $filearea, $itemid, $filepath, $filename);
 176          $this->assertNotEmpty($file);
 177      }
 178  
 179      /**
 180       * Test getting a list of files with and without a context ID.
 181       */
 182      public function test_get_files() {
 183          global $USER, $DB;
 184  
 185          $this->resetAfterTest();
 186  
 187          // Set the current user to be the administrator.
 188          $this->setAdminUser();
 189          $USER->email = '[email protected]';
 190  
 191          // Create a course.
 192          $course = $this->getDataGenerator()->create_course();
 193          $record = new stdClass();
 194          $record->course = $course->id;
 195          $record->name = "Mod data upload test";
 196          $record->intro = "Some intro of some sort";
 197  
 198          // Create a database module.
 199          $module = $this->getDataGenerator()->create_module('data', $record);
 200  
 201          // Create a new field in the database activity.
 202          $field = data_get_field_new('file', $module);
 203          // Add more detail about the field.
 204          $fielddetail = new stdClass();
 205          $fielddetail->d = $module->id;
 206          $fielddetail->mode = 'add';
 207          $fielddetail->type = 'file';
 208          $fielddetail->sesskey = sesskey();
 209          $fielddetail->name = 'Upload file';
 210          $fielddetail->description = 'Some description';
 211          $fielddetail->param3 = '0';
 212  
 213          $field->define_field($fielddetail);
 214          $field->insert_field();
 215          $recordid = data_add_record($module);
 216  
 217          // File information for the database module record.
 218          $datacontent = array();
 219          $datacontent['fieldid'] = $field->field->id;
 220          $datacontent['recordid'] = $recordid;
 221          $datacontent['content'] = 'Simple4.txt';
 222  
 223          // Insert the information about the file.
 224          $contentid = $DB->insert_record('data_content', $datacontent);
 225          // Required information for uploading a file.
 226          $context = context_module::instance($module->cmid);
 227          $usercontext = context_user::instance($USER->id);
 228          $component = 'mod_data';
 229          $filearea = 'content';
 230          $itemid = $contentid;
 231          $filename = $datacontent['content'];
 232          $filecontent = base64_encode("Let us create a nice simple file.");
 233  
 234          $filerecord = array();
 235          $filerecord['contextid'] = $context->id;
 236          $filerecord['component'] = $component;
 237          $filerecord['filearea'] = $filearea;
 238          $filerecord['itemid'] = $itemid;
 239          $filerecord['filepath'] = '/';
 240          $filerecord['filename'] = $filename;
 241  
 242          // Create an area to upload the file.
 243          $fs = get_file_storage();
 244          // Create a file from the string that we made earlier.
 245          $file = $fs->create_file_from_string($filerecord, $filecontent);
 246          $timemodified = $file->get_timemodified();
 247  
 248          // Use the web service function to return the information about the file that we just uploaded.
 249          // The first time is with a valid context ID.
 250          $filename = '';
 251          $testfilelisting = core_files_external::get_files($context->id, $component, $filearea, $itemid, '/', $filename);
 252  
 253          // With the information that we have provided we should get an object exactly like the one below.
 254          $coursecontext = context_course::instance($course->id);
 255          $testdata = array();
 256          $testdata['parents'] = array();
 257          $testdata['parents']['0'] = array('contextid' => 1,
 258                                            'component' => null,
 259                                            'filearea' => null,
 260                                            'itemid' => null,
 261                                            'filepath' => null,
 262                                            'filename' => 'System');
 263          $testdata['parents']['1'] = array('contextid' => 3,
 264                                            'component' => null,
 265                                            'filearea' => null,
 266                                            'itemid' => null,
 267                                            'filepath' => null,
 268                                            'filename' => 'Miscellaneous');
 269          $testdata['parents']['2'] = array('contextid' => $coursecontext->id,
 270                                            'component' => null,
 271                                            'filearea' => null,
 272                                            'itemid' => null,
 273                                            'filepath' => null,
 274                                            'filename' => 'Test course 1');
 275          $testdata['parents']['3'] = array('contextid' => $context->id,
 276                                            'component' => null,
 277                                            'filearea' => null,
 278                                            'itemid' => null,
 279                                            'filepath' => null,
 280                                            'filename' => 'Mod data upload test (Database)');
 281          $testdata['parents']['4'] = array('contextid' => $context->id,
 282                                            'component' => 'mod_data',
 283                                            'filearea' => 'content',
 284                                            'itemid' => null,
 285                                            'filepath' => null,
 286                                            'filename' => 'Fields');
 287          $testdata['files'] = array();
 288          $testdata['files']['0'] = array('contextid' => $context->id,
 289                                          'component' => 'mod_data',
 290                                          'filearea' => 'content',
 291                                          'itemid' => $itemid,
 292                                          'filepath' => '/',
 293                                          'filename' => 'Simple4.txt',
 294                                          'url' => 'http://www.example.com/moodle/pluginfile.php/'.$context->id.'/mod_data/content/'.$itemid.'/Simple4.txt',
 295                                          'isdir' => false,
 296                                          'timemodified' => $timemodified);
 297          // Make sure that they are the same.
 298          $this->assertEquals($testdata, $testfilelisting);
 299  
 300          // Try again but without the context. Minus one signals the function to use other variables to obtain the context.
 301          $nocontext = -1;
 302          $modified = 0;
 303          // Context level and instance ID are used to determine what the context is.
 304          $contextlevel = 'module';
 305          $instanceid = $module->cmid;
 306          $testfilelisting = core_files_external::get_files($nocontext, $component, $filearea, $itemid, '/', $filename, $modified, $contextlevel, $instanceid);
 307          $this->assertEquals($testfilelisting, $testdata);
 308      }
 309  }


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1