Step-by-Step Guide — Follow each step exactly as written. Every value you need to type is spelled out. Do not improvise.

TC-MEM-004: Approval Workflow (Detailed)

Admin: admin@rcme.membervu.com / Admin123!  ·  Membership Mgr: membershipchair@demo.membervu.com / Membership123! (Elena Torres)

URLs: Frontend https://stg-rcme.membervu.com · MailHog https://stg-webmail.membervu.com
PREREQUISITE: RCME must have requireApproval: true (Member Settings → Workflow tab). If self-registration auto-approves, a registrant goes straight to ACTIVE and there is nothing to approve.
Two paths (see TC-MEM-004 summary): this detailed test covers the member-approval path (a true PENDING_APPROVAL registrant). The seeded pending@demo.membervu.com (Miguel) is a prospect/applicant and is approved via Prospects, not here. There is no seeded PENDING_APPROVAL user, so you create one in TC-APPR-01.

TC-APPR-01: Submit a Membership Application (self-registration)

StepActionExpected ResultTest Value
1In an incognito window, open https://stg-rcme.membervu.com/register.Registration page loads: First Name, Last Name, Email, Phone (international), Address, LinkedIn, Other socials (+ any tenant "Additional information" fields). No password field — the password is set later via the email link.-
2First Name Test, Last Name Applicant, Email qa-applicant-approve@test.membervu.com. Fill any required additional fields.Values entered.qa-applicant-approve@test.membervu.com
3Click "Create account".Success state: "Check your email — we've sent a verification link to …". The applicant is not logged in (approval + verification pending). Backend status = PENDING_APPROVAL.-
PASS if: the application submits and a "check your email" confirmation shows.

TC-APPR-02: Admin Approves the Pending Member

StepActionExpected ResultTest Value
1In a normal window, log in as membershipchair@demo.membervu.com / Membership123! (or admin).Dashboard loads (Elena Torres is in the default approver list).-
2Go to Members → All Members, then the "Pending" tab (/admin/members?tab=pending).The pending-approval queue loads.-
3Click "Test Applicant" (qa-applicant-approve@test.membervu.com). Confirm the status badge = PENDING_APPROVAL.Detail panel opens with inline Approve + Reject buttons.-
4Click "Approve".Success toast. Status → ACTIVE (or PENDING_PAYMENT + a dues invoice if auto-dues is on). Role PENDING_MEMBERMEMBER.-
5Open MailHog https://stg-webmail.membervu.com.An "approved" email was sent to the applicant.-
PASS if: status changed via inline Approve and the approval email was sent.

TC-APPR-03: Admin Rejects a Pending Member

StepActionExpected ResultTest Value
1Register a second applicant (qa-applicant-reject@test.membervu.com) as in TC-APPR-01.Status = PENDING_APPROVAL.qa-applicant-reject@test.membervu.com
2In the Pending tab, open "Test Rejected" → inline "Reject". An inline "Reason for rejection (optional)" textarea appears. Type Incomplete documentation - QA test"Confirm Reject".Status → REJECTED.Incomplete documentation - QA test
3Check MailHog.Rejection email sent (with reason, if the tenant includes it).-
PASS if: status → REJECTED and a rejection email was sent.

TC-APPR-04: Approve an Applicant via Prospects (application path)

StepActionExpected ResultTest Value
1As admin, go to Prospects (/admin/prospects). Find Miguel Fernandez (pending@demo.membervu.com) in the Review/Applied stage.Miguel appears (prospectStatus=APPLIED, status GUEST_ATTENDEE).-
2Click "Move to Review" (if shown), then "Approve" → the Approve Application modal opens. Select a membership type; confirm.Application approved; Miguel is provisioned as a member of the chosen type.-
Why a separate path: the inline member-approve button only accepts PENDING_APPROVAL. Miguel is GUEST_ATTENDEE, so he must be approved through the application/prospect workflow.
PASS if: the applicant is approved through the Prospects → Approve Application modal.

CLEANUP — Read Before You Stop

Test applicants (qa-applicant-approve@…, qa-applicant-reject@…) and any change to Miguel's prospect state are cleared by a reseed: docker exec membervu-backend npm run seed:rcme. They don't block other tests.