Commit 5c9d4b9c authored by Dries's avatar Dries

- Patch #253506 by Daniel, flobruit and catch: made the upload tests work.

parent 4f1af19d
......@@ -200,6 +200,9 @@ class FilterTestCase extends DrupalWebTestCase {
*/
function setUp() {
parent::setUp();
$admin_user = $this->drupalCreateUser(array('administer filters', 'create page content'));
$this->drupalLogin($admin_user);
}
/**
......@@ -333,9 +336,6 @@ END;
}
function createFormat($filter) {
$admin_user = $this->drupalCreateUser(array('administer filters, create page content'));
$this->drupalLogin($admin_user);
$edit = array(
'name' => $this->randomName(),
'roles[2]' => TRUE,
......
......@@ -552,29 +552,11 @@ function drupalPost($path, $edit, $submit, $tamper = FALSE) {
// We post only if we managed to handle every field in edit and the
// submit button matches.
if (!$edit && $submit_matches) {
// This part is not pretty. There is very little I can do.
if ($upload) {
foreach ($post as &$value) {
if (strlen($value) > 0 && $value[0] == '@') {
$this->fail(t("Can't upload and post a value starting with @"));
return FALSE;
}
}
foreach ($upload as $key => $file) {
$post[$key] = '@' . realpath($file);
}
}
else {
$post_array = $post;
$post = array();
foreach ($post_array as $key => $value) {
// Whether this needs to be urlencode or rawurlencode, is not
// quite clear, but this seems to be the better choice.
$post[] = urlencode($key) . '=' . urlencode($value);
}
$post = implode('&', $post);
// cURL will handle file upload for us if asked kindly.
foreach ($upload as $key => $file) {
$post[$key] = '@' . realpath($file);
}
$out = $this->curlExec(array(CURLOPT_URL => $action, CURLOPT_POSTFIELDS => $post, CURLOPT_POST => TRUE));
$out = $this->curlExec(array(CURLOPT_URL => $action, CURLOPT_POST => TRUE, CURLOPT_POSTFIELDS => $post));
// Ensure that any changes to variables in the other thread are picked up.
$this->refreshVariables();
return $out;
......
This diff is collapsed.
......@@ -205,6 +205,213 @@ class UserDeleteTestCase extends DrupalWebTestCase {
}
}
class UserPictureTestCase extends DrupalWebTestCase {
protected $user;
protected $_directory_test;
function getInfo() {
return array(
'name' => t('Upload user picture'),
'description' => t('Assure that dimension check, extension check and image scaling work as designed.'),
'group' => t('User')
);
}
function setUp() {
parent::setUp();
// Enable user pictures.
variable_set('user_pictures', 1);
$this->user = $this->drupalCreateUser();
// Test if directories specified in settings exist in filesystem.
$file_dir = file_directory_path();
$file_check = file_check_directory($file_dir, FILE_CREATE_DIRECTORY, 'file_directory_path');
$picture_dir = variable_get('user_picture_path', 'pictures');
$picture_path = $file_dir .'/'.$picture_dir;
$pic_check = file_check_directory($picture_path, FILE_CREATE_DIRECTORY, 'user_picture_path');
$this->_directory_test = is_writable($picture_path);
$this->assertTrue($this->_directory_test, "The directory $picture_path doesn't exist or is not writable. Further tests won't be made.");
}
function testNoPicture() {
$this->drupalLogin($this->user);
// Try to upload a file that is not an image for the user picture.
$not_an_image = current($this->drupalGetTestFiles('html'));
$this->saveUserPicture($not_an_image);
$this->assertRaw(t('Only JPEG, PNG and GIF images are allowed.'), t('Non-image files are not accepted.'));
}
/**
* Do the test:
* GD Toolkit is installed
* Picture has invalid dimension
*
* results: The image should be uploaded because ImageGDToolkit resizes the picture
*/
function testWithGDinvalidDimension() {
if ($this->_directory_test)
if (image_get_toolkit()) {
$this->drupalLogin($this->user);
$image = current($this->drupalGetTestFiles('image'));
$info = image_get_info($image->filename);
// set new variables;
$test_size = floor(filesize($image->filename) / 1000) + 1;
$test_dim = ($info['width'] - 10) . 'x' . ($info['height'] - 10);
variable_set('user_picture_dimensions', $test_dim);
variable_set('user_picture_file_size', $test_size);
$pic_path = $this->saveUserPicture($image);
// check if image is displayed in user's profile page
$this->assertRaw(file_create_url($pic_path), "Image is displayed in user's profile page");
// check if file is located in proper directory
$this->assertTrue(is_file($pic_path), "File is located in proper directory");
}
}
/**
* Do the test:
* GD Toolkit is installed
* Picture has invalid size
*
* results: The image should be uploaded because ImageGDToolkit resizes the picture
*/
function testWithGDinvalidSize() {
if ($this->_directory_test)
if (image_get_toolkit()) {
$this->drupalLogin($this->user);
$image = current($this->drupalGetTestFiles('image'));
$info = image_get_info($image->filename);
// Set new variables.
$test_dim = ($info['width'] + 10) . 'x' . ($info['height'] + 10);
$test_size = filesize($image->filename);
variable_set('user_picture_dimensions', $test_dim);
variable_set('user_picture_file_size', $test_size);
$picture_path = $this->saveUserPicture($image);
$this->assertText(t('The changes have been saved.'));
// Check if image is displayed in user's profile page.
$this->assertRaw(file_create_url($picture_url), t("Image is displayed in user's profile page"));
// Check if file is located in proper directory.
$this->assertTrue(is_file($picture_path), t('File is located in proper directory'));
}
}
/**
* Do the test:
* GD Toolkit is not installed
* Picture has invalid size
*
* results: The image shouldn't be uploaded
*/
function testWithoutGDinvalidDimension() {
if ($this->_directory_test)
if (!image_get_toolkit()) {
$this->drupalLogin($this->user);
$image = current($this->drupalGetTestFiles('image'));
$info = image_get_info($image->filename);
// Set new variables.
$test_size = floor(filesize($image->filename) / 1000) + 1;
$test_dim = ($info['width'] - 10) . 'x' . ($info['height'] - 10);
variable_set('user_picture_dimensions', $test_dim);
variable_set('user_picture_file_size', $test_size);
$pic_path = $this->saveUserPicture($image);
$text = t('The uploaded image is too large; the maximum dimensions are %dimensions pixels.', array('%dimensions' => variable_get('user_picture_dimensions', '85x85')));
$this->assertText($text, t('Checking response on invalid image (dimensions).'));
// check if file is not uploaded
$this->assertFalse(is_file($pic_path), t('File is not uploaded'));
}
}
/**
* Do the test:
* GD Toolkit is not installed
* Picture has invalid size
*
* results: The image shouldn't be uploaded
*/
function testWithoutGDinvalidSize() {
if ($this->_directory_test)
if (!image_get_toolkit()) {
$this->drupalLogin($this->user);
$image = current($this->drupalGetTestFiles('image'));
$image->filename = realpath("modules/tests/image-2.jpg");
$info = image_get_info($image->filename);
// invalid size
// restore one and set another
$test_dim = ($info['width'] + 10) . 'x' . ($info['height'] + 10);
$test_size = floor(filesize($image->filename) / 1000) - 1;
variable_set('user_picture_dimensions', $test_dim);
variable_set('user_picture_file_size', $test_size);
$pic_path = $this->saveUserPicture($image);
$text = t('The uploaded image is too large; the maximum file size is %size kB.', array('%size' => variable_get('user_picture_file_size', '30')));
$this->assertText($text, t('Checking response on invalid image size.'));
// check if file is not uploaded
$this->assertFalse(is_file($pic_path), t('File is not uploaded.'));
}
}
/**
* Do the test:
* Picture is valid (proper size and dimension)
*
* results: The image should be uploaded
*/
function testPictureIsValid() {
if ($this->_directory_test) {
$this->drupalLogin($this->user);
$image = current($this->drupalGetTestFiles('image'));
$info = image_get_info($image->filename);
// valid size & dimensions
// restore one and set another
$test_dim = ($info['width'] + 10) . 'x' . ($info['height'] + 10);
$test_size = floor(filesize($image->filename) / 1000) + 1;
variable_set('user_picture_dimensions', $test_dim);
variable_set('user_picture_file_size', $test_size);
$pic_path = $this->saveUserPicture($image);
// check if image is displayed in user's profile page
$this->assertRaw($pic_path, t("Image is displayed in user's profile page"));
// check if file is located in proper directory
$this->assertTrue(is_file($pic_path), t('File is located in proper directory'));
}
}
function saveUserPicture($image) {
$edit = array('files[picture_upload]' => realpath($image->filename));
$this->drupalPost('user/' . $this->user->uid.'/edit', $edit, t('Save'));
$picture_dir = variable_get('user_picture_path', 'pictures');
$pic_path = file_directory_path() .'/'.$picture_dir .'/picture-'.$this->user->uid.'.jpg';
return $pic_path;
}
}
class UserPermissionsTestCase extends DrupalWebTestCase {
protected $admin_user;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment