aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Alexander <admin@m-a-styles.de>2015-07-16 00:21:23 +0200
committerMarc Alexander <admin@m-a-styles.de>2015-09-09 08:28:05 +0200
commit845233fc626b0d5e6d9e61039fde8e31b4dd28aa (patch)
treeb035bcba8d133e726914a30a37854c2bfff4852a
parenta09c6d1fb760151b1a6c654b597b4578c3136be1 (diff)
downloadforums-845233fc626b0d5e6d9e61039fde8e31b4dd28aa.tar
forums-845233fc626b0d5e6d9e61039fde8e31b4dd28aa.tar.gz
forums-845233fc626b0d5e6d9e61039fde8e31b4dd28aa.tar.bz2
forums-845233fc626b0d5e6d9e61039fde8e31b4dd28aa.tar.xz
forums-845233fc626b0d5e6d9e61039fde8e31b4dd28aa.zip
[ticket/13904] Improve test coverage and use constants instead of magic numbers
PHPBB3-13904
-rw-r--r--phpBB/phpbb/files/upload.php30
-rw-r--r--tests/files/upload_test.php23
-rw-r--r--tests/upload/fileupload_test.php19
3 files changed, 61 insertions, 11 deletions
diff --git a/phpBB/phpbb/files/upload.php b/phpBB/phpbb/files/upload.php
index ceb7e1a741..234eb69735 100644
--- a/phpBB/phpbb/files/upload.php
+++ b/phpBB/phpbb/files/upload.php
@@ -210,7 +210,7 @@ class upload
{
switch ($errorcode)
{
- case 1:
+ case UPLOAD_ERR_INI_SIZE:
$max_filesize = @ini_get('upload_max_filesize');
$unit = 'MB';
@@ -223,29 +223,37 @@ class upload
}
$error = (empty($max_filesize)) ? $this->language->lang($this->error_prefix . 'PHP_SIZE_NA') : $this->language->lang($this->error_prefix . 'PHP_SIZE_OVERRUN', $max_filesize, $this->language->lang($unit));
- break;
+ break;
- case 2:
+ case UPLOAD_ERR_FORM_SIZE:
$max_filesize = get_formatted_filesize($this->max_filesize, false);
$error = $this->language->lang($this->error_prefix . 'WRONG_FILESIZE', $max_filesize['value'], $max_filesize['unit']);
- break;
+ break;
- case 3:
+ case UPLOAD_ERR_PARTIAL:
$error = $this->language->lang($this->error_prefix . 'PARTIAL_UPLOAD');
- break;
+ break;
- case 4:
+ case UPLOAD_ERR_NO_FILE:
$error = $this->language->lang($this->error_prefix . 'NOT_UPLOADED');
- break;
+ break;
- case 6:
+ case UPLOAD_ERR_NO_TMP_DIR:
$error = 'Temporary folder could not be found. Please check your PHP installation.';
- break;
+ break;
+
+ case UPLOAD_ERR_CANT_WRITE:
+ $error = 'Can’t write to temporary folder.';
+ break;
+
+ case UPLOAD_ERR_EXTENSION:
+ $error = 'A PHP extension has stopped the file upload.';
+ break;
default:
$error = false;
- break;
+ break;
}
return $error;
diff --git a/tests/files/upload_test.php b/tests/files/upload_test.php
index 4323f6cc92..057bb8a4f2 100644
--- a/tests/files/upload_test.php
+++ b/tests/files/upload_test.php
@@ -93,4 +93,27 @@ class phpbb_files_upload_test extends phpbb_test_case
$upload = new \phpbb\files\upload($this->filesystem, $this->factory, $this->language, $this->request, $this->phpbb_root_path);
$this->assertFalse($upload->is_valid('foobar'));
}
+
+ public function data_internal_error()
+ {
+ return array(
+ array(UPLOAD_ERR_INI_SIZE, 'PHP_SIZE_OVERRUN'),
+ array(UPLOAD_ERR_FORM_SIZE, 'WRONG_FILESIZE'),
+ array(UPLOAD_ERR_PARTIAL, 'PARTIAL_UPLOAD'),
+ array(UPLOAD_ERR_NO_FILE, 'NOT_UPLOADED'),
+ array(UPLOAD_ERR_NO_TMP_DIR, 'Temporary folder could not be found. Please check your PHP installation.'),
+ array(UPLOAD_ERR_CANT_WRITE, 'Can’t write to temporary folder.'),
+ array(UPLOAD_ERR_EXTENSION, 'A PHP extension has stopped the file upload.'),
+ array(9, false),
+ );
+ }
+
+ /**
+ * @dataProvider data_internal_error
+ */
+ public function test_assign_internal_error($error_code, $expected)
+ {
+ $upload = new \phpbb\files\upload($this->filesystem, $this->factory, $this->language, $this->request, $this->phpbb_root_path);
+ $this->assertSame($expected, $upload->assign_internal_error($error_code));
+ }
}
diff --git a/tests/upload/fileupload_test.php b/tests/upload/fileupload_test.php
index 7a84b34473..ab42a4a153 100644
--- a/tests/upload/fileupload_test.php
+++ b/tests/upload/fileupload_test.php
@@ -119,6 +119,25 @@ class phpbb_fileupload_test extends phpbb_test_case
$this->assertEquals('DISALLOWED_EXTENSION', $file->error[0]);
}
+ public function test_common_checks_disallowed_content()
+ {
+ $upload = new \phpbb\files\upload($this->filesystem, $this->factory, $this->language, $this->request, $this->phpbb_root_path);
+ $upload->set_allowed_extensions(array('jpg'))
+ ->set_max_filesize(1000);
+ $file = new \phpbb\files\filespec($this->filesystem, $this->language, $this->phpbb_root_path);
+ $file->set_upload_ary(array(
+ 'size' => 50,
+ 'tmp_name' => dirname(__FILE__) . '/fixture/disallowed',
+ 'name' => 'disallowed.jpg',
+ 'type' => 'image/jpg'
+ ))
+ ->set_upload_namespace($upload);
+ file_put_contents(dirname(__FILE__) . '/fixture/disallowed', '<body>' . file_get_contents(dirname(__FILE__) . '/fixture/jpg'));
+ $upload->common_checks($file);
+ $this->assertEquals('DISALLOWED_CONTENT', $file->error[0]);
+ unlink(dirname(__FILE__) . '/fixture/disallowed');
+ }
+
public function test_common_checks_invalid_filename()
{
$upload = new \phpbb\files\upload($this->filesystem, $this->factory, $this->language, $this->request, $this->phpbb_root_path);