TC_ADMIN_005: Seed Data Verification
Test Case Information
| Field | Value |
|---|---|
| Test ID | TC_ADMIN_005 |
| Module | Platform Administration |
| Priority | P1 - Critical |
| Type | Data Verification |
| Prerequisites | Seed script executed |
Objective
Verify all test data (events, invoices, membership types) exists and is correctly configured.
Seed Script Reference
# Run seed (safe upserts)
docker exec membervu-backend npm run seed:rcme
Reset and reseed (destructive)
docker exec membervu-backend npm run seed:rcme -- --reset
Test Steps
Step 1: Verify Membership Types
Query:
SELECT name, "amountCents", currency, period, "isActive"
FROM "MembershipType"
WHERE "tenantId" = (SELECT id FROM "Tenant" WHERE slug = 'rcme');
Expected Data:
| Name | Amount (cents) | Currency | Period | Active |
|---|---|---|---|---|
| Regular Member | 1500000 | PHP | ANNUAL | true |
| Associate Member | 1000000 | PHP | ANNUAL | true |
| Check | Result |
|---|---|
| Regular Member exists | [ ] |
| Associate Member exists | [ ] |
| Amounts correct | [ ] |
| Both active | [ ] |
Step 2: Verify Test Events
Query:
SELECT slug, title, status, visibility, "priceCents", capacity
FROM "Event"
WHERE "tenantId" = (SELECT id FROM "Tenant" WHERE slug = 'rcme')
ORDER BY slug;
Expected Data:
| Slug | Title | Status | Visibility | Price (cents) | Capacity |
|---|---|---|---|---|---|
| e2e-free-event | E2E Test - Free Social Event | PUBLISHED | PUBLIC | 0 | 50 |
| e2e-paid-event | E2E Test - Paid Gala Event | PUBLISHED | PUBLIC | 300000 | 100 |
| e2e-past-event | E2E Test - Past Event | COMPLETED | MEMBERS_ONLY | 100000 | 30 |
| Check | Result |
|---|---|
| Free event exists | [ ] |
| Paid event exists | [ ] |
| Past event exists | [ ] |
| Status values correct | [ ] |
| Price values correct | [ ] |
Via UI:
- Login as admin
- Navigate to /admin/events
- Verify all 3 events appear
- Verify status badges correct
Step 3: Verify Test Invoices
Query:
SELECT
i."invoiceNumber",
m.email as "memberEmail",
i.status,
i."amountCents",
i.description
FROM "Invoice" i
JOIN "Member" m ON i."memberId" = m.id
WHERE i."tenantId" = (SELECT id FROM "Tenant" WHERE slug = 'rcme')
ORDER BY i."invoiceNumber";
Expected Data:
| Invoice # | Member Email | Status | Amount (cents) | Description |
|---|---|---|---|---|
| E2E-INV-001 | testmember@rcme.membervu.com | PAID | 1500000 | Annual Dues (Paid) |
| E2E-INV-002 | pending-payment@demo.membervu.com | OUTSTANDING | 1500000 | Annual Dues (Pending) |
| E2E-INV-003 | pending-payment@demo.membervu.com | OVERDUE | 300000 | Event Registration (Overdue) |
| E2E-INV-004 | testmember@rcme.membervu.com | CANCELLED | 100000 | Cancelled Registration |
| E2E-INV-005 | expired@demo.membervu.com | OVERDUE | 1500000 | Renewal Dues (Overdue) |
| Check | Result |
|---|---|
| 5 invoices exist | [ ] |
| Status values correct | [ ] |
| Member links correct | [ ] |
| Amounts correct | [ ] |
Via UI:
- Login as treasurer
- Navigate to /admin/invoices
- Verify all 5 invoices appear
- Use status filter to verify each status
Step 4: Verify Member Records
Query:
SELECT
email,
"firstName",
"lastName",
status,
"membershipApplicationStatus",
roles
FROM "Member"
WHERE "tenantId" = (SELECT id FROM "Tenant" WHERE slug = 'rcme')
ORDER BY email;
Expected Data (12 members):
| First Name | Last Name | Status | App Status | Roles | |
|---|---|---|---|---|---|
| admin@rcme.membervu.com | Admin | User | ACTIVE | APPROVED | [ADMIN] |
| comms@demo.membervu.com | Comms | Manager | ACTIVE | APPROVED | [COMMUNICATIONS_MANAGER] |
| events@demo.membervu.com | Events | Manager | ACTIVE | APPROVED | [EVENT_MANAGER] |
| expired@demo.membervu.com | Expired | Member | EXPIRED | APPROVED | [MEMBER] |
| guest@demo.membervu.com | Guest | User | ACTIVE | APPROVED | [] |
| testmember@rcme.membervu.com | Active | Member | ACTIVE | APPROVED | [MEMBER] |
| membershipchair@demo.membervu.com | Membership | Manager | ACTIVE | APPROVED | [MEMBERSHIP_MANAGER] |
| officer@rcme.membervu.com | Officer | Readonly | ACTIVE | APPROVED | [OFFICER] |
| pending@demo.membervu.com | Pending | Applicant | PENDING_VERIFICATION | APPLIED | [] |
| pending-payment@demo.membervu.com | Pending | Payment | PENDING_PAYMENT | APPROVED | [MEMBER] |
| superadmin@zeniark.com | Super | Admin | ACTIVE | APPROVED | [ADMIN, SUPER_ADMIN] |
| treasurer@demo.membervu.com | Treasurer | Finance | ACTIVE | APPROVED | [FINANCE_MANAGER] |
| Check | Result |
|---|---|
| 12 members exist | [ ] |
| Status values correct | [ ] |
| Roles assigned correctly | [ ] |
Step 5: Verify User-Member Linking
Query:
SELECT
u.email,
u.roles as "userRoles",
u."platformRoles",
m.roles as "memberRoles",
m.status as "memberStatus"
FROM "User" u
JOIN "Member" m ON u."memberId" = m.id
WHERE u."tenantId" = (SELECT id FROM "Tenant" WHERE slug = 'rcme')
ORDER BY u.email;
| Check | Result |
|---|---|
| All users linked to members | [ ] |
| User roles match member roles | [ ] |
| Super admin has platformRoles | [ ] |
Step 6: Verify Event Dates
Query:
SELECT slug, "startsAt", "endsAt",
CASE
WHEN "startsAt" > NOW() THEN 'FUTURE'
WHEN "endsAt" < NOW() THEN 'PAST'
ELSE 'CURRENT'
END as timing
FROM "Event"
WHERE "tenantId" = (SELECT id FROM "Tenant" WHERE slug = 'rcme');
| Event | Expected Timing |
|---|---|
| e2e-free-event | FUTURE (~14 days) |
| e2e-paid-event | FUTURE (~30 days) |
| e2e-past-event | PAST (~30 days ago) |
| Check | Result |
|---|---|
| Free event is future | [ ] |
| Paid event is future | [ ] |
| Past event is past | [ ] |
Step 7: Verify Invoice Dates
Query:
SELECT
"invoiceNumber",
"issuedAt",
"dueAt",
"paidAt",
CASE
WHEN "dueAt" < NOW() AND status != 'PAID' THEN 'OVERDUE'
ELSE 'OK'
END as "dueStatus"
FROM "Invoice"
WHERE "tenantId" = (SELECT id FROM "Tenant" WHERE slug = 'rcme');
| Invoice | Due Status |
|---|---|
| E2E-INV-001 | OK (paid) |
| E2E-INV-002 | OK (future due date) |
| E2E-INV-003 | OVERDUE |
| E2E-INV-004 | OK (cancelled) |
| E2E-INV-005 | OVERDUE |
Pass/Fail Criteria
| Criteria | Required |
|---|---|
| 2 membership types exist | Yes |
| 3 events exist with correct status | Yes |
| 5 invoices exist with correct status | Yes |
| 12 members exist with correct status | Yes |
| All user-member links valid | Yes |
| Date calculations correct | Yes |
Troubleshooting
Missing Data
# Reseed completely
docker exec membervu-backend npm run seed:rcme -- --reset
Wrong Tenant
# Verify tenant ID
docker exec membervu-backend npx prisma db execute --stdin <<< \
"SELECT id, slug FROM \"Tenant\" WHERE slug = 'rcme';"
Stale Dates
Seed script uses relative dates (daysFromNow, daysAgo). Reseed if dates have drifted.
Result Summary
| Data Type | Count | Status | Notes |
|---|---|---|---|
| Membership Types | /2 | [ ] Pass | |
| Events | /3 | [ ] Pass | |
| Invoices | /5 | [ ] Pass | |
| Members | /12 | [ ] Pass | |
| User-Member Links | /12 | [ ] Pass | |
| Overall | [ ] Pass |
Tester: _________________
Date: _________________