Web Form Testing

Password Reset Test Cases for the Complete Recovery Loop

A password reset has not succeeded merely because the page displays "Password updated."

  1. The request does not reveal whether an account exists.
  2. The correct recovery message reaches the intended user.
  3. The reset token or code is valid only for the intended account.
  4. Expired, modified, superseded and consumed challenges are rejected.
  5. The new password is stored for the correct identity.
  6. The old password no longer works.
  7. The new password works through the normal login flow.
  8. Existing sessions, remembered devices and other credentials follow a defined policy.
  9. MFA, roles, tenant membership and account status are not weakened accidentally.

This guide contains 48 password reset test cases covering the complete recovery journey from an unauthenticated request to restored account access.

WrightTest Team 48 test cases
Password reset testing workflow from a neutral request through message delivery, token verification, credential replacement, session handling, and restored login
A complete recovery test verifies the credential change, consumed challenge and subsequent authentication, not only the success page.

The Minimum Password Reset Smoke Test

When release time is limited, begin with these ten scenarios.

The minimum password reset smoke test
IDTestFailure it can reveal
PR-01Request a reset for an existing local-password accountThe primary recovery entry point is broken
PR-02Request a reset for an unknown addressThe response reveals account existence
PR-09Confirm that the recovery email or code arrivesThe form succeeds but recovery cannot continue
PR-11Open the link from the delivered messageThe URL points to the wrong host, environment or page
PR-16Use a valid unused reset challengeThe intended recovery path cannot authorize a password change
PR-17Use an expired challengeExpiration is not enforced
PR-18Reuse a consumed challengeA one-time token remains usable
PR-26Set a valid new passwordPassword persistence is broken
PR-32Attempt login with the old passwordThe old credential remains valid
PR-33Log in with the new passwordThe reset confirmation is false or authentication is disconnected

The smoke set proves whether the primary recovery loop works. It does not independently prove token unpredictability, secure password storage, complete session revocation or resistance to account takeover.

Define the Recovery State Model First

Password recovery is not one form. It is a sequence of state transitions across the browser, messaging provider, reset-token service, identity store and authentication system.

A common recovery lifecycle is:

No active challenge
-> reset requested
-> challenge issued
-> message delivered
-> proof presented
-> challenge accepted
-> password updated
-> challenge consumed
-> session policy applied
-> normal login restored

Alternative states may include unknown identity, delivery failed, challenge expired, challenge superseded, challenge consumed, challenge blocked, SSO-managed identity, support-assisted recovery and MFA step-up required.

The exact names are implementation-specific. What matters is that each state has a defined trigger, expected account effect, observable result, permitted next action and evidence showing that the transition occurred.

Password reset state model showing request, issued challenge, delivery, expiration, password update, challenge consumption, and restored authentication
The recovery state model separates visible page states from the account and challenge states that actually restore access.

Recovery-state acceptance matrix

Recovery-state acceptance matrix
EventChallenge statePassword stateAccess result
Unknown identity submittedNo usable challengeUnchangedExternal response follows the anti-enumeration policy
Valid identity submittedIssuedUnchangedUser waits for the recovery channel
Message deliveredIssuedUnchangedNo authenticated access yet
Expired challenge presentedExpiredUnchangedPassword change rejected
Modified challenge presentedInvalidUnchangedPassword change rejected
Valid challenge presentedAccepted or restricted recovery sessionUnchangedOnly password-reset actions are permitted
Valid new password submittedConsumedUpdatedNormal login becomes available
Used challenge presented againConsumedUpdatedFurther reset rejected
Reset transaction failsDefined by retry policyUnchangedNo false completion state
Successful reset completedConsumedUpdatedSession policy and security notification applied

Reset Request and Account-Privacy Test Cases

The externally visible response should not become an account directory. Controls should limit excessive recovery requests without changing or locking the account before valid proof is presented.

