JFK Training V2 — UAT Testing Walkthrough

End-to-end test script for the V2 self-registration solution. Target org: JFKBox (sandbox). Assumes the Go-Live Configuration Runbook is already complete (fields, layouts, email config, and the Experience site swapped to the new LWC).

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

WhatURL / value
Internal (admin) base
Lightning app — log in normally
https://jfk-citiri--jfkbox.sandbox.lightning.force.com
Admin app to use App Launcher → "CitiriOS" (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
If a blank/redirect page appears, try …/training/s (Aura sites serve pages under /s).
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)

All links open the record in the internal Lightning UI. Log in as an admin first, then click.

RecordPurposeOpen
Stakeholder Account
UAT Stakeholder - JFK Training (V2)
Drives the first dropdown in the portal. Has Allow FAM Self Registration = true. Account
Class
UAT 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 1
UAT Class - Part 1
Upcoming, self-reg enabled, capacity 20, starts in 7 days. Part 1
Session — Part 2
UAT Class - Part 2
Upcoming, self-reg enabled, capacity 20, starts in 14 days (after Part 1). Part 2
Contact
UAT 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):

4. Guest-user walkthrough — the registration portal Incognito

This is the core attendee experience: the jfkTrainingRegistration LWC. Run it exactly as an attendee would.

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)

  1. In the incognito window, open the portal link.
    The registration component loads with no login prompt and no error banner.
  2. Step 1 — Stakeholder & Category. Open the Stakeholder dropdown and choose UAT Stakeholder - JFK Training (V2).
    The Stakeholder appears in the list.
  3. Open the Category dropdown and choose Placeholder Category 1.
    Only classes for that stakeholder + category appear; UAT Class - Familiarization (V2 Test) is listed.
  4. Select the class and continue.
    Advances to session selection.
  5. 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.
  6. 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.
  7. Step 4 — Review & submit. Confirm the summary, then click Submit / Register.
    A success confirmation is shown on screen.
  8. 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)

  1. In your normal (logged-in) browser, open the UAT ClassRelated → sessions, or query Enrollments.
    A new Contact was created for the attendee, with one Confirmed enrollment on Part 1 and one on Part 2.
  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

Uses the pre-registered UAT Tester One Contact + enrollments so you can test automation without re-running the portal. Open the CitiriOS app, or use the direct links.

Scenario A1 — Completion sets badge + completion flag

  1. Open Enrollment — Part 1 and set Status = Completed; Save.
  2. Open Enrollment — Part 2 and set Status = Completed; Save.
  3. Open UAT Tester One.
    Badged__c = true and Training Completed = true on the Contact. The completion is tier-independent (no Badge Level required).
  4. If a completion email is configured, the attendee receives a "training complete" email with no tier wording.

Scenario A2 — Cancellation notification

  1. 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

  1. Set a Part 1 enrollment to a non-completed status and run the batch from Developer Console → Debug → Open Execute Anonymous:
    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)StepsExpected
N1Portal — 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.
N2Portal — 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).
N3Portal — Step 1 guest Pick a Stakeholder, then a Category that has no classes. Empty/"no classes" state — no error, no orphan selection.
N4Guest 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

Record one row per scenario. Attach screenshots for any Fail/Blocked. Triage defects daily; deploy fixes in batches so testers don't lose progress.

ScenarioTesterDatePass / Fail / BlockedNotes / 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."

Cleanup: the UAT shell records are prefixed UAT for easy identification. Delete the Account, Class, Contact, sessions, junction, and enrollments after testing, or keep them in the sandbox for regression. The guest run also creates one real attendee Contact — remove it too if you want a clean slate.