Test Cases: Member Directory
Module: Membership & Profiles - Member Directory
Endpoint: GET /api/membership/members/search (guard requireApprovedMember) — search by name/email.
Frontend: /directory (pages/DirectoryPage.tsx). Sidebar Directory is role-gated to MEMBER / ADMIN / OFFICER / MEMBERSHIP_MANAGER.
Note: the member Directory is a search tool (by name/email) for approved members — it does not have status/dues filters. Status / dues filtering + KPIs live on the admin All Members page (
/admin/members), covered in TC-MEM-003.
Prerequisites
- Logged in as an approved member (or ADMIN/OFFICER/MEMBERSHIP_MANAGER). A plain GUEST or PENDING member cannot access the directory.
Test Cases
TC-DIR-01: View Directory
| Step | Action | Expected Result |
|---|---|---|
| 1 | As Maria Cruz, sidebar Directory (/directory). | Directory loads with a "My Summary" strip (status / member-since, engagement, outstanding dues) + a search panel. |
| 2 | Verify list rows. | Each row shows avatar (or initials), name, email. |
TC-DIR-02: Search Members
| Step | Action | Expected Result |
|---|---|---|
| 1 | Type a name or email in "Search by name or email…" → click Search. | GET /api/membership/members/search; results filter to matches. Pagination (Prev/Next, "Page N of M") appears beyond 20 results. |
| 2 | Click Clear. | Search resets. |
TC-DIR-03: View a Member's Detail
| Step | Action | Expected Result |
|---|---|---|
| 1 | Click a member in the results. | Right detail panel: contact (email/phone), key dates (birthday, anniversary), upcoming events, socials, membership (Member Since + status badge), additional fields. Read-only for others; your own record shows "Edit Profile". |
TC-DIR-04: Access Control
| Step | Action | Expected Result |
|---|---|---|
| 1 | Log in as a GUEST (guest@demo.membervu.com). Confirm Directory is not in the sidebar; browse directly to /directory. | Access denied — "Directory access requires approved membership" (or redirect). The directory search API returns 401/403 for non-approved. |
| 2 | Log out entirely; browse to /directory. | Redirect to login. |