$tmpFileName, 'type' => 'text/plaintext', 'size' => filesize($tmpFilePath), 'tmp_name' => $tmpFilePath, 'extension' => 'txt', 'error' => UPLOAD_ERR_OK, ); $v = new UploadTest_Validator(); // test upload into default folder $u1 = new Upload(); $u1->setValidator($v); $u1->load($tmpFile); $file1 = $u1->getFile(); $this->assertTrue( file_exists($file1->getFullPath()), 'File upload to standard directory in /assets' ); $this->assertTrue( (strpos($file1->getFullPath(),Director::baseFolder() . '/assets/' . Upload::$uploads_folder) !== false), 'File upload to standard directory in /assets' ); $file1->delete(); // test upload into custom folder $customFolder = 'UploadTest_testUpload'; $u2 = new Upload(); $u2->load($tmpFile, $customFolder); $file2 = $u2->getFile(); $this->assertTrue( file_exists($file2->getFullPath()), 'File upload to custom directory in /assets' ); $this->assertTrue( (strpos($file2->getFullPath(),Director::baseFolder() . '/assets/' . $customFolder) !== false), 'File upload to custom directory in /assets' ); $file2->delete(); unlink($tmpFilePath); } function testAllowedFilesize() { // @todo } function testAllowedExtensions() { // @todo } } class UploadTest_Validator extends Upload_Validator implements TestOnly { /** * Looser check validation that doesn't do is_upload_file() * checks as we're faking a POST request that PHP didn't generate * itself. * * @return boolean */ public function validate() { $pathInfo = pathinfo($this->tmpFile['name']); // filesize validation if(!$this->isValidSize()) { $this->errors[] = sprintf( _t( 'File.TOOLARGE', 'Filesize is too large, maximum %s allowed.', PR_MEDIUM, 'Argument 1: Filesize (e.g. 1MB)' ), File::format_size($this->getAllowedMaxFileSize($pathInfo['extension'])) ); return false; } // extension validation if(!$this->isValidExtension()) { $this->errors[] = sprintf( _t( 'File.INVALIDEXTENSION', 'Extension is not allowed (valid: %s)', PR_MEDIUM, 'Argument 1: Comma-separated list of valid extensions' ), implode(',', $this->allowedExtensions) ); return false; } return true; } }