Key takeaways

  • Test manual entry, browser autofill, and address suggestions
  • Recalculate shipping, tax, and delivery dates after correction
  • Allow billing and shipping addresses to diverge
  • Make final order submission idempotent
Written by
Random Address Generator Editorial Team
Reviewed by
Forms and QA Review Team
Latest substantive update
Added address correction, shipping recalculation, billing separation, idempotent submission, and mobile cases.

Address entry has multiple paths

Cover keyboard entry, browser autofill, multiline paste, suggestions, and saved addresses. Every path should produce one API contract while retaining country and unit details.

A suggestion timeout must not block valid manual entry. Explain that the shopper can continue rather than trapping them in an empty list.

PathCore assertionCommon failure
ManualSubmit without a suggestionForcing a list choice
Browser autofillAll dependent state updates fireFilled values still considered empty
SuggestionKeyboard and screen reader workMouse-only interaction
Saved addressShipping quote recalculatesPrevious quote remains

Keep the shopper in control of corrections

Show entered and suggested addresses side by side, highlight changes, and allow the original. Never silently drop an apartment or building name.

Test accept, retain, reopen, timeout, and a suggestion missing line 2.

Recalculate shipping, tax, and delivery methods

A country, region, or postcode edit can invalidate methods and change shipping, tax, thresholds, and dates. Block final submission until the new quote arrives.

Rapid edits create concurrent quotes. Apply only the result matching the latest address version.

  • Clear invalid methods after country change
  • Update shipping and tax together
  • Ignore stale quote responses
  • Preserve cart and address after failure

Billing and shipping need independent editable copies

Same as shipping may create a copy, but the two should not share a mutable object. Editing billing after unchecking must not mutate shipping.

Use the payment provider sandbox and documented triggers rather than random data for payment address checks.

shippingAddress = structuredClone(selectedAddress);
billingAddress = sameAsShipping
  ? structuredClone(shippingAddress)
  : enteredBillingAddress;

Make final submission idempotent and snapshot the address

Double clicks, timeout retries, and mobile back navigation can repeat a request. Disable repeated UI actions and use a server-side idempotency key.

Store the confirmed address snapshot and quote version on the order instead of only referencing an editable address book entry.

Mobile coverage should include the software keyboard hiding the primary action, backgrounding and restoring the page, and returning from an external payment authorization. On resume, query the existing order or idempotent request before sending another create operation.

Audit an order whose address changed twice during checkout. Its snapshot should contain the final confirmed version, its shipping quote should belong to that version, and a later edit to the shopper's address book must not rewrite the historical order.

Also test the ambiguous failure: the browser times out after submission, but the server has already created the order. A retry with the same key must return the original outcome rather than charge again or reserve inventory twice. Support tools should expose the request key, address version, and order identifier without exposing the full address in routine logs. This makes recovery testable while limiting unnecessary personal-data access.

  • Simulate double click, timeout retry, and payment return
  • Query idempotent status after page restoration
  • Match order address and quote versions
  • Reopen history after editing the address book

Frequently asked questions

Should a suggestion outage block checkout?

Not necessarily. Depending on risk, allow manual confirmation and mark the address unverified.

What changes after a postcode edit?

Recalculate delivery methods, shipping cost, dates, and relevant tax, while ignoring stale responses.

Does disabling the button prevent duplicate orders?

Not completely. The server also needs an idempotency key or equivalent retry protection.

Sources and further reading

  1. MDN: Address form autocomplete
  2. W3C WAI: Form error notification