Reset request and account-privacy cases
IDScenarioExpected resultEvidence
PR-01Submit the registered email of an active local-password accountThe request is accepted and a neutral confirmation state appearsBrowser result, response and challenge record
PR-02Submit an email that has no accountThe visible response does not confirm that the account is absentResponse body, status and redirect
PR-03Compare known and unknown identitiesMeaningful differences in message, status, redirect and response timing do not reveal existenceCaptured responses and timing sample
PR-04Submit an empty or malformed identifierForm validation follows the documented rules and creates no usable challengeValidation result and challenge count
PR-05Submit an identifier belonging to a suspended, inactive or deleted accountRecovery follows the defined account-state policy without exposing sensitive status externallyExternal response and internal account state
PR-06Request recovery for an SSO-managed accountThe system does not pretend that a local password can be reset; the user receives the defined SSO or support pathBrowser result and identity-provider configuration
PR-07Submit repeated requests rapidlyRequest and delivery limits apply without locking the account or breaking legitimate loginRequest count, delivery count and login result
PR-08Inspect the account before any valid challenge is usedPassword, account status, roles and sessions remain unchangedIdentity-store and session records

Recovery Email and Delivery Test Cases

Recovery email and delivery cases
IDScenarioExpected resultEvidence
PR-09Request recovery for a controlled test accountOne expected email, SMS or recovery message reaches the registered channelInbox, provider status or delivery log
PR-10Inspect the message contentRecipient, subject, sender, instructions and branding are correct; no current or new password is includedMessage body and headers
PR-11Inspect and open the recovery URLThe URL uses the correct HTTPS origin, environment, route and challenge valueMessage URL and final browser location
PR-12Open the link through supported email clients and redirect servicesEncoding, tracking and HTML rendering do not truncate or corrupt the challengeFinal URL and reset-page result
PR-13Delay or fail the messaging queue or providerOperational monitoring detects the delivery failure; the account remains unchangedQueue state, provider error and account record
PR-14Request another recovery messageResend timing, message count and token replacement follow the documented policyChallenge records and delivered messages
PR-15Complete the reset successfullyA security notification is sent after the credential changes, not merely after the requestNotification message and password-update timestamp

A browser confirmation such as "Check your inbox" proves only that the request screen reached its expected state. It does not prove that a provider accepted the message or that the user received it.

Reset Token and Code Test Cases

Reset token and code cases
IDScenarioExpected resultEvidence
PR-16Open a valid, unused challengeThe user reaches the permitted password-reset step for the intended accountBrowser state, challenge record and account identifier
PR-17Open a challenge after its expirationThe server rejects it and the password remains unchangedServer response and challenge state
PR-18Reopen a challenge after a successful resetThe challenge cannot authorize another password changeResponse, challenge state and password history
PR-19Modify, truncate or replace part of the challengeThe request is rejected without revealing internal token detailsResponse and unchanged account
PR-20Attempt to combine user A challenge with user B identifier or sessionOnly the account originally bound to the challenge can be affectedBoth account records
PR-21Request two reset messages and test the older challengeBehavior follows the documented multiple-request policyBoth challenge records and reset results
PR-22Redeem the same challenge concurrently in two sessionsAt most one password update succeedsConcurrent responses and update count
PR-23Open the challenge on another supported browser or deviceThe flow follows the defined binding policy without switching identityBrowser results and challenge record
PR-24Submit repeated guesses against a PIN or code endpointRate limiting or equivalent protection constrains guessing without changing the account passwordAttempt results and account state
PR-25Inspect the recovery page and surrounding requestsThe full challenge is not unintentionally exposed to analytics, third-party resources, logs or referrer destinationsNetwork trace, page source and security review

Decide What Multiple Reset Requests Mean

A resend button is not a policy. When two reset requests exist, the application must define which challenges remain valid.

Policy A - latest challenge only

Request 1 -> Token A active
Request 2 -> Token A superseded, Token B active

Token A stops working immediately after Request 2. Token B remains valid. Using Token A does not consume Token B, and the older link receives a useful expired or superseded state.

Policy B - all unexpired challenges until one succeeds

Request 1 -> Token A active
Request 2 -> Token A active, Token B active
Successful use of either -> both consumed

Both tokens initially follow the documented validity window. Only one password update can succeed, and successful redemption invalidates every remaining reset challenge.

Policy C - one active recovery transaction

A new request may resend or rotate the delivery mechanism while preserving one underlying transaction. Verify the message count, underlying challenge count, expiration behavior, resend limits and whether the original URL remains valid.

Comparison of latest-token-only, multiple-active-token, and one-transaction password recovery policies
Multiple reset requests need an explicit token policy, not an accidental behavior discovered by users during recovery.

New-Password and Credential-Persistence Test Cases

