diff options
Diffstat (limited to 'modules/user')
-rw-r--r-- | modules/user/upload.test | 522 | ||||
-rw-r--r-- | modules/user/user.test | 205 |
2 files changed, 727 insertions, 0 deletions
diff --git a/modules/user/upload.test b/modules/user/upload.test new file mode 100644 index 000000000..6cb54ffad --- /dev/null +++ b/modules/user/upload.test @@ -0,0 +1,522 @@ +<?php +// $Id$ + +class UploadTestCase extends DrupalWebTestCase { + /** + * Implementation of getInfo(). + */ + function getInfo() { + return array( + 'name' => t('Upload functionality'), + 'description' => t('Check content uploaded to nodes.'), + 'group' => t('Upload'), + ); + } + + function setUp() { + parent::setUp('upload'); + } + + /** + * Create node; upload files to node; and edit, and delete uploads. + */ + function testNodeUpload() { + $admin_user = $this->drupalCreateUser(array('administer site configuration')); + $web_user = $this->drupalCreateUser(array('access content', 'edit any page content', 'upload files', 'view uploaded files')); + + $this->drupalLogin($admin_user); + + // Setup upload settings. + $edit = array(); + $edit['upload_list_default'] = '1'; // Yes. + $edit['upload_extensions_default'] = 'jpg jpeg gif png txt doc xls pdf ppt pps odt ods odp'; + $edit['upload_uploadsize_default'] = '1'; + $edit['upload_usersize_default'] = '1'; + $this->drupalPost('admin/settings/uploads', $edit, t('Save configuration')); + $this->assertText('The configuration options have been saved.', 'Upload setting saved.'); + + $this->drupalLogout(); + $this->drupalLogin($web_user); + + // Create a node and attempt to attach files. + $node = $this->drupalCreateNode(); + $text_files = $this->drupalGetTestFiles('text'); + $files = array(current($text_files)->filename, next($text_files)->filename); + + $this->uploadFile($node, $files[0]); + $this->uploadFile($node, $files[1]); + + // Check to see that uploaded file is listed and actually accessible. + $this->assertText(basename($files[0]), basename($files[0]) .' found on node.'); + $this->assertText(basename($files[1]), basename($files[1]) .' found on node.'); + + $this->checkUploadedFile(basename($files[0])); + $this->checkUploadedFile(basename($files[1])); + + // Fetch db record and use fid to rename and delete file. + $upload = db_fetch_object(db_query('SELECT fid, description FROM {upload} WHERE nid = %d', array($node->nid))); + if ($upload) { + // Rename file. + $edit = array(); + $edit['files['. $upload->fid .'][description]'] = $new_name = substr($upload->description, 1); + $this->drupalPost('node/'. $node->nid .'/edit', $edit, t('Save')); + $this->assertRaw(t('Page %title has been updated.', array('%title' => $node->title)), 'File renamed successfully.'); + + $this->assertText($new_name, $new_name .' found on node.'); + $this->assertNoText($upload->description, $upload->description .' not found on node.'); + + // Delete a file. + $edit = array(); + $edit['files['. $upload->fid .'][remove]'] = TRUE; + $this->drupalPost('node/'. $node->nid .'/edit', $edit, t('Save')); + $this->assertRaw(t('Page %title has been updated.', array('%title' => $node->title)), 'File deleted successfully.'); + + $this->assertNoText($new_name, $new_name .' not found on node.'); + $this->drupalGet(file_directory_path() .'/'. $upload->description); + $this->assertResponse(array(404), 'Uploaded '. $upload->description .' is not accessible.'); + } + else { + $this->fail('File upload record not found in database.'); + } + } + + /** + * Ensure the the file filter works correctly by attempting to upload a non-allowed file extension. + */ + function testFilesFilter() { + $admin_user = $this->drupalCreateUser(array('administer site configuration')); + $web_user = $this->drupalCreateUser(array('access content', 'edit any page content', 'upload files', 'view uploaded files')); + + $this->drupalLogin($admin_user); + + // Setup upload settings. + $settings = array(); + $settings['upload_list'] = '1'; // Yes. + $settings['upload_extensions'] = 'html'; + $settings['upload_uploadsize'] = '1'; + $settings['upload_usersize'] = '1'; + $this->setUploadSettings($settings, $this->getSimpletestRoleId($web_user)); + + $this->drupalLogin($web_user); + + $node = $this->drupalCreateNode(); + $text_files = $this->drupalGetTestFiles('text'); + $html_files = $this->drupalGetTestFiles('html'); + $files = array(current($text_files)->filename, current($html_files)->filename); + + // Attempt to upload .txt file when .test is only extension allowed. + $this->uploadFile($node, $files[0], FALSE); + $this->assertRaw(t('The selected file %name could not be uploaded. Only files with the following extensions are allowed: %files-allowed.', array('%name' => basename($files[0]), '%files-allowed' => $settings['upload_extensions'])), 'File '. $files[0] .' was not allowed to be uploaded'); + + // Attempt to upload .test file when .test is only extension allowed. + $this->uploadFile($node, $files[1]); + } + + /** + * Attempt to upload a file that is larger than the maxsize and see that it fails. + */ + function testLimit() { + $files = $this->drupalGetTestFiles('text', 1310720); // 1 MB. + $file = current($files)->filename; + + $admin_user = $this->drupalCreateUser(array('administer site configuration')); + $web_user = $this->drupalCreateUser(array('access content', 'edit any page content', 'upload files', 'view uploaded files')); + + $this->drupalLogin($admin_user); + + // Setup upload settings. + $settings = array(); + $settings['upload_list'] = '1'; // Yes. + $settings['upload_extensions'] = 'jpg jpeg gif png txt doc xls pdf ppt pps odt ods odp'; + $settings['upload_uploadsize'] = '0.5'; + $settings['upload_usersize'] = '1.5'; + $this->setUploadSettings($settings, $this->getSimpletestRoleId($web_user)); + + $this->drupalLogin($web_user); + + $node = $this->drupalCreateNode(); + + // Attempt to upload file which is bigger than the maximum size of 0.5 MB. + $this->uploadFile($node, $file, FALSE); + + $info = stat($file); + $filename = basename($file); + $filesize = format_size($info['size']); + $maxsize = format_size(parse_size(($settings['upload_uploadsize'] * 1024) .'KB')); // Won't parse decimals. + $this->assertRaw(t('The selected file %name could not be uploaded. The file is %filesize exceeding the maximum file size of %maxsize.', array('%name' => $filename, '%filesize' => $filesize, '%maxsize' => $maxsize)), t('File upload was blocked since it was larger than maxsize.')); + } + + function setUploadSettings($settings, $rid = NULL) { + $edit = array(); + foreach ($settings as $key => $value) { + $edit[$key .'_default'] = $value; + if ($rid !== NULL && $key != 'upload_list' && $key != 'upload_max_resolution') { + $edit[$key .'_'. $rid] = $value; + } + } + $this->drupalPost('admin/settings/uploads', $edit, 'Save configuration'); + $this->assertText('The configuration options have been saved.', 'Upload setting saved.'); + } + + /** + * Upload file to specified node. + * + * @param object $node Node object. + * @param string $filename Name of file to upload. + * @param boolean $assert Assert that the node was successfully updated. + */ + function uploadFile($node, $filename, $assert = TRUE) { + $edit = array(); + $edit['files[upload]'] = $filename; //edit-upload + $this->drupalPost('node/'. $node->nid .'/edit', $edit, t('Save')); + if ($assert) { + $this->assertRaw(t('Page %title has been updated.', array('%title' => $node->title)), 'File attached successfully.'); + } + } + + /** + * Check that uploaded file is accessible and verify the contents against the original. + * + * @param string $filename Name of file to verifiy. + */ + function checkUploadedFile($filename) { + $file = realpath(file_directory_path() .'/simpletest/'. $filename); + $this->drupalGet(file_directory_path() .'/'. $filename); + $this->assertResponse(array(200), 'Uploaded '. $filename .' is accessible.'); + $this->assertEqual(file_get_contents($file), $this->drupalGetContent(), 'Uploaded contents of '. $filename .' verified.'); + } + + /** + * Get the role id of the 'simpletest' role associated with a SimpleTest test user. + * + * @param object $user User object. + * @return interger SimpleTest role id. + */ + function getSimpletestRoleId($user) { + foreach ($user->roles as $rid => $role) { + if (strpos($role, 'simpletest') !== FALSE) { + return $rid; + } + } + 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"); + $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' => 'upload.test')), '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"); + $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); + + // 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 testWithGDinvalidSize() { + 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); + + // 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 not installed + * Picture has invalid size + * + * results: The image shouldn't be uploaded + */ + function testWithoutGDinvalidDimension() { + 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"); + $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); + + // 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 testWithoutGDinvalidSize() { + 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"); + $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 testPictureIsValid() { + 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'). "/tests/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); + + // 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); + } + } +} diff --git a/modules/user/user.test b/modules/user/user.test new file mode 100644 index 000000000..6428fa17e --- /dev/null +++ b/modules/user/user.test @@ -0,0 +1,205 @@ +<?php +// $Id$ + +class UserRegistrationTestCase extends DrupalWebTestCase { + /** + * Implementation of getInfo(). + */ + function getInfo() { + return array( + 'name' => t('User registration'), + 'description' => t('Registers a user, fails login, resets password, successfully logs in with the one time password, changes password, logs out, successfully logs in with the new password, visits profile page.'), + 'group' => t('User') + ); + } + + /** + * Registers a user, fails login, resets password, successfully logs in with the one time password, + * changes password, logs out, successfully logs in with the new password, visits profile page. + * + * Assumes that the profile module is disabled. + */ + function testUserRegistration() { + // Set user registration to "Visitors can create accounts and no administrator approval is required." + variable_set('user_register', 1); + + $edit = array(); + $edit['name'] = $name = $this->randomName(); + $edit['mail'] = $mail = $edit['name'] .'@example.com'; + $this->drupalPost('user/register', $edit, t('Create new account')); + $this->assertText(t('Your password and further instructions have been sent to your e-mail address.'), t('User registered successfully.')); + + // Check database for created user. + $user = user_load($edit); + $this->assertTrue($user, t('User found in database.')); + $this->assertTrue($user->uid > 0, t('User has valid user id.')); + + // Check user fields. + $this->assertEqual($user->name, $name, t('Username matches.')); + $this->assertEqual($user->mail, $mail, t('E-mail address matches.')); + $this->assertEqual($user->mode, 0, t('Correct mode field.')); + $this->assertEqual($user->sort, 0, t('Correct sort field.')); + $this->assertEqual($user->threshold, 0, t('Correct treshold field.')); + $this->assertEqual($user->theme, '', t('Correct theme field.')); + $this->assertEqual($user->signature, '', t('Correct signature field.')); + $this->assertTrue(($user->created > time() - 20 ), 0, t('Correct creation time.')); + $this->assertEqual($user->status, variable_get('user_register', 1) == 1 ? 1 : 0, t('Correct status field.')); + $this->assertEqual($user->timezone, variable_get('date_default_timezone', NULL), t('Correct timezone field.')); + $this->assertEqual($user->language, '', t('Correct language field.')); + $this->assertEqual($user->picture, '', t('Correct picture field.')); + $this->assertEqual($user->init, $mail, t('Correct init field.')); + + // Attempt to login with incorrect password. + $edit = array(); + $edit['name'] = $name; + $edit['pass'] = 'foo'; + $this->drupalPost('user', $edit, t('Log in')); + $this->assertText(t('Sorry, unrecognized username or password. Have you forgotten your password?'), t('Invalid login attempt failed.')); + + // Login using password reset page. + $url = user_pass_reset_url($user); + sleep(1); // TODO Find better way. + $this->drupalGet($url); + $this->assertText(t('This login can be used only once.'), t('Login can be used only once.')); + + $this->drupalPost(NULL, NULL, t('Log in')); + $this->assertText(t('You have just used your one-time login link. It is no longer necessary to use this link to login. Please change your password.'), t('This link is no longer valid.')); + + // Change user password. + $new_pass = user_password(); + $edit = array(); + $edit['pass[pass1]'] = $new_pass; + $edit['pass[pass2]'] = $new_pass; + $this->drupalPost(NULL, $edit, t('Save')); + $this->assertText(t('The changes have been saved.'), t('Password changed to @password', array('@password' => $new_pass))); + + // Make sure password changes are present in database. + require_once variable_get('password_inc', './includes/password.inc'); + + $user = user_load(array('uid' => $user->uid)); + $this->assertTrue(user_check_password($new_pass, $user), t('Correct password in database.')); + + // Logout of user account. + $this->clickLink(t('Log out')); + $this->assertNoText($user->name, t('Logged out.')); + + // Login user. + $edit = array(); + $edit['name'] = $user->name; + $edit['pass'] = $new_pass; + $this->drupalPost('user', $edit, t('Log in')); + $this->assertText(t('Log out'), t('Logged in.')); + + $this->assertText($user->name, t('[logged in] Username found.')); + $this->assertNoText(t('Sorry. Unrecognized username or password.'), t('[logged in] No message for unrecognized username or password.')); + $this->assertNoText(t('User login'), t('[logged in] No user login form present.')); + + $this->drupalGet('user'); + $this->assertText($user->name, t('[user auth] Not login page.')); + $this->assertText(t('View'), t('[user auth] Found view tab on the profile page.')); + $this->assertText(t('Edit'), t('[user auth] Found edit tab on the profile page.')); + } +} + + +class UserValidationTestCase extends DrupalWebTestCase { + /** + * Implementation of getInfo(). + */ + function getInfo() { + return array( + 'name' => t('Username/e-mail validation'), + 'description' => t('Verify that username/email validity checks behave as designed.'), + 'group' => t('User') + ); + } + + // Username validation. + function testMinLengthName() { + $name = ''; + $result = user_validate_name($name); + $this->assertNotNull($result, 'Excessively short username'); + } + + function testValidCharsName() { + $name = 'ab/'; + $result = user_validate_name($name); + $this->assertNotNull($result, 'Invalid chars in username'); + } + + function testMaxLengthName() { + $name = str_repeat('a', 61); + $result = user_validate_name($name); + $this->assertNotNull($result, 'Excessively long username'); + } + + function testValidName() { + $name = 'abc'; + $result = user_validate_name($name); + $this->assertNull($result, 'Valid username'); + } + + // Mail validation. + function testMinLengthMail() { + $name = ''; + $result = user_validate_mail($name); + $this->assertNotNull($result, 'Empty mail'); + } + + function testInValidMail() { + $name = 'abc'; + $result = user_validate_mail($name); + $this->assertNotNull($result, 'Invalid mail'); + } + + function testValidMail() { + $name = 'absdsdsdc@dsdsde.com'; + $result = user_validate_mail($name); + $this->assertNull($result, 'Valid mail'); + } +} + + +class UserDeleteTestCase extends DrupalWebTestCase { + /** + * Implementation of getInfo(). + */ + function getInfo() { + return array( + 'name' => t('User delete'), + 'description' => t('Registers a user and deletes it.'), + 'group' => t('User') + ); + } + + /** + * Registers a user and deletes it. + */ + function testUserRegistration() { + // Set user registration to "Visitors can create accounts and no administrator approval is required." + variable_set('user_register', 1); + + $edit = array(); + $edit['name'] = $this->randomName(); + $edit['mail'] = $edit['name'] .'@example.com'; + $this->drupalPost('user/register', $edit, t('Create new account')); + $this->assertText(t('Your password and further instructions have been sent to your e-mail address.'), t('User registered successfully.')); + + $user = user_load($edit); + + // Create admin user to delete registered user. + $admin_user = $this->drupalCreateUser(array('administer users')); + $this->drupalLogin($admin_user); + + // Delete user. + $this->drupalGet('user/'. $user->uid .'/edit'); + $this->drupalPost(NULL, NULL, t('Delete')); + $this->assertRaw(t('Are you sure you want to delete the account %name?', array('%name' => $user->name)), t('[confirm deletion] Asks for confirmation.')); + $this->assertText(t('All submissions made by this user will be attributed to the anonymous account. This action cannot be undone.'), t('[confirm deletion] Inform that all submissions will be attributed to anonymouse account.')); + + // Confirm deletion. + $this->drupalPost(NULL, NULL, t('Delete')); + $this->assertRaw(t('%name has been deleted.', array('%name' => $user->name)), t('User deleted')); + $this->assertFalse(user_load($edit), t('User is not found in the database')); + } +} |