TC-EVT-002: Event Registration — Free RSVP (Detailed)

Step-by-Step Guide — Follow each step exactly as written. All values are provided — do not improvise.
USE A REAL EVENT. Wherever this guide says "QA Test Coffee Meetup", use any real upcoming FREE event from /events instead — the seed always creates a free RCME Check-in Test Event dated today, which is ideal. The old fictional "QA Test …" events do not exist. Sign-in from a public event page opens a login modal (not a full-page redirect).
Module
Events & Registrations — Free RSVP Flow
Staging Frontend
https://stg-rcme.membervu.com
Staging MailHog
https://stg-webmail.membervu.com
Tenant
RCME (Rotary Club of Manila Expats)
Target Event
Any real upcoming FREE event (e.g. RCME Check-in Test Event, today)
Priority
P1

TC-REG-FREE-01: Member RSVP for Free Event

StepActionExpected ResultTest Value
1 Open a browser and navigate to the login page. Login page loads. https://stg-rcme.membervu.com/login
2 Log in as the test member (Maria Cruz). Dashboard loads. testmember@rcme.membervu.com / Member123!
3 Click "Events" in the sidebar. Events catalog loads with upcoming events.
4 Find and click on "QA Test Coffee Meetup". Event detail page loads. Shows: title, date (next Saturday), time (10:00 AM), venue (The Brewery at The Palace). Price shows "FREE" or no price. An "RSVP" or "Register" button is visible. QA Test Coffee Meetup
5 Click the "RSVP" or "Register" button. A confirmation dialog may appear, or registration happens immediately. You should see a success message: "You're registered!" or similar toast notification.
6 Observe the event detail page after registration. The "Register" button is replaced with a "Registered" badge or status. Buttons like "Cancel Registration" or "View Ticket" may now appear.
7 Open a new tab and navigate to MailHog. MailHog inbox loads. https://stg-webmail.membervu.com
8 Find and click the confirmation email sent to testmember@rcme.membervu.com. Email contains: event name ("QA Test Coffee Meetup"), date, time, venue, and possibly a ticket code (e.g., TIX-XXXX).
9 Go back to the app. Navigate to "My Events" or "My Registrations" (sidebar or profile section). "QA Test Coffee Meetup" appears in the list of registered events with status "Confirmed" or "Registered".

TC-REG-FREE-02: Cancel RSVP

StepActionExpected ResultTest Value
1 While logged in as testmember, navigate to the "QA Test Coffee Meetup" event detail page. Event detail page loads. You see a "Cancel Registration" or "Cancel RSVP" button. QA Test Coffee Meetup
2 Click "Cancel Registration" or "Cancel RSVP". A confirmation dialog appears asking you to confirm cancellation.
3 Click "Confirm" or "Yes, Cancel". Success message: "Registration cancelled" or similar. The page reverts to showing a "Register" / "RSVP" button again.
4 Check MailHog for a cancellation email. A cancellation confirmation email should be sent to testmember@rcme.membervu.com with the event name and cancellation details. https://stg-webmail.membervu.com
5 Navigate to "My Events". "QA Test Coffee Meetup" should no longer appear in active registrations, or it should show a "Cancelled" status.

TC-REG-FREE-03: Re-Register After Cancellation

