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

merge-requests/26/head
Dries Buytaert 2008-06-06 10:36:45 +00:00
parent 4f1af19d10
commit 5c9d4b9c97
4 changed files with 214 additions and 372 deletions

View File

@ -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,

View File

@ -552,29 +552,11 @@ class DrupalWebTestCase extends UnitTestCase {
// 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);
}
// cURL will handle file upload for us if asked kindly.
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);
}
$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;

View File

@ -201,350 +201,3 @@ class UploadTestCase extends DrupalWebTestCase {
return NULL;
}
}
class UploadPictureTestCase extends DrupalWebTestCase {
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('Upload')
);
}
/*
* Test if directories specified in settings exist in filesystem
*/
function testDirectories() {
// test if filepath is proper
$file_dir = file_directory_path();
$picture_dir = variable_get('user_picture_path', 'pictures');
$file_check = file_check_directory($file_dir, FILE_CREATE_DIRECTORY, 'file_directory_path');
$picture_path = $file_dir . '/' . $picture_dir;
$pic_check = file_check_directory($picture_path, FILE_CREATE_DIRECTORY, 'user_picture_path');
// check directories
//$this->assertTrue($file_check,"The directory $file_dir doesn't exist or cannot be created.");
//$this->assertTrue($pic_check,"The directory $picture_path doesn't exist or cannot be created.");
$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() {
$old_pic_set = variable_get('user_pictures', 0);
variable_set('user_pictures', 1);
/* Prepare a user to do the stuff */
$user = $this->drupalCreateUser(array('access content'));
$this->drupalLogin($user);
// not a image
//$img_path = realpath(drupal_get_path('module', 'simpletest'). "/tests/functional/upload.test");
$img_path = realpath(drupal_get_path('module', 'simpletest'). "/files/html-1.txt");
$edit = array('files[picture_upload]' => $img_path);
$this->drupalPost('user/' . $user->uid. '/edit', $edit, t('Save'));
$this->assertRaw(t('The selected file %file could not be uploaded. Only JPEG, PNG and GIF images are allowed.', array('%file' => basename($img_path))), 'The uploaded file was not an image.');
variable_set('user_pictures', $old_pic_set);
// do we have to check users roles?
// delete test user and roles
}
/*
* Do one test if ImageGDToolkit is installed
*/
/*
* 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()) {
// PREPARE:
$old_pic_set = variable_get('user_pictures', 0);
variable_set('user_pictures', 1);
/* Prepare a user to do the stuff */
$user = $this->drupalCreateUser(array('access content'));
$this->drupalLogin($user);
// changing actual setting;
$old_dim = variable_get('user_picture_dimensions', '85x85');
$old_size = variable_get('user_picture_file_size', '30');
//$img_path = realpath(drupal_get_path('module', 'simpletest'). "/tests/files/image-2.jpg");
$img_path = realpath(drupal_get_path('module', 'simpletest'). "/files/image-2.jpg");
$info = image_get_info($img_path);
// set new variables;
$test_size = floor(filesize($img_path) / 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);
// Create pictures folder
$file_dir = 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');
// TEST:
$edit = array('files[picture_upload]' => $img_path);
$this->drupalPost('user/' . $user->uid. '/edit', $edit, t('Save'));
$picture_dir = variable_get('user_picture_path', 'pictures');
$picture = $picture_dir . '/picture-' . $user->uid. '.jpg';
// get full url to the user's image
$picture_url = file_create_url($picture);
$picture_path = file_create_path($picture);
// check if image is displayed in user's profile page
$this->assertRaw($picture_url, "Image is displayed in user's profile page");
// check if file is located in proper directory
$this->assertTrue(is_file($picture_path), "File is located in proper directory");
// RESTORING:
variable_set('user_picture_file_size', $old_size);
variable_set('user_picture_dimensions', $old_dim);
variable_set('user_pictures', $old_pic_set);
}
}
/*
* Do the test:
* GD Toolkit is installed
* Picture has invalid size
*
* results: The image should be uploaded because ImageGDToolkit resizes the picture
*/
function tstWithGDinvalidSize() {
if ($this->_directory_test)
if (image_get_toolkit()) {
// PREPARE:
$old_pic_set = variable_get('user_pictures', 0);
variable_set('user_pictures', 1);
/* Prepare a user to do the stuff */
$user = $this->drupalCreateUser(array('access content'));
$this->drupalLogin($user);
// changing actual setting;
$old_dim = variable_get('user_picture_dimensions', '85x85');
$old_size = variable_get('user_picture_file_size', '30');
$files = $this->drupalGetTestFiles('image');
$file = current($files);
$img_path = realpath($file->filename);
$info = image_get_info($img_path);
// set new variables;
$test_dim = ($info['width'] + 10) . 'x' . ($info['height'] + 10);
$test_size = filesize($img_path);
variable_set('user_picture_dimensions', $test_dim);
variable_set('user_picture_file_size', $test_size);
// Create pictures folder
$file_dir = 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');
// TEST:
$edit = array('files[picture_upload]' => $img_path);
$this->drupalPost('user/' . $user->uid. '/edit', $edit, t('Save'));
$picture_dir = variable_get('user_picture_path', 'pictures');
$picture = $picture_dir . '/picture-' . $user->uid. '.png';
// get full url to the user's image
$picture_url = file_create_url($picture);
$picture_path = file_create_path($picture);
// check if image is displayed in user's profile page
$this->assertRaw($picture_url, "Image is displayed in user's profile page");
// check if file is located in proper directory
$this->assertTrue(is_file($picture_path), "File is located in proper directory");
// RESTORING:
variable_set('user_picture_file_size', $old_size);
variable_set('user_picture_dimensions', $old_dim);
variable_set('user_pictures', $old_pic_set);
}
}
/*
* Do the test:
* GD Toolkit is not installed
* Picture has invalid size
*
* results: The image shouldn't be uploaded
*/
function tstWithoutGDinvalidDimension() {
if ($this->_directory_test)
if (!image_get_toolkit()) {
// PREPARE:
$old_pic_set = variable_get('user_pictures', 0);
variable_set('user_pictures', 1);
/* Prepare a user to do the stuff */
$user = $this->drupalCreateUser(array('access content'));
$this->drupalLogin($user);
// changing actual setting;
$old_dim = variable_get('user_picture_dimensions', '85x85');
$old_size = variable_get('user_picture_file_size', '30');
$img_path = realpath(drupal_get_path('module', 'simpletest'). "/files/image-2.jpg");
$info = image_get_info($img_path);
// set new variables;
$test_size = floor(filesize($img_path) / 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);
// Create pictures folder
$file_dir = 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');
// TEST:
$edit = array('picture' => $img_path);
$this->drupalPost('user/' . $user->uid. '/edit', $edit, t('Save'));
$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, 'Checking response on invalid image (dimensions).');
// check if file is not uploaded
$file_dir = variable_get('file_directory_path', 'files');
$picture_dir = variable_get('user_picture_path', 'pictures');
$pic_path = $file_dir . '/' . $picture_dir . '/picture-' . $user->uid. '.jpg';
$this->assertFalse(is_file($pic_path), "File is not uploaded");
// restore variables;
variable_set('user_picture_file_size', $old_size);
variable_set('user_picture_dimensions', $old_dim);
variable_set('user_pictures', $old_pic_set);
}
}
/*
* Do the test:
* GD Toolkit is not installed
* Picture has invalid size
*
* results: The image shouldn't be uploaded
*/
function tstWithoutGDinvalidSize() {
if ($this->_directory_test)
if (!image_get_toolkit()) {
// PREPARE:
$old_pic_set = variable_get('user_pictures', 0);
variable_set('user_pictures', 1);
/* Prepare a user to do the stuff */
$user = $this->drupalCreateUser(array('access content'));
$this->drupalLogin($user);
// changing actual setting;
$old_dim = variable_get('user_picture_dimensions', '85x85');
$old_size = variable_get('user_picture_file_size', '30');
//$img_path = realpath("modules/tests/image-2.jpg");
$img_path = realpath(drupal_get_path('module', 'simpletest'). "/files/image-2.jpg");
$info = image_get_info($img_path);
// invalid size
// restore one and set another
$test_dim = ($info['width'] + 10) . 'x' . ($info['height'] + 10);
$test_size = floor(filesize($img_path) / 1000) - 1;
variable_set('user_picture_dimensions', $test_dim);
variable_set('user_picture_file_size', $test_size);
$edit = array('picture' => $img_path);
$this->drupalPost('user/' . $user->uid. '/edit', $edit, t('Save'));
$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, 'Checking response on invalid image size.');
// check if file is not uploaded
$file_dir = variable_get('file_directory_path', 'files');
$picture_dir = variable_get('user_picture_path', 'pictures');
$pic_path = $file_dir . '/' . $picture_dir . '/picture-' . $user->uid. '.jpg';
$this->assertFalse(is_file($pic_path), "File is not uploaded");
// restore variables;
variable_set('user_picture_file_size', $old_size);
variable_set('user_picture_dimensions', $old_dim);
variable_set('user_pictures', $old_pic_set);
}
}
/*
* Do the test:
* Picture is valid (proper size and dimension)
*
* results: The image should be uploaded
*/
function tstPictureIsValid() {
if ($this->_directory_test) {
// PREPARE:
$old_pic_set = variable_get('user_pictures', 0);
variable_set('user_pictures', 1);
/* Prepare a user to do the stuff */
$user = $this->drupalCreateUser(array('access content'));
$this->drupalLogin($user);
// changing actual setting;
$old_dim = variable_get('user_picture_dimensions', '85x85');
$old_size = variable_get('user_picture_file_size', '30');
$img_path = realpath(drupal_get_path('module', 'simpletest'). "/files/image-2.jpg");
$info = image_get_info($img_path);
// valid size & dimensions
// restore one and set another
$test_dim = ($info['width'] + 10) . 'x' . ($info['height'] + 10);
$test_size = floor(filesize($img_path) / 1000) + 1;
variable_set('user_picture_dimensions', $test_dim);
variable_set('user_picture_file_size', $test_size);
// Create pictures folder
$file_dir = 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');
// TEST:
$edit = array('files[picture_upload]' => $img_path);
$this->drupalPost('user/' . $user->uid. '/edit', $edit, t('Save'));
$picture_dir = variable_get('user_picture_path', 'pictures');
$pic_path = file_directory_path() . '/' . $picture_dir . '/picture-' . $user->uid. '.jpg';
// get full url to the user's image
$picture = file_create_url($pic_path);
// check if image is displayed in user's profile page
$content = $this->drupalGetContent();
$this->assertTrue(strpos($content, $picture), "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");
// RESTORING:
variable_set('user_picture_file_size', $old_size);
variable_set('user_picture_dimensions', $old_dim);
variable_set('user_pictures', $old_pic_set);
// DELETING UPLOADED PIC
file_delete($pic_path);
}
}
}

View File

@ -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;