[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
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 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |