View source
<?php
class UserRegistrationTest extends DrupalTestCase {
function get_info() {
return array(
'name' => t('User registration'),
'desc' => 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' => 'User tests',
);
}
function testUserRegistration() {
$this
->drupalVariableSet('user_register', 1);
$this
->drupalModuleDisable('profile');
$name = $this
->randomName();
$mail = "{$name}@example.com";
$edit = array(
'name' => $name,
'mail' => $mail,
);
$this
->drupalPost('user/register', $edit, 'Create new account');
$this
->assertText(t('Your password and further instructions have been sent to your e-mail address.'), 'Your password and further instructions ... found');
$this
->assertNoText(t('The name %name has been denied access.', array(
'%name' => $name,
)), 'not denied access');
$user = user_load($edit);
$this
->assertTrue(isset($user->uid), 'user->uid set');
$this
->assertTrue($user->uid > 0, 'uid > 0');
if (!isset($user->uid) || $user->uid == 0) {
return FALSE;
}
$this
->assertEqual($user->name, $name, 'Checking name of user');
$this
->assertEqual($user->mail, $mail, 'Checking e-mail address');
$this
->assertEqual($user->mode, 0, 'Checking mode field');
$this
->assertEqual($user->sort, 0, 'Checking sort field');
$this
->assertEqual($user->threshold, 0, 'Checking treshold field');
$this
->assertEqual($user->theme, '', 'Checking theme field');
$this
->assertEqual($user->signature, '', 'Checking signature field');
$this
->assertTrue($user->created > time() - 20, 0, 'Checking creation time.');
$this
->assertEqual($user->status, variable_get('user_register', 1) == 1 ? 1 : 0, 'Checking status field');
$this
->assertEqual($user->timezone, variable_get('date_default_timezone', NULL), 'Checking timezone field');
$this
->assertEqual($user->language, '', 'Checking language field');
$this
->assertEqual($user->picture, '', 'Check picture field');
$this
->assertEqual($user->init, $mail, 'Check init field');
$login_edit = array(
'name' => $name,
'pass' => 'foo',
);
$this
->drupalPost('user', $login_edit, 'Log in');
$this
->assertText(t('Sorry, unrecognized username or password. Have you forgotten your password?'), 'Test for failed Login');
$url = user_pass_reset_url($user);
sleep(1);
$this->_browser
->get($url);
$this
->assertText(t('This login can be used only once.'), "Check for 'used only once' notice");
$this->_browser
->clickSubmit(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.'), "Check for one time login notice after clicking Login button.");
$new_pass = user_password();
$this
->assertTrue($this->_browser
->setField('pass[pass1]', $new_pass), 'Pass1 field set.');
$this
->assertTrue($this->_browser
->setField('pass[pass2]', $new_pass), 'Pass2 field set.');
$this->_browser
->clickSubmit(t('Save'));
$this
->assertText(t('The changes have been saved.'), "Changed password to '{$new_pass}'");
$user = user_load(array(
'uid' => $user->uid,
));
$this
->assertEqual($user->pass, md5($new_pass), 'Correct password in database');
$this
->clickLink('Log out');
$this
->assertNoText($user->name, 'Logged out');
$login_edit['pass'] = $new_pass;
$this
->drupalPost('user', $login_edit, 'Log in');
$pname = $user->name;
$this
->assertText($pname, 'Logged in (name found)');
$this
->assertNoText(t('Sorry. Unrecognized username or password.'), 'Logged in (no message for unrecognized username or password)');
$this
->assertNoText(t('User login'), 'Logged in (no user login form present)');
$this
->assertNoUnwantedRaw(t('The username %name has been blocked.', array(
'%name' => $pname,
)), 'Not blocked');
$this
->assertNoUnwantedRaw(t('The name %name is a reserved username.', array(
'%name' => $pname,
)), 'Access granted');
$this->_browser
->get(url('user'), array(
'absolute' => TRUE,
));
$this
->assertText($pname, 'user as auth lands on the user profile');
$this
->assertText(t('View'), 'View tab on the profile page');
$this
->assertText(t('Edit'), 'Edit tab on the profile page');
db_query('DELETE FROM {users} WHERE uid = %d', $user->uid);
db_query('DELETE FROM {users_roles} WHERE uid = %d', $user->uid);
db_query('DELETE FROM {authmap} WHERE uid = %d', $user->uid);
}
}
class UserValidationTest extends DrupalTestCase {
function get_info() {
return array(
'name' => 'Username/email validation',
'desc' => 'Verify that username/email validity checks behave as designed.',
'group' => 'User tests',
);
}
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');
}
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 UserAccessTest extends DrupalTestCase {
var $_cleanup_masks = array();
function get_info() {
return array(
'name' => t('User access rules'),
'desc' => t('Assure that negative and positive access rules behave as designed.'),
'group' => 'User tests',
);
}
function _addMask($mask, $type, $status = 0) {
db_query("INSERT INTO {access} (mask, type, status) VALUES ('%s', '%s', %d)", $mask, $type, $status);
$aid = db_last_insert_id('access', 'aid');
$str_status = $status == 0 ? 'deny' : 'allow';
$this
->assertTrue(db_affected_rows() > 0, "{$str_status} Mask added for {$type} '{$mask}'");
$this->_cleanup_masks[] = $aid;
}
function tearDown() {
while (sizeof($this->_cleanup_masks) > 0) {
$aid = array_pop($this->_cleanup_masks);
db_query("DELETE FROM {access} WHERE aid = %d", $aid);
}
}
function testAccess() {
$this
->drupalVariableSet('user_register', 1);
$this
->_addMask('simpletest_block%', 'user');
$this
->_addMask('simpletest_block_allow%', 'user', 1);
$name = $this
->randomName(2, 'simpletest_block_');
$mail = "{$name}@example.com";
$edit = array(
'name' => $name,
'mail' => $mail,
);
$this
->drupalPost('user/register', $edit, 'Create new account');
$this
->assertNoUnWantedText(t('Your password and further instructions have been sent to your e-mail address.'), 'blocked user: Your password and further instructions - not found');
$this
->assertText(t('The name @name has been denied access.', array(
'@name' => $name,
)), 'blocked user: denied access - found');
$this
->setBrowser($this
->createBrowser());
$name = $this
->randomName(2, 'simpletest_block_allow_');
$mail = "{$name}@example.com";
$edit = array(
'name' => $name,
'mail' => $mail,
);
$this
->drupalPost('user/register', $edit, 'Create new account');
$this
->assertText(t('Your password and further instructions have been sent to your e-mail address.'), 'access user: Your password and further instructions - found');
$this
->assertNoText(t('The name @name has been denied access.', array(
'@name' => $name,
)), 'access user: denied access - not found');
$user = user_load($edit);
$this
->assertTrue(isset($user->uid), 'user->uid set');
$this
->assertTrue($user->uid > 0, 'uid > 0');
if (isset($user->uid) && $user->uid > 0) {
db_query('DELETE FROM {users} WHERE uid = %d', $user->uid);
db_query('DELETE FROM {users_roles} WHERE uid = %d', $user->uid);
db_query('DELETE FROM {authmap} WHERE uid = %d', $user->uid);
}
}
}
class UserDeleteTest extends DrupalTestCase {
function get_info() {
return array(
'name' => t('User delete'),
'desc' => t('Registers a user and deletes it.'),
'group' => 'User tests',
);
}
function tearDown() {
parent::tearDown();
}
function testUserRegistration() {
$this
->drupalVariableSet('user_register', 1);
$this
->drupalModuleDisable('profile');
$name = $this
->randomName();
$pname = theme('placeholder', $name);
$mail = "{$name}@example.com";
$edit = array(
'name' => $name,
'mail' => $mail,
);
$this
->drupalPost('user/register', $edit, 'Create new account');
$user_to_delete = user_load($edit);
$uid = $user_to_delete->uid;
$web_user = $this
->drupalCreateUserRolePerm(array(
'administer users',
));
$this
->drupalLoginUser($web_user);
$this->_browser
->get(url('user/' . $uid . '/edit', array(
'absolute' => TRUE,
)));
$this->_browser
->clickSubmit(t('Delete'));
$this
->assertWantedRaw(t('Are you sure you want to delete the account %name?', array(
'%name' => $name,
)), 'Confirm title');
$this
->assertText(t('All submissions made by this user will be attributed to the anonymous account. This action cannot be undone.'), 'Confirm text');
$this->_browser
->clickSubmit(t('Delete'));
$this
->assertWantedRaw(t('%name has been deleted.', array(
'%name' => $name,
)), 'User deleted');
$this
->assertFalse(user_load($edit), 'User is not found in the database');
}
}