Read first — testing as a guest user. The attendee-facing portal runs as the site Guest User.
To faithfully reproduce guest permissions, always open the Experience site link in an
incognito / private browser window (or a browser where you are not logged into Salesforce).
If you open it in a normal window while logged in as an admin, you will be authenticated and will not see what a real attendee sees —
masking FLS or sharing gaps that would break in production.
Shell data has already been created in JFKBox for this walkthrough (one Stakeholder, one Class with a Part 1 + Part 2 session, and one pre-registered Contact with both enrollments). Direct links are in Section 2. Re-create anytime with
scripts/anon/uat_shell_data.apex.
1. Environment & key links
| What | URL / value |
|---|---|
| Internal (admin) base |
https://jfk-citiri--jfkbox.sandbox.lightning.force.com |
| Admin app to use | (Console app). The training objects (Class, Class Session, Class Enrollment) aren't pinned tabs in CitiriOS — reach them via the App Launcher search box or the direct record links in Section 2. |
| Guest portal (Training Registration) Open in incognito | https://jfk-citiri--jfkbox.sandbox.my.site.com/training |
Production note. These hosts contain the sandbox suffix
--jfkbox.sandbox. At go-live the equivalents drop the suffix (e.g. jfk-citiri.lightning.force.com and jfk-citiri.my.site.com/training). Rebuild the links per environment.
2. Shell records (created in JFKBox)
| Record | Purpose | Open |
|---|---|---|
Stakeholder AccountUAT Stakeholder - JFK Training (V2) |
Drives the first dropdown in the portal. Has Allow FAM Self Registration = true. |
Account |
ClassUAT Class - Familiarization (V2 Test) |
Category = Placeholder Category 1. Linked to the Stakeholder via the junction below. |
Class |
| Class Stakeholder (junction) | Joins the Class to the Stakeholder so it appears once a Stakeholder + Category are chosen. | Junction |
Session — Part 1UAT Class - Part 1 |
Upcoming, self-reg enabled, capacity 20, starts in 7 days. | Part 1 |
Session — Part 2UAT Class - Part 2 |
Upcoming, self-reg enabled, capacity 20, starts in 14 days (after Part 1). | Part 2 |
ContactUAT Tester One |
Pre-registered attendee for the admin-side completion / cancellation tests (Section 4). | Contact |
| Enrollment — Part 1 | Status Confirmed. Flip to Completed to test badge automation. |
Enroll 1 |
| Enrollment — Part 2 | Status Confirmed. Use for completion + cancellation tests. |
Enroll 2 |
3. How to run this UAT (best practices)
Grounded in current Salesforce UAT guidance (SFDC Developers, TestMonitor, Apex Hours):
- Freeze the sandbox. No metadata deploys into JFKBox during the test window, so every tester sees the same state.
- Mirror real permissions. Admin steps run as a System Administrator; guest steps run as the unauthenticated Guest User (hence incognito). Don't "test as admin" the guest portal.
- Test the whole story, not features. Each scenario below is an end-to-end flow (register → confirm → complete → badge), not an isolated field check.
- One action, one observable result per step. Every step has an … line. Mark Pass/Fail against it — avoid vague "it works".
- Include negative scenarios. Section 6 covers empty fields and invalid date order. Don't only test the happy path.
- Log results centrally. Record Pass/Fail/Blocked + screenshots in the results table (or your tracker). Triage defects daily.
- Written sign-off. The business owner signs off in writing at the end — not "looks good".
4. Guest-user walkthrough — the registration portal Incognito
Open in incognito. Launch a private window and go to
https://jfk-citiri--jfkbox.sandbox.my.site.com/training.
Do not log in. If you see a Salesforce login or your admin name in the corner, you're not testing as a guest — close it and reopen incognito.
Scenario G1 — Happy-path registration (both parts)
- In the incognito window, open the portal link. The registration component loads with no login prompt and no error banner.
- Step 1 — Stakeholder & Category. Open the Stakeholder dropdown and choose
UAT Stakeholder - JFK Training (V2).The Stakeholder appears in the list. - Open the Category dropdown and choose
Placeholder Category 1.Only classes for that stakeholder + category appear;UAT Class - Familiarization (V2 Test)is listed. - Select the class and continue. Advances to session selection.
- Step 2 — Sessions. Pick the Part 1 session, then the Part 2 session. Both upcoming sessions show date/time in Eastern Time with seats remaining; Part 2's date is after Part 1's.
- Step 3 — Attendee details. Enter First name, Last name, a real Email you can access, phone, and complete any PPE / consent inputs shown. Required fields validate; you cannot continue with blanks.
- Step 4 — Review & submit. Confirm the summary, then click Submit / Register. A success confirmation is shown on screen.
- Check the inbox for the email you entered. A confirmation email arrives, From the org-wide address, times shown in Eastern Time, with a QR code and a link back to the site. No badge "tier" wording.
Verify the guest registration landed (switch to admin)
- In your normal (logged-in) browser, open the UAT Class → Related → sessions, or query Enrollments.
A new Contact was created for the attendee, with one
Confirmedenrollment on Part 1 and one on Part 2. - Confirm the seats-remaining count on each session dropped by 1 versus the capacity of 20.
5. Platform-side walkthrough — admin automations Logged-in admin
Scenario A1 — Completion sets badge + completion flag
- Open Enrollment — Part 1 and set Status = Completed; Save.
- Open Enrollment — Part 2 and set Status = Completed; Save.
- Open UAT Tester One.
Badged__c = trueandTraining Completed = trueon the Contact. The completion is tier-independent (no Badge Level required). - If a completion email is configured, the attendee receives a "training complete" email with no tier wording.
Scenario A2 — Cancellation notification
- On either enrollment, set Status = Cancelled; Save. A cancellation email (
JFK Cancellation Email) is sent to the attendee with the session details and site link. Only one email — no duplicate.
Scenario A3 — No-Show batch Optional
- Set a Part 1 enrollment to a non-completed status and run the batch from :
Database.executeBatch(new NoShowProcessor_Batch(), 200);Downstream Part 2 enrollment is cancelled by the batch, and the batch's own notification fires without a duplicate from the generic cancellation handler (it is suppressed during the batch).
6. Negative scenarios (run these too)
| # | Test (where) | Steps | Expected |
|---|---|---|---|
| N1 | Portal — Step 3 guest | Leave a required field (e.g. Email) blank and try to continue. | Inline validation blocks progress; clear error message; no record created. |
| N2 | Portal — Step 2 guest | Attempt to pick a Part 2 session that is before the chosen Part 1 session (if any exist). | Selection is rejected client-side; the server also rejects out-of-order parts (defense in depth). |
| N3 | Portal — Step 1 guest | Pick a Stakeholder, then a Category that has no classes. | Empty/"no classes" state — no error, no orphan selection. |
| N4 | Guest access guest | While incognito, confirm you never see internal-only fields or other attendees' data. | Only the registration UI is visible; no record sidebars, no other contacts (FLS/sharing enforced). |
7. Results log & sign-off
| Scenario | Tester | Date | Pass / Fail / Blocked | Notes / defect link |
|---|---|---|---|---|
| G1 — Happy-path registration | ||||
| A1 — Completion → badge | ||||
| A2 — Cancellation email | ||||
| A3 — No-Show batch | ||||
| N1 — Required field | ||||
| N2 — Part order | ||||
| N3 — Empty category | ||||
| N4 — Guest isolation |
Sign-off. Business owner: ____________________ Date: __________ —
"I confirm the scenarios above pass and the V2 training self-registration solution meets requirements for go-live."