function UserPasswordResetTestCase::testUserPasswordReset in Drupal 7
Tests password reset functionality.
1 call to UserPasswordResetTestCase::testUserPasswordReset()
- UserPasswordResetTestCase::testUserDirectLogin in modules/
user/ user.test - Test direct login link that bypasses the password reset form.
File
- modules/
user/ user.test, line 529 - Tests for user.module.
Class
- UserPasswordResetTestCase
- Tests resetting a user password.
Code
function testUserPasswordReset($use_direct_login_link = FALSE) {
// Create a user.
$account = $this
->drupalCreateUser();
$this
->drupalLogin($account);
$this
->drupalLogout();
// Attempt to reset password.
$edit = array(
'name' => $account->name,
);
$this
->drupalPost('user/password', $edit, t('E-mail new password'));
// Confirm the password reset.
$this
->assertText(t('Further instructions have been sent to your e-mail address.'), 'Password reset instructions mailed message displayed.');
// Ensure that flood control was not triggered.
$this
->assertNoText(t('is temporarily blocked. Try again later'), 'Flood control was not triggered by single password reset.');
// Create an image field to enable an Ajax request on the user profile page.
$field = array(
'field_name' => 'field_avatar',
'type' => 'image',
'settings' => array(),
'cardinality' => 1,
);
field_create_field($field);
$instance = array(
'field_name' => $field['field_name'],
'entity_type' => 'user',
'label' => 'Avatar',
'bundle' => 'user',
'required' => FALSE,
'settings' => array(),
'widget' => array(
'type' => 'image_image',
'settings' => array(),
),
);
field_create_instance($instance);
variable_del("user_test_pass_reset_form_submit_{$account->uid}");
$resetURL = $this
->getResetURL($use_direct_login_link);
$this
->drupalGet($resetURL);
// Check successful login.
if (!$use_direct_login_link) {
$this
->assertUrl($this
->getConfirmURL($resetURL), array(), 'The user is redirected to the reset password confirm form.');
$this
->drupalPost(NULL, NULL, t('Log in'));
// The form was fully processed before redirecting.
$form_submit_handled = variable_get("user_test_pass_reset_form_submit_{$account->uid}", FALSE);
$this
->assertTrue($form_submit_handled, 'A custom submit handler executed.');
}
$this
->assertText('You have just used your one-time login link. It is no longer necessary to use this link to log in. Please change your password.');
// Make sure the Ajax request from uploading a file does not invalidate the
// reset token.
$image = current($this
->drupalGetTestFiles('image'));
$edit = array(
'files[field_avatar_und_0]' => drupal_realpath($image->uri),
);
$this
->drupalPostAJAX(NULL, $edit, 'field_avatar_und_0_upload_button');
// Change the forgotten password.
$password = user_password();
$edit = array(
'pass[pass1]' => $password,
'pass[pass2]' => $password,
);
$this
->drupalPost(NULL, $edit, t('Save'));
$this
->assertText(t('The changes have been saved.'), 'Forgotten password changed.');
// Ensure blocked and deleted accounts can't access the direct login link.
$this
->drupalLogout();
$reset_url = $this
->generateResetURL($account, $use_direct_login_link);
user_save($account, array(
'status' => 0,
));
$this
->drupalGet($reset_url);
$this
->assertResponse(403);
user_delete($account->uid);
$this
->drupalGet($reset_url);
$this
->assertResponse(403);
}