- The right UI renders for each public journey state.
- Buttons call the actions exposed by the current
JourneyView. - Gates show generic, customer-safe messaging.
- A granted handoff sends the consumer to the next app step.
- Sensitive runtime values are not sent to third-party logs.

Recommended coverage
Run against the public harness
The@fanfare-io/fanfare-sdk-core/harness subpath ships an in-browser, fetch-intercepting mock of the Fanfare consumer API. It lets you run and verify a real integration end to end without a live Fanfare environment: queue positions count down per poll, draws resolve, and gates accept the test OTP and access codes.
installHarnessMockServer(options?) returns:
The harness intercepts
window.fetch, so it is browser-only. Install it from a client effect, never during SSR. Pair it with environment: "development" and point apiUrl at the returned apiBaseUrl.scenario option (or install several with scenarios). The available HarnessScenarioKey values are:
"queue","auth-queue","access-code-queue","admission-cycle","queue-denied""waitlist-queue","waitlist-lifecycle""upgrade-offer-queue","upgrade-offer-multi-queue""draw","auth-draw","draw-denied""timed-release","timed-release-completion""appointment""auction"
"424242" (overridable via the otpCode option). Access-code scenarios accept "VIP123"; the multi-tier upgrade scenario additionally accepts "SUPER123".
Component integration tests
For React custom UI, wrap your Fanfare usage behind a small app-level component boundary so tests can provide controlled journey states.LaunchExperienceView with representative JourneyView values (one per journeyStage, and per sequence.phase for routed). Keep SDK network behavior in a smaller number of integration tests.
Manual QA checklist
- Start from a clean browser profile.
- Repeat with an existing session.
- Open the same experience in two tabs.
- Verify loading, gated, participating, granted, ended, and error copy.
- Confirm checkout receives only the values it needs.
- Confirm analytics use high-level outcomes rather than raw grants or snapshots.