Authentication and access

29 sign-up form test cases, including the ones that only fail in production

Twenty-nine test cases for a sign-up form — verification, duplicate accounts, account enumeration, and the double-submit that quietly creates two users.

  • 29 cases
  • 8 coverage types
  • Last verified Sep 16, 2026

Registration is the one form where a bug costs you the user before you ever have them. They cannot sign in to report it, and they will not email you about it. They will just leave.

Two failures show up again and again, and neither is a validation problem. The first is the double submit that creates two accounts, which only appears on a slow connection — exactly the connection the user is on when they press the button twice. The second is the duplicate-email message that politely confirms which addresses already have accounts, which is the same information leak the login page is usually careful about.

These twenty-nine cases cover the form, the verification email behind it and the account it creates.

Type
Priority

Showing 29 of 29 cases

29 test cases for Test cases for a registration form
IDTest caseTypePriorityPreconditionsStepsTest dataExpected result
REG-01Create an account with valid detailsFunctionalHighNo account for the address used
  1. Fill every required field
  2. Accept the terms
  3. Submit
[email protected] / Correct-Horse-9Account created, and the user is told to check their email.
REG-02A verification email arrivesFunctionalHighAn account was just created
  1. Check the inbox for the address used
[email protected]One email arrives with a working verification link and a stated expiry.
REG-03The verification link activates the accountFunctionalHighAn unverified account exists
  1. Open the link from the email
  2. Sign in
The account is verified and the sign-in succeeds.
REG-04Optional fields can be left emptyFunctionalMedium
  1. Fill only the required fields
  2. Submit
The account is created. Optional means optional.
REG-05The password strength meter reacts as you typeFunctionalLow
  1. Type a weak password then a strong one
abc then a 16-character passphraseThe meter changes and never blocks a password that meets the stated rules.
REG-06The terms checkbox must be tickedFunctionalMedium
  1. Complete the form without ticking terms
  2. Submit
The form is refused and the checkbox is marked, not a generic banner.
REG-07A duplicate email address is refusedNegativeHighAn account already exists for the address
  1. Register again with the same address
  2. Submit
[email protected]The submission does not create a second account.
REG-08A duplicate does not confirm the account existsSecurityHighAn account already exists for the address
  1. Register with the existing address
  2. Read the message and watch the inbox
[email protected]The page says a verification email has been sent, and the real owner gets a "someone tried to register" email instead of a new account.
REG-09An invalid email address is refusedNegativeHigh
  1. Enter an address with no domain part
  2. Submit
user@Refused at the field with a message naming the problem.
REG-10Mismatched password and confirmation are refusedNegativeHighThe form has a confirm field
  1. Enter two different passwords
  2. Submit
Correct-Horse-9 / Correct-Horse-8Refused at the confirm field. The first field keeps its value.
REG-11A common password is refusedNegativeMediumA breached-password check is in place
  1. Enter a password from the common list
  2. Submit
Password123!Refused with a message explaining it is too common, not too short.
REG-12An already-used verification link is refusedNegativeMediumThe link has been opened once
  1. Open the same verification link a second time
Refused with an explanation and an offer to sign in, not a server error.
REG-13An expired verification link is refusedNegativeMediumA link older than the stated expiry
  1. Open the expired link
Refused, with a working control to send a new one.
REG-14Name length is enforced at both endsBoundaryMedium
  1. Submit a one-character name, then one at the documented maximum
1 and 100 charactersBoth are handled per the stated rule, and the maximum is not silently truncated.
REG-15A 254-character email address is acceptedBoundaryMedium
  1. Register with the longest legal address
254-character addressAccepted and stored whole.
REG-16A 64-character password is acceptedBoundaryMedium
  1. Register with a 64-character password
64 random charactersAccepted, and the same password signs in afterwards.
REG-17A password one character under the minimum is refusedBoundaryMediumMinimum is 8
  1. Enter 7 characters
  2. Submit
7 charactersRefused, with the minimum stated.
REG-18Pressing submit twice creates one accountData integrityHighNetwork throttled to a slow connection
  1. Submit the form
  2. Press the button again before the response returns
[email protected]Exactly one account exists and one verification email was sent.
REG-19A role or plan field in the request body is ignoredSecurityHighRequest can be edited in a proxy
  1. Add a role field set to admin to the sign-up POST
  2. Send it
role=adminThe account is created with the default role. The extra field is not bound to the model.
REG-20Script in a name field is stored and rendered safelySecurityHigh
  1. Register with a script tag as the display name
  2. Open any page that shows the name
a script tagThe name is shown as literal text. No script runs anywhere it appears.
REG-21Sign-ups are rate limitedSecurityHigh
  1. Submit twenty sign-ups in a minute from one address
Later attempts are throttled or challenged, and the limit is applied server-side.
REG-22The account cannot be used before verificationSecurityMediumAn unverified account exists
  1. Attempt to sign in before opening the link
Refused, with the reason given and the option to resend.
REG-23The verification token is single-use and unguessableSecurityHighTwo verification links captured
  1. Compare the tokens
  2. Attempt to alter one and open it
Tokens are long and random with no visible pattern, and an altered token is refused.
REG-24The password is never returned or loggedSecurityHighProxy and server log available
  1. Register while capturing traffic
  2. Search the response and the log for the password
Correct-Horse-9The password appears in the request body only.
REG-25Every field has a label and required state a screen reader can readAccessibilityHigh
  1. Inspect the accessibility tree for each control
Each has a programmatic name, and required fields expose that state rather than relying on an asterisk.
REG-26Errors are summarised and announcedAccessibilityHighScreen reader running
  1. Submit an empty form
  2. Listen
A summary names each problem, is announced through a live region, and each entry moves focus to its field.
REG-27The form can be completed with the keyboard aloneAccessibilityHigh
  1. Complete and submit the form using only the keyboard
Focus order matches the visual order, focus is always visible, and the terms checkbox is reachable.
REG-28A password manager offers to save the new credentialsCompatibilityMediumBrowser password manager enabled
  1. Complete a registration
The save prompt appears, meaning the autocomplete attributes are username and new-password.
REG-29An address with a plus tag is acceptedLocalisationMedium
  1. Register using a tagged address
[email protected]Accepted. Plus addressing is legal and common.

Case IDs are positional within this set, not stable identifiers. Import the set, then let your own tool assign its IDs.

How to use this set

Run the whole thing once when the form changes, and the seven high-priority cases on every release. The double-submit case (REG-18) is the one worth wiring into automation first — it is invisible in manual testing on a fast connection and it produces support tickets for months.

What we deliberately left out

Signing in, password reset and two-factor enrolment are separate screens with their own failure modes, so they get their own sets. Social and SSO sign-up is worth its own set too, because the interesting cases there are about identity linking rather than validation.

Questions about this set

Can I use these in my own project?

Yes. Copy them, change them, no attribution needed.

Our form is three steps, not one. Does this still apply?

Mostly. Keep everything here and add the wizard cases — back and forward without losing data, refresh in the middle, and a direct link to step two.

Why is a mass assignment case in a form test set?

Because the sign-up endpoint is usually the one place an unauthenticated user can write to your user model, which is exactly why it gets probed.

Somewhere to keep these once you have run them

Tesbo holds the cases, the runs and the results in one place, so the next release starts from what the last one proved.

Where this coverage comes from