Browse the Knowledge Hub56 resources
Test cases
CRM lead test cases, where the lead quietly disappears
Twenty eight cases covering duplicate detection and merge, routing rules and the unrouted fallback, round robin under concurrency, territory visibility, stage transitions, conversion, bulk import with partial failures, consent and funnel reporting.
All 28 test cases, ready to copy
Free to use and adapt, no sign-up. Download as CSV or Markdown, or copy it straight into your own tooling.
Last updated
28 worked examples
Capture a lead from the web form with full attribution
TypeFunctionalPriorityHigh- Test data
- A complete submission carrying campaign source, medium and landing page
- Expected result
- Lead is created with every field and every attribution parameter stored, and the created timestamp reflects submission rather than processing.
Detect a duplicate lead on repeat submission
TypeFunctionalPriorityHigh- Test data
- Same email submitted twice, once with a differently cased address and once with a plus alias
- Expected result
- Matched as the same person under the documented rule. Email comparison is case insensitive on the domain and the rule for aliases is applied consistently.
Match a duplicate on company rather than only on email
TypeFunctionalPriorityMedium- Test data
- Two contacts from the same company with different email addresses and the same phone number
- Expected result
- Related as one account with two contacts rather than two unconnected leads, and the account is not created twice.
Merge duplicate leads without losing activity
TypeStatePriorityHigh- Test data
- Two leads each carrying notes, emails, calls and a different owner
- Expected result
- Merged record keeps every activity from both, ownership resolves by the documented rule, and the retired identifier resolves to the survivor.
Prevent two submissions from creating two leads concurrently
TypeBoundaryPriorityHigh- Test data
- Submit the same form twice within 200 milliseconds from two tabs
- Expected result
- Exactly one lead exists. Deduplication that runs after insert rather than as a constraint will create both and reconcile neither.
Assign a lead by the routing rule
TypeFunctionalPriorityHigh- Test data
- Territory, company size and product interest each matching a different rule
- Expected result
- Rules are evaluated in the documented priority order, one owner is assigned, and the rule that fired is recorded on the lead.
Assign a lead that matches no routing rule
TypeNegativePriorityHigh- Test data
- A submission from an unmapped country with no product interest selected
- Expected result
- Lead lands in a defined fallback queue with an owner. A lead assigned to nobody is invisible in every pipeline view and is simply lost.
Distribute round robin without skipping or doubling
TypeBoundaryPriorityHigh- Test data
- Twenty leads created simultaneously across a team of four
- Expected result
- Each rep receives five. A counter read and written without a lock hands the same position to two requests and skips the next.
Skip an unavailable owner during assignment
TypeStatePriorityMedium- Test data
- A rep marked out of office and a deactivated user in the rotation
- Expected result
- Both are skipped and the lead goes to the next eligible owner rather than to an account nobody is monitoring.
Reassign a lead and preserve its history
TypeStatePriorityMedium- Test data
- Reassign an engaged lead from one rep to another
- Expected result
- Every activity remains attached, the previous owner is recorded, and open tasks are transferred or explicitly closed rather than orphaned.
Restrict lead visibility to the owning team
TypeSecurityPriorityHigh- Test data
- A rep requesting a lead owned by another territory, by direct identifier and through search
- Expected result
- Refused on both paths. A record hidden from a list view but returned by search or by identifier is not access control.
Grant a manager visibility across the hierarchy
TypeSecurityPriorityMedium- Test data
- A manager viewing leads owned by direct and indirect reports
- Expected result
- The full subtree is visible, peers are not, and the rule is enforced on the server rather than by filtering the response in the client.
Move a lead through valid stage transitions only
TypeStatePriorityHigh- Test data
- Attempt to move a new lead straight to closed won, and a disqualified lead back to working
- Expected result
- Invalid transitions are refused, the reopen path is explicit rather than incidental, and every transition records actor and timestamp.
Require a reason when disqualifying
TypeFunctionalPriorityMedium- Test data
- Disqualify with no reason, then with a reason
- Expected result
- Blocked without a reason. Disqualification without a captured reason makes the funnel unanalysable at exactly the point it matters.
Convert a lead to an account, contact and opportunity
TypeFunctionalPriorityHigh- Test data
- A qualified lead with activity history and custom field values
- Expected result
- All three records are created, mapped fields carry across, activity history follows the contact, and the lead cannot be converted twice.
Prevent a second conversion from a repeated request
TypeSecurityPriorityHigh- Test data
- Replay the conversion request and press convert repeatedly
- Expected result
- Exactly one opportunity is created. A duplicate opportunity inflates the forecast and is rarely spotted before the pipeline review.
Convert into an existing account rather than creating a new one
TypeFunctionalPriorityHigh- Test data
- A lead from a company that already exists with a slightly different legal name
- Expected result
- Existing account is offered and selected, and the duplicate account is not created silently under the alternative spelling.
Validate and normalise contact details on entry
TypeNegativePriorityMedium- Test data
- A malformed email, an international phone number without a country code, and a free text country name
- Expected result
- Each is rejected or normalised to a documented format. Storing them unvalidated moves the failure to the first outbound campaign.
Import leads in bulk with partial failures
TypeNegativePriorityHigh- Test data
- A file of 1,000 rows where 40 fail validation and 12 duplicate existing records
- Expected result
- Valid rows import, failures are reported by row number with a reason, and rerunning the corrected file does not duplicate the rows that succeeded.
Handle separators and encoding in an imported file
TypeCompatibilityPriorityMedium- Test data
- Commas inside quoted fields, line breaks inside a notes column, accented characters and a byte order mark
- Expected result
- Every row parses to the correct column count, characters survive intact, and no row is silently dropped for a parsing failure.
Record activity against the correct lead
TypeStatePriorityHigh- Test data
- Log a call from a list view while a different record is open in another tab
- Expected result
- Activity attaches to the intended lead. Context leaking between tabs is the common cause of activity landing on the wrong record.
Order the activity timeline correctly across timezones
TypeBoundaryPriorityMedium- Test data
- Activities logged by users in three timezones, including two either side of a daylight saving change
- Expected result
- Chronological order is correct and each entry displays in the viewer local timezone with the timezone shown.
Enforce required fields per stage rather than at creation
TypeFunctionalPriorityMedium- Test data
- Advance a lead to a stage that requires budget and timeline, with both blank
- Expected result
- Advance is blocked and names the missing fields. Demanding them at capture instead suppresses the lead entirely.
Honour consent and communication preferences
TypeSecurityPriorityHigh- Test data
- A lead who has opted out, then is re-imported through a bulk file
- Expected result
- Opt out survives the import and the record is excluded from outbound campaigns. An import that resets consent is a regulatory finding.
Delete or anonymise a lead on request
TypeSecurityPriorityHigh- Test data
- An erasure request for a lead with activity history and an associated opportunity
- Expected result
- Personal data is removed or anonymised across the record, its activities and exports, while aggregate reporting counts remain intact.
Keep reporting figures consistent with the underlying records
TypeStatePriorityHigh- Test data
- Create, convert, disqualify and merge leads, then run the funnel report for the same period
- Expected result
- Counts reconcile exactly with the records. Merged leads are counted once and conversions are attributed to the period they occurred in.
Recover from a failed integration without losing the lead
TypeStatePriorityHigh- Test data
- Take the enrichment or marketing automation integration offline during capture
- Expected result
- Lead is still created and the enrichment is retried. A capture that depends on a third party being available drops leads during every outage.
Operate lead capture and conversion with a keyboard and a screen reader
TypeAccessibilityPriorityMedium- Test data
- Keyboard only navigation through the form, the owner picker and the conversion dialogue
- Expected result
- Every control is reachable and labelled, validation errors are announced and linked to their field, and the dialogue traps and restores focus correctly.
What goes in each field
ID
RequiredStable identifier, prefixed by module.
Test case
RequiredWhat is being verified, in one line.
Type
Functional, negative, boundary, security, state, performance, accessibility or compatibility. Use it to check coverage is spread rather than clustered on the happy path.
Priority
Risk based, weighted by revenue and trust. Anything that loses a lead, duplicates one, assigns it to nobody, or exposes one team pipeline to another is High. Reporting accuracy is High because it drives forecasting.
Test data
The specific values, including the invalid and boundary ones.
Expected result
RequiredThe precise observable outcome, including message text where the wording itself is the requirement.
Submit the same form twice quickly
A lead that captures cleanly once proves nothing about the system under real traffic. These four conditions are where leads duplicate or vanish.
Submit twice within a fraction of a second
Deduplication that runs after insert rather than as a constraint will create both records and reconcile neither. Two tabs and 200 milliseconds is the whole test.
Send a lead that matches no rule
An unmapped country with no product interest. If there is no fallback queue, the lead has no owner, appears in no pipeline view, and is lost without an error.
Create twenty leads at once
Round robin across four reps should give five each. A counter read and written without a lock hands the same position to two requests and skips the next.
Reconcile the funnel report
Create, convert, disqualify and merge, then run the report. Merged leads counted twice inflate the forecast, and nobody questions a number that looks plausible.
Why lead defects reach the forecast
Duplicates are the defining problem of lead management, and they are a concurrency problem more often than a matching problem. Two form submissions arriving within the same moment both check for an existing record, both find none, and both insert. Any deduplication that runs as a step after insert will simply create two records and leave them. The fix is a uniqueness constraint at the storage layer, and the test is to fire the submissions simultaneously rather than one after another. The matching rule itself then needs its own cases for case differences, plus aliases and shared phone numbers across a company.
Assignment is the second failure, and its worst form is silent. A lead that matches no routing rule and lands with no owner is not visible in any pipeline view, so nobody knows it exists. It generates no error and no alert, and it is discovered weeks later if at all. Every routing configuration needs a defined fallback queue, and that queue needs a test. Round robin adds a concurrency case of its own: a position counter read and written without a lock will hand the same rep two leads and skip the next entirely.
Visibility is routinely implemented in the wrong layer. Territory and hierarchy rules that filter a list view but return the record on direct identifier lookup or through search are not access control, they are presentation. Any rep who learns a record identifier reads a competing pipeline. The manager case is the mirror image: the rule has to walk the whole reporting subtree without exposing peers, and it has to do so on the server.
Finally, imports and consent interact badly. A bulk file that resets an opt out flag turns a compliant database into a regulatory problem, and the record then enters the next campaign legitimately as far as the system is concerned. The related case is partial failure: an import of a thousand rows where forty fail needs per row reporting and needs to be safely rerunnable, because the corrected file will be uploaded again and it must not duplicate the rows that already succeeded.
Suggest an improvementTesting a CRM or sales platform?
QAble tests CRM implementations end to end, including deduplication, routing under concurrency, visibility rules, integrations and reconciliation between records and reporting.
CRM testing servicesMore test case sets
View allTest cases for a login page
Test cases25 cases across functional, negative, boundary, security, session and accessibility paths, including account enumeration and lockout.Test cases for a registration form
Test cases28 cases covering validation, duplicate accounts, email verification, password rules and the enumeration leak most signup forms ship with.Test cases for search functionality
Test cases28 cases across relevance, partial and fuzzy matching, filters, pagination, empty states, injection attempts and performance under load.Test cases for a shopping cart
Test cases27 cases on quantity limits, price recalculation, stock changes, coupon stacking, guest to account merge and cart persistence.Test cases for checkout and payment
Test cases30 cases including 3D Secure, declines, timeouts, duplicate charges, idempotency, refunds and partial captures.Test cases for file upload
Test cases28 cases on size and type limits, spoofed content types, malicious filenames, progress, resume, virus scanning and storage limits.Test cases for forgot password
Test cases26 cases on reset token expiry, single use enforcement, session invalidation and the enumeration and rate limit gaps that are routine here.Test cases for OTP verification
Test cases26 cases on expiry, resend throttling, attempt limits, code reuse, delivery failure and the brute force window teams forget to close.Test cases for user roles and permissions
Test cases26 cases on horizontal and vertical privilege checks, direct object access, role changes mid-session and permission inheritance.Test cases for form validation
Test cases27 rules-based cases on required fields, length and numeric boundaries, client and server parity, hidden field tampering and error accessibility.Test cases for a date picker
Test cases26 cases on timezone shifts, ambiguous day and month order, impossible dates, min and max limits, leap years and keyboard operation.Test cases for pagination
Test cases24 cases on ordering stability, records changing mid-session, page size caps, deep offset cost, permission-filtered totals and state restore.Test cases for push notifications
Test cases26 cases on app states, deep link routing, token release on sign out, lock screen privacy, preferences, provider failures and platform differences.Test cases for reports and data export
Test cases25 cases on permission filtering in the file, spreadsheet formula injection, encoding, typed numbers and dates, row limits and audit logging.Test cases for a chatbot
Test cases28 cases on paraphrased intents, context, fallback loops, human handoff, policy grounding, prompt injection and data scoping.Test cases for net banking transactions
Test cases28 cases on duplicate debits from a retried request, concurrent transfers against one balance, daily limits across channels, beneficiary cooling periods, second factor binding and reconciliation.Test cases for wallet and UPI payments
Test cases28 cases on payments that time out with no response, idempotency on retry, racing balances, caps across devices, collect request fraud, mandates and refunds.Test cases for insurance claim submission
Test cases28 cases on coverage at the date of loss, waiting periods, deductibles and sub limits, exclusions and riders, duplicate claims and settlement reconciliation.Test cases for patient records in an EHR
Test cases28 cases on duplicate detection and merge, wrong patient entry, units of measure, allergy and interaction alerting, break glass access and audit of reads.Test cases for an ERP purchase order
Test cases28 cases on approval thresholds, amendments that must reset approval, budget commitment races, over receipt tolerance, three-way match and duplicate invoices.Test cases for OTT video playback
Test cases28 cases on bitrate recovery after a dip, DRM renewal mid stream, concurrent stream limits and leaked slots, resume conflicts, ad cue points and offline expiry.Test cases for game level progression
Test cases28 cases on save corruption during a crash write, cloud save conflicts, offline queue replay, unlock gating, currency exploits and purchase restore.Test cases for a REST API
Test cases28 cases on status code correctness, cross tenant resource access, mass assignment, idempotent retries, cursor pagination, rate limits and contract drift.Test cases for SSO and social login
Test cases28 cases on linking an account on an unverified email, state and code replay, redirect allow lists, token signature and issuer, deprovisioning and session rotation.Test cases for subscription and billing
Test cases28 cases on mid cycle proration, duplicate and out of order webhooks, renewal double charges, dunning and grace, trials, coupons, metered usage and tax.Test cases for data tables, filters and sorting
Test cases28 cases on unstable sorts across pages, filters that must reset pagination, selection surviving a filter change, bulk action scope and export fidelity.Test cases for session timeout and concurrent login
Test cases28 cases on tokens that survive sign out, refresh token reuse, idle against absolute lifetime, multi tab expiry, session limits and remote revocation.Test cases for a multi step form wizard
Test cases28 cases on values lost to back navigation, refresh and session expiry, step skipping, server side revalidation, duplicate submission and conditional branches.Test cases for email verification
Test cases28 cases on token reuse and expiry, invalidating earlier links, account enumeration, header injection, safe address change and mail scanner prefetching.Test cases for dashboards and analytics widgets
Test cases28 cases on reconciling against source rows, widgets that disagree, timezone aggregation, zero baselines, no data shown as zero and permission leaks in aggregates.Test cases for booking and reservation
Test cases28 cases on concurrent bookings for the last slot, inventory holds that leak, payment without a booking, cancellation boundaries and channel sync.Test cases for mobile app install and update
Test cases28 cases on migration chains across skipped versions, crashes during post upgrade migration, forced update lockouts, deep links and clean reinstall.Test cases for accessibility (WCAG 2.2 AA)
Test cases28 cases on keyboard only completion, focus management, live region announcements, contrast, reflow at 320 pixels, target size and screen reader verification.Test cases for performance and load
Test cases28 cases on spikes with no ramp, recovery after peak, soak and leak detection, pool exhaustion, cold caches, retry storms and data correctness under load.Test cases for the OWASP Top 10
Test cases28 cases on broken access control, mass assignment, injection across every input surface, credential stuffing, session invalidation, SSRF and exposed secrets.Test cases for cross browser compatibility
Test cases28 cases on storage that throws in private mode, blocked third party cookies, engine date parsing, mobile viewport units, in app browsers and ad blockers.Test cases for database and data integrity
Test cases28 cases on uniqueness under concurrency, lost updates, counter races, orphaned rows, migration and backfill safety, replica lag and verified restores.Test cases for localisation and multi language support
Test cases28 cases on text expansion, concatenated sentences, plural rules, locale date parsing, decimal separators, right to left layout, collation and encoding.Want your pipeline data proven, not assumed?
QAble covers functional, boundary and security paths with ISTQB-certified engineers. Start with a free QA audit of your platform.