Card spending limit testing verifies that a card transaction is approved or declined according to configured per-transaction and cumulative spending rules. It checks how authorisations affect available limit, how reversals and clearing change usage, and whether the recorded outcome matches the issuer's rules across relevant channels and transaction types.
Define the limit behaviour first
Before writing tests, identify the limit scope and its source of truth. A card may have a maximum per purchase, a daily or monthly cumulative limit, or several limits applied together. Rules may differ by card product, customer, merchant category, channel, currency or transaction type. Confirm whether limits are shared across cards on an account and how the business day and reset time are defined.
Document how the system treats pending authorisations, partial approvals, reversals, refunds and cleared amounts. For example, an approved authorisation may reserve limit before settlement, while a reversal may release some or all of that reservation. These behaviours depend on the product rules. Record the expected behaviour for each state rather than assuming that every system calculates usage in the same way.
Use a controlled test environment with configured cards, accounts and transaction data. Confirm that the card processor or authorisation simulator uses the intended limit configuration. Environment drift, stale test data or a mismatched processor profile can produce misleading results.
Build boundary and lifecycle tests
Test each applicable limit at the boundary. If a cumulative limit is £500 and the card has £420 of counted usage, submit transactions that bring the total to exactly £500 and just above it. The expected decision at equality must follow the documented rule. For a maximum single transaction amount, test the maximum, the smallest valid amount above it and a value below it.
A practical test case could be:
- Given a daily limit of £500 and £420 of usage counted under the configured rule
- When an authorisation for £80 is submitted
- Then the response and remaining limit match the rule for an amount exactly at the limit
- When an authorisation for £80.01 is submitted against a fresh equivalent state
- Then the transaction is declined if amounts above the limit are prohibited, and the usage record remains consistent with the configured decline behaviour
Use separate, reproducible card states for each case. Reusing a card without resetting its authorisation and usage history can make a boundary test order-dependent.
Test the transaction lifecycle as well as the initial decision. Cover an approved authorisation followed by full and partial reversal, clearing for an amount different from the authorised amount, and a refund. Assert the response, remaining spendable limit and transaction or ledger records at each relevant stage. A refund may affect the account balance without restoring a spending limit immediately, depending on the rules.
Check concurrent requests and limit resets
Submit two authorisations concurrently when their combined amount exceeds the remaining limit. Verify that the system applies the limit consistently and does not approve both based on the same stale usage value. Check the authorisation records and resulting limit state after both responses. This is an integration concern where card processing, limit services and account data can update separately.
For daily or monthly limits, test transactions around the reset boundary, including the configured time zone and business-day calendar. Verify which timestamp determines the period, such as authorisation time or another defined event. Include retries and duplicate requests where the interface supports them, so a repeated request cannot consume the limit twice unless the transaction represents a distinct authorisation.
Assert outcomes across the card flow
Check more than the customer-facing message. Compare the authorisation response with the configured rule, processor record, limit usage and any relevant account or card status. Confirm that a decline has the expected reason where reason codes are part of the interface, and that it creates no unintended hold or usage entry.
Run the same core cases through relevant entry points, such as a payment API, mobile app or point-of-sale flow, when they share the limit service. Use API assertions for decision and state data, and verify the customer interface displays the resulting limit accurately. This supports [card authorisation testing] and can form part of wider [end-to-end testing in banking].
Frequently asked questions
How should offline or stand-in card transactions be tested against spending limits?
Test them against the specific rules used by the terminal, network or processor when the issuer cannot make a real-time decision. Verify any local floor limit or stand-in controls, then confirm how transactions are reconciled when connectivity returns.
Can supplementary cards have separate spending limits?
They can, depending on the product configuration. Test whether each supplementary card has its own limit, shares a parent account limit, or is subject to both, and verify the combined usage across cards.
What evidence should a card limit test retain?
Retain the configured limit and starting usage, transaction identifiers and amounts, timestamps, authorisation responses, relevant processor records, and the resulting usage or available-limit state. This makes failures reproducible and helps distinguish a rule defect from a test-data or environment issue.
Should cash withdrawals use the same limit as card purchases?
That depends on the card product's rules. Confirm whether cash withdrawals share a general card limit or use a separate cash limit, then test each applicable limit and any combined cap.