This section covers only the password rules required to prove recovery. The broader field and boundary matrix belongs in the Form Validation Test Cases: Align UI and API Rules guide.

New-password and credential-persistence cases
IDScenarioExpected resultEvidence
PR-26Submit matching values that satisfy the current password policyThe intended account receives the new credential and a truthful success state appearsUI result and authorized identity-store evidence
PR-27Submit different New password and Confirm password valuesThe update is blocked without consuming the challenge prematurely unless explicitly designed otherwiseValidation and challenge state
PR-28Test exact password-policy boundariesValid boundaries are accepted and invalid values receive actionable guidanceValidation results
PR-29Reuse the current or a recent passwordBehavior follows the documented password-history policyResponse and authorized password-history result
PR-30Make the password-update transaction fail after challenge acceptanceNo false success appears; the old password remains valid and retry behavior follows policyResponse, challenge state and login checks
PR-31Refresh, revisit or use browser Back after completionThe update is not repeated and the consumed challenge does not reopen the formUpdate count and page state
PR-32Attempt normal login using the old passwordAuthentication rejects the old credentialLogin result
PR-33Attempt normal login using the new passwordAuthentication accepts the new credential for the correct identityAuthenticated account and session
PR-34Inspect password-update events and user notificationExactly one credential update, audit event and completion notification are associated with the resetAudit record and notification
old password -> rejected
new password -> accepted

A success screen is not proof that the credential was persisted. The decisive functional check is the old/new login pair above.

Session, MFA and Account-Integrity Test Cases

Session, MFA and account-integrity cases
IDScenarioExpected resultEvidence
PR-35Complete the password updateThe next authentication step follows the documented policy; no unintended fully authenticated session is createdCookies, redirect and authenticated state
PR-36Inspect existing web sessions after resetThey are revoked, preserved or offered for revocation exactly as documentedSession-store records and browser checks
PR-37Inspect remembered-login or trusted-device sessionsPersistent authentication follows the same explicit security policyRemember-me cookies and device-session records
PR-38Inspect API tokens, mobile sessions and connected applicationsCredential reset affects other access tokens according to documented scopeAPI calls and token records
PR-39Reset the password of an MFA-enabled accountMFA enrollment is not silently removed, bypassed or replacedMFA configuration and next login
PR-40Complete recovery for a high-risk or privileged accountRequired step-up or stronger recovery controls are applied according to the product threat modelRecovery steps and account policy
PR-41Inspect the recovered identityAccount status, role, tenant, plan, recovery contacts and ownership remain unchanged unless explicitly part of recoveryBefore-and-after account record
PR-42Attempt local-password recovery for a federated or SSO-only identityThe flow does not create an unexpected local credential or bypass the identity providerIdentity methods and login result

Account recovery is an alternate authentication path. It should not silently become weaker than the controls protecting the account.

Choose and Verify the Session Policy

Password reset can occur because a user forgot a password or because the credential may have been compromised. Session handling therefore requires an explicit decision.

Session policy matrix
PolicyExpected behaviorEssential test
Revoke all sessions automaticallyEvery existing web and remembered session becomes invalidOpen an existing authenticated browser after reset
Ask the userThe reset form provides a clear revocation choice and applies it correctlyRun both choices and inspect session records
Revoke selected session classesWeb sessions, remembered devices and API tokens follow separate documented rulesVerify every credential class independently
Preserve sessionsExisting sessions remain active by deliberate product decisionConfirm the risk is understood and behavior is consistent

Do not infer session policy merely from whether one browser was redirected to login. Verify server-side session or token state.

Accessibility, Mobile and Operational Test Cases

Accessibility, mobile and operational cases
IDScenarioExpected resultEvidence
PR-43Inspect the recovery audit trail and security notificationRequest, challenge use, credential update and relevant session action are traceable without storing secretsAudit record and notification
PR-44Complete recovery using only the keyboard and supported assistive technologyLabels, focus order, error announcements and completion status remain understandableKeyboard walkthrough and accessibility inspection
PR-45Open the recovery message and link on supported mobile devicesEmail-client handoff, deep link, viewport, virtual keyboard and final login remain usableMobile screenshots and completed flow
PR-46Use password-manager generation, paste and autofillThe form accepts supported password-manager workflows without corrupting the value or exposing it unexpectedlyBrowser result and password-manager check
PR-47Run a controlled recovery smoke test in productionProduction mail, trusted origin, token, credential update and login work togetherEnd-to-end production evidence
PR-48Inspect synthetic identities and generated recovery data after executionTest accounts, messages and challenges are traceable and cleaned according to policyCleanup report and remaining records

The Most Important Password Reset Failure Patterns

Password reset failure patterns including missing email, wrong environment, reusable tokens, unchanged old password, active sessions, MFA bypass, and SSO credential errors
Password reset failures usually hide between browser state, delivery, token policy, identity storage and authentication consequences.

Neutral confirmation appears, but no message arrives

The request UI passes while the recovery channel is broken. Check the message queue, provider credentials, sender-domain configuration, recipient mapping, suppressed recipients, provider rejection and spam placement.

The email arrives, but the link points to the wrong environment

The form and mail provider pass, but the link still cannot recover the account. Common mistakes include localhost, staging domains, old application domains, HTTP links and truncated token parameters.

A second request invalidates the wrong token

The interface exposes Resend, but the multiple-request policy is undefined. Users receive unexplained errors or several challenges remain usable after one password change.

"Password updated" appears, but the old password still works

The UI may have received a successful response while the identity store was not updated, the wrong account was updated or authentication uses another credential store. Always verify both old and new credentials.

The new password works, but an attacker's session remains active

Changing the password does not necessarily terminate an already authenticated session. Test session consequences separately from password persistence.

Password recovery disables or bypasses MFA

The password changes successfully, but the next login no longer requires the enrolled factor, or recovery itself requires weaker proof than normal authentication.

An SSO account receives a local password

A federated user requests recovery and the application accidentally creates a local credential outside the intended identity provider.

Request flooding locks out the legitimate user

Repeated forgot-password requests should not become a denial-of-service mechanism. Apply controls to requests and delivery without disabling normal account access.

What Each Testing Layer Can Prove

Password reset testing layers
Testing layerWhat it can verifyWhat it cannot prove alone
Browser testRequest form, visible validation, reset form, errors, redirects and normal login behaviorReal delivery, token entropy, secure password storage or complete session revocation
Recovery API testGeneric responses, validation, challenge issuance, rate limits and error contractsBrowser usability or inbox delivery
Email-provider checkCorrect message, recipient, delivery status and reset URLToken acceptance or password persistence
Challenge-store checkAccount binding, status, expiration, supersession and consumptionUser-facing recovery experience
Identity-store checkCorrect account, credential update and unchanged roles or tenantNormal login behavior across every client
Authentication testOld-password rejection, new-password acceptance and session creationPassword hashing implementation
Session and token checkExisting web sessions, remembered devices and API tokensAccessible browser feedback
Security reviewToken generation, storage, leakage, enumeration and brute-force resistanceGeneral usability
Accessibility evaluationLabels, keyboard use, focus management and error announcementsBackend recovery integrity
Password reset testing layers covering browser, recovery API, email delivery, challenge store, identity store, authentication, sessions, security, and accessibility
Use browser automation for the visible recovery journey, then combine it with provider, identity, session and security checks.

A browser can show that the new-password form submitted. It cannot independently prove token unpredictability, safe storage, complete session revocation or the absence of an enumeration side channel.

How to Select Password Reset Cases After a Change

Change-to-regression matrix
Changed componentMinimum regression scope
Reset request formKnown identity, unknown identity, validation, accessibility and repeated submission
Recovery APIGeneric response, challenge creation, rate limits and failure behavior
Email provider or templateDelivery, recipient, URL integrity, encoding and completion notification
Token-generation logicValid, expired, modified, cross-account and brute-force cases
Resend logicMultiple-request policy, supersession, expiry and delivery limits
New-password endpointMatching values, policy boundaries, transaction failure and challenge consumption
Identity storeCorrect account update, old-password rejection and unchanged account metadata
Authentication serviceNew-password login, old-password rejection and MFA
Session managementWeb sessions, remembered devices, mobile sessions and API tokens
SSO integrationFederated account recovery and absence of unexpected local credentials
Deployment configurationFull minimum smoke set in the target environment

A large checklist is not a regression strategy. Select the cases that cross the changed component and the recovery states it owns.

Automating Password Reset Test Cases

The browser-visible request cases can reuse one flow:

Open the login page
Click "Forgot password"
Fill {{ACCOUNT_IDENTIFIER}}
Click "Send reset link"
Assert {{EXPECTED_REQUEST_RESULT}}

Named cases can provide existing local accounts, unknown accounts, malformed emails, SSO-managed identities, suspended accounts, repeated requests and provider failures.

A second flow can cover challenge redemption:

Open {{RECOVERY_MESSAGE}}
Follow {{RESET_LINK}}
Fill {{NEW_PASSWORD}}
Fill {{CONFIRM_PASSWORD}}
Click "Reset password"
Assert {{EXPECTED_RESET_RESULT}}

A third flow should verify authentication consequences:

Open the login page
Fill {{EMAIL}}
Fill {{PASSWORD_TO_TEST}}
Click "Log in"
Assert {{EXPECTED_LOGIN_RESULT}}

Keeping the flows separate shows whether the failure occurred in the request, delivery, challenge acceptance, credential update or normal authentication.

For the reusable-flow method, read the Web Form Testing guide.

What Browser Automation Should Not Claim

Browser automation should not be presented as proof of cryptographically secure token generation, sufficient token entropy, safe token or password storage, absence of every timing side channel, deliverability across all email providers, complete session revocation without access to session state, resistance to distributed abuse, correct MFA recovery for every threat model, or protection against host-header injection, token leakage or account takeover.

These properties require API, backend, provider, security or infrastructure checks. Browser automation remains valuable because it proves that a real user can complete the visible recovery path and that observable frontend behavior matches the tested responses.

Safe Production Password Reset Monitoring

Production is where incorrect domains, message credentials, redirect origins and provider settings become visible.

Use a dedicated synthetic account, controlled recovery mailbox, low execution frequency, generated passwords tracked securely by the test system, an identifiable audit marker, no real customer data, explicit session-invalidation handling, and automatic cleanup of messages and expired challenges.

Do not reset a shared team account, use an administrator or high-value customer, flood the mailbox, trigger support or fraud workflows accidentally, expose reset links in logs or reports, leave a production test account with an unknown password, or let monitoring bypass MFA or SSO policy.

Frequently Asked Questions

Should the page say that an email address has no account?

Use an externally consistent response for existing and non-existing identities. Status codes, redirects and meaningful timing differences should also be reviewed.

Should a successful reset invalidate all sessions?

Define the policy explicitly. Test web sessions, remembered devices and every other credential class affected by the reset.

There is no universal UI answer. Choose latest-token-only, multiple active challenges until one succeeds, or one underlying transaction, then test concurrency and consumption.

Can a browser test prove that the reset token is secure?

No. It can demonstrate valid, expired, modified and reused behavior from the outside. Randomness, entropy, generation and storage require an authorized security or backend review.

Is password reset the same as password change?

No. Password change starts in an authenticated session and may require the current password. Password reset is an alternate identity-recovery path with different abuse risks.

Password Reset Testing Checklist

Before approving password recovery, confirm that known and unknown identities receive an externally consistent response, malformed input creates no usable challenge, repeated requests are limited without locking the account, the account remains unchanged before valid recovery proof, the message reaches the correct recovery channel, the URL uses the correct trusted HTTPS origin, links survive supported email clients and redirects, expiration is enforced server-side, consumed challenges cannot be reused, modified challenges are rejected, one account's challenge cannot affect another, multiple requests follow a documented policy, concurrent redemption permits at most one update, the new password follows the current policy, transaction failure does not display false success, the old password is rejected, the new password is accepted, the challenge is consumed after success, completion creates one audit event and notification, existing sessions follow the documented policy, MFA remains enabled, role and tenant data remain correct, SSO identities do not receive unintended local credentials, accessibility and mobile recovery remain usable, and production configuration has been tested safely.

Final acceptance criterion. The final acceptance criterion is not: "The password-reset page displayed a success message." It is: "The correct account received a new credential, the old credential was rejected, the recovery challenge became unusable, and subsequent access followed the intended session and authentication policy."

Automate the Repeatable Browser Layer

WrightTest lets teams record reusable password-reset request, recovery-form and login flows, replace fixed values with named test-case variables, and inspect separate screenshots, errors, step results and Playwright traces.

The browser checks can be exported to native Playwright .spec.ts files when they need to move into an existing repository or CI pipeline.

Use WrightTest for the repeatable browser journey, then combine it with mailbox, challenge-store, identity, session and security checks for the complete recovery loop.