FIELD NOTES · ACCEPTANCE EXERCISES

Save draft and send enquiry need distinct request intent

The commissioning decision

A membership organisation offers Save draft and Send enquiry on one form. If the request discards the clicked button, both actions can look identical downstream. Agree a finite action code and the server-side rules for each action before accepting a shared form as complete.

Source and claim boundary

A submit button with a name contributes its value when it is the submitter. requestSubmit can specify that submitter. MDN · Checked 16 October 2026.

Filled synthetic acceptance cases

Synthetic teaching data, not client records. Review the inputs and expected outcomes before running the isolated browser exercise. On narrow screens, scroll the table.

InputCheckExpected
name=action value=draftFormData(form, draftButton)action=draft
name=action value=sendFormData(form, sendButton)action=send
FormData(form) without submitterAction evidenceNo action key

How to verify beyond appearance

  1. Define which fields and permissions are required for draft versus final submission.
  2. Compare the two submitter payloads in the browser fixture.
  3. Verify that the receiving test endpoint rejects an unknown action and never treats a draft as a sent message.

Interpret the result

The fixture distinguishes intent, not an actual saved or delivered record. A server should whitelist action values and apply its own validation and authorisation. Retain both payloads and two resulting test states. Browser button text may change with translation; a stable action code should not silently change with it.

What this does not prove

FormData submitter support must be checked in the supported browser range. This example does not implement a workflow engine or email delivery.

Runnable fixture and handover record

Open the browser acceptance fixture · Read the test source。The fixture creates temporary elements with synthetic values inside the browser. It reads no account, uploads no file, and sends no email or form. Record the browser version, check name, observed value and pass state. Keep real integration evidence separate: a local pass is not a live delivery result.