🆕 #637 — active-only unique index (reverses #448 reactivate-in-place). The unique constraint on EventRegistration is now partial / active-only: (tenantId, eventId, attendeeMemberId) WHERE status <> 'CANCELLED'. Cancelling and re-registering for the same event now inserts a brand-new row (new id) instead of reactivating the old one. Because the free-event check-in code is a deterministic hash of registration.id, the re-registration gets a fresh check-in code / QR — different from the one issued before cancellation. The cancelled row is retained for audit history, not deleted.
StepActionExpected ResultTest Value
1 Before cancelling, open the My Ticket tab for your existing "QA Test Coffee Meetup" registration and note/copy the check-in code (and/or screenshot the QR). A check-in code is displayed, e.g. A1B2C3. Record this value — it is the "before" code. QA Test Coffee Meetup
2 Cancel the registration (see TC-REG-FREE-02), then navigate back to the "QA Test Coffee Meetup" event detail page. Registration status is CANCELLED; the spot frees up (capacity count increases by 1). The "RSVP" or "Register" button is available again.
3 Click "RSVP" or "Register". Registration succeeds. Success message appears. Per #637, the backend inserts a new EventRegistration row (new id) rather than reactivating the cancelled one.
4 Open the My Ticket tab again and compare the new check-in code / QR to the one recorded in Step 1. The check-in code is different from the "before" value (e.g. D4E5F6A1B2C3) — a fresh row means a fresh code. It is not byte-identical to the pre-cancellation code.
5 Verify "My Events" shows the event again. "QA Test Coffee Meetup" appears with "Confirmed" status, tied to the new registration row.
6 (If admin access available) Check the event's Registration tab / attendance list for this member's history. Both the original CANCELLED registration and the new active registration are visible — the cancelled row is retained, not deleted. Multiple CANCELLED rows can coexist for the same member+event over repeated cancel/re-register cycles.
7 While the new registration is active, attempt to register again for the same event (re-click "Register" if still exposed, or call POST /api/events/:id/register directly). No duplicate active row is created — the idempotency guard returns the existing active registration (only one non-cancelled row per member+event is ever allowed).

TC-REG-FREE-04: Already Registered — Duplicate Prevention

StepActionExpected ResultTest Value
1 Navigate to the "QA Test Coffee Meetup" event detail page (you should already be registered from TC-REG-FREE-03). Event detail page loads. QA Test Coffee Meetup
2 Look at the action buttons. You should see "Registered" status and/or "Cancel Registration". The "Register" button should NOT be present.
3 If a "Register" button is still visible, click it. System blocks the action with: "You are already registered" or shows existing registration without creating a duplicate.

TC-REG-FREE-05: Guest User RSVP for Public Free Event

StepActionExpected ResultTest Value
1 Log out of testmember. Log in as the guest user (Roberto Mendoza). Dashboard loads for guest. guest@demo.membervu.com / Guest123!
2 Navigate to "Events" and find "QA Test Coffee Meetup". The PUBLIC free event is visible to the guest user. QA Test Coffee Meetup
3 Click on the event to open its detail page. Event detail page loads. An "RSVP" or "Register" button is visible.
4 Click "RSVP" or "Register". Registration succeeds with a success message. Guest users should be able to RSVP for public free events.
5 Check MailHog for confirmation email sent to guest@demo.membervu.com. Confirmation email received with event details. https://stg-webmail.membervu.com

TC-REG-FREE-06: Expired Member RSVP Behavior

WARNING: Expired members may or may not be allowed to register for free events depending on the tenant configuration. Document the actual behavior observed.
StepActionExpected ResultTest Value
1 Log out. Log in as the expired member. Dashboard loads (may show expired membership notice). expired@demo.membervu.com / Expired123!
2 Navigate to Events and find "QA Test Coffee Meetup". The PUBLIC event should be visible. QA Test Coffee Meetup
3 Click on the event and attempt to RSVP. Option A: Registration succeeds (expired members allowed for free events).
Option B: Registration blocked with message like "Your membership has expired" or "Please renew your membership."
Record which behavior you observe.
4 Log out of the expired account. Redirected to login page.

CLEANUP

Registrations created during this test:

  1. testmember@rcme.membervu.com registered for "QA Test Coffee Meetup" (keep for TC-EVT-006 check-in tests)
  2. guest@demo.membervu.com registered for "QA Test Coffee Meetup" (keep for TC-EVT-006)
  3. expired@demo.membervu.com may be registered for "QA Test Coffee Meetup" (cancel if desired)

Do NOT cancel the testmember and guest registrations if you plan to run TC-EVT-006 (Check-in & Attendance).