test(form-builder): public form API — 36 new tests covering S2c deliverables
Eight new feature test files under tests/Feature/Api/V1/Public/FormBuilder/.
Full suite 857 → 893 green.
- PublicFormSchemaResourceTest (3) — TAG_PICKER available_tags grouped
by category, tag_categories filter, version + opened_at top-level.
- PublicFormTimeSlotsTest (4) — volunteer-only filter, festival
children included, 410 TOKEN_EXPIRED on rotated-past-grace, 404
SCHEMA_NOT_FOUND on unknown token.
- PublicFormSectionsTest (2) — show_in_registration + type=standard
filter, dedup-by-name across festival children.
- PublicFormDraftLifecycleTest (8) — POST creates draft (201),
idempotent replay returns 200 w/ same id, idempotency_key required,
PUT partial update increments auto_save_count, submit happy path,
409 SUBMISSION_ALREADY_SUBMITTED on re-submit, schema_drift flagged
when organiser edits mid-draft, 404 when submission_id belongs to
another schema.
- PublicFormValidationTest (6) — EMAIL format, NUMBER type, SELECT
option list, NUMBER min/max from validation_rules, required-at-submit
enforcement, draft-save tolerates missing required.
- PublicFormSubmissionResourceTest (3) — no PII echo
(public_submitter_name/email/ip suppressed), admin metadata
(review_status/schema_snapshot/reviewed_by) absent, identity_match
shape with Dutch message on pending.
- PublicFormErrorEnvelopeTest (5) — SCHEMA_NOT_FOUND, TOKEN_EXPIRED,
SCHEMA_UNPUBLISHED codes; 422 VALIDATION_FAILED carries errors; 429
RATE_LIMITED carries Retry-After header.
- IdentityMatchOnSubmitTest (5) — event_registration triggers
matched/none/pending per person state; non-event_registration purpose
does not trigger; public-subject submissions write pending.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>