summaryrefslogtreecommitdiff
path: root/modules/user
diff options
context:
space:
mode:
Diffstat (limited to 'modules/user')
-rw-r--r--modules/user/upload.test522
-rw-r--r--modules/user/user.test205
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'));
+ }
+}