SUCCEEDED/FAILED (not "APPROVED"/"REJECTED"); live Paynamics flows are untestable now (no prod credentials, events currently free).
URLs in this section were NOT migrated to the staging-subdomain form (
stg-rcme.membervu.com) in the 2026-06-10 env pass — they will be corrected during the rewrite.
Reference:
_bmad-output/test-artifacts/test-reviews/test-guide-html-staleness-audit-2026-06-10.md
Test Cases: Payment Submission
Module: Payments - Payment Submission
Backend Endpoints: POST /api/billing/payments, POST /api/billing/member/invoices/:invoiceId/pay
Frontend Pages:
- Member:
mmp/frontend/pwa-app/src/pages/MemberPaymentsPage.tsx - Checkout:
mmp/frontend/pwa-app/src/pages/EventCheckoutPage.tsx
Prerequisites
- User logged in with MEMBER or higher role.
- At least one pending/overdue invoice exists for the user.
- Payment channels are enabled and configured.
Test Data
| Field | Value |
|---|---|
| Payer | Maria Cruz (MEMBER) |
| Invoice | INV-2024-0002 or new pending invoice |
| Amount | PHP 15,000.00 |
| Payment Method | Bank Transfer (BDO) |
| Reference Number | BDO-TEST-12345 |
| Payment Proof | payment_proof_gcash.jpg |
Test Cases
TC-PAY-001: Submit Payment for Pending Invoice
| Step | Action | Expected Result |
|---|---|---|
| 1 | Login as Maria Cruz (MEMBER). | Member dashboard displayed. |
| 2 | Navigate to My Invoices. | Invoice list displayed. |
| 3 | Click on a pending invoice. | Invoice detail page displayed. |
| 4 | Click "Pay Now" button. | Payment form/modal opens. |
| 5 | Select payment method: Bank Transfer. | Bank details displayed (BDO account number). |
| 6 | Enter reference number: BDO-TEST-12345. | Reference entered. |
| 7 | Enter payment date: Today. | Date populated. |
| 8 | Upload payment proof (optional but recommended). | File uploaded successfully. |
| 9 | Click "Submit Payment". | API POST /api/billing/payments called. |
| 10 | Verify success message. | "Payment submitted for approval" displayed. |
| 11 | Verify payment status. | Payment shows as "PENDING" (awaiting admin approval). |
TC-PAY-002: Submit Payment via GCash
| Step | Action | Expected Result |
|---|---|---|
| 1 | Open pending invoice. | Invoice displayed. |
| 2 | Click "Pay Now". | Payment options displayed. |
| 3 | Select "GCash" as payment method. | GCash details shown (number: 0917-123-4567). |
| 4 | Enter reference: 9171234567-001. | Reference entered. |
| 5 | Upload payment screenshot. | Screenshot uploaded. |
| 6 | Submit payment. | Payment submitted successfully. |
| 7 | Verify. | Payment recorded with method "GCASH". |
TC-PAY-003: Submit Payment Without Proof
| Step | Action | Expected Result |
|---|---|---|
| 1 | Open pending invoice and click Pay Now. | Payment form opens. |
| 2 | Fill in payment details. | - |
| 3 | Skip payment proof upload. | - |
| 4 | Submit payment. | Warning displayed (if proof required) or allowed with warning. |
| 5 | Verify submission. | Payment submitted (may be flagged for manual verification). |
TC-PAY-004: Submit Partial Payment
| Step | Action | Expected Result |
|---|---|---|
| 1 | Open invoice with amount PHP 15,000. | Invoice displayed. |
| 2 | Click "Pay Now". | Payment form opens. |
| 3 | Enter amount: PHP 5,000 (partial). | Partial amount accepted. |
| 4 | Fill remaining details and submit. | Payment submitted. |
| 5 | Verify invoice status. | Shows "PARTIALLY_PAID" after approval. |
| 6 | Verify balance. | Balance due: PHP 10,000. |
TC-PAY-005: Submit Payment - Invalid Reference Format
| Step | Action | Expected Result |
|---|---|---|
| 1 | Open payment form. | - |
| 2 | Enter invalid reference (e.g., empty or special characters). | - |
| 3 | Submit payment. | Validation error: "Valid reference number required". |
TC-PAY-006: Submit Payment - Invalid Amount
| Step | Action | Expected Result |
|---|---|---|
| 1 | Open payment form for invoice amount PHP 15,000. | - |
| 2 | Enter amount: PHP 0. | Validation error: "Amount must be greater than 0". |
| 3 | Enter amount: PHP -100. | Validation error: "Invalid amount". |
| 4 | Enter amount: PHP 10,000 (more than invoice). | Warning or error about overpayment. |
TC-PAY-007: Submit Payment - File Upload Errors
| Step | Action | Expected Result |
|---|---|---|
| 1 | Open payment form. | - |
| 2 | Attempt to upload invalid file type (.exe). | Error: "Invalid file type. Allowed: JPG, PNG, PDF". |
| 3 | Attempt to upload oversized file (> 5MB). | Error: "File too large. Maximum 5MB". |
| 4 | Upload valid JPG < 5MB. | Upload successful. |
TC-PAY-008: Submit Payment for Already Paid Invoice
| Step | Action | Expected Result |
|---|---|---|
| 1 | Navigate to a PAID invoice (INV-2024-0001). | Invoice displayed. |
| 2 | Look for "Pay Now" button. | Button not visible or disabled. |
| 3 | Attempt direct API call. | Status 400 Bad Request - "Invoice already paid". |
TC-PAY-009: Submit Payment for Voided Invoice
| Step | Action | Expected Result |
|---|---|---|
| 1 | Navigate to a VOIDED invoice (INV-2024-0004). | Invoice displayed. |
| 2 | Attempt payment. | Not allowed - "Cannot pay voided invoice". |
TC-PAY-010: Duplicate Payment Prevention
| Step | Action | Expected Result |
|---|---|---|
| 1 | Submit payment for invoice with reference REF-001. | Payment submitted. |
| 2 | Submit another payment with same reference REF-001. | Warning: "Duplicate reference detected" or blocked. |
TC-PAY-011: Submit Payment via Online Gateway (TraxionPay)
| Step | Action | Expected Result |
|---|---|---|
| 1 | Open pending invoice. | Invoice displayed. |
| 2 | Click "Pay Now". | Payment options displayed. |
| 3 | Select "Pay Online" (TraxionPay). | Redirect to TraxionPay gateway. |
| 4 | Complete payment on gateway (test mode). | Payment processed. |
| 5 | Return to MemberVu. | Success page displayed. |
| 6 | Verify payment status. | Automatically marked as PAID (no manual approval needed). |
TC-PAY-012: Payment Confirmation Email
| Step | Action | Expected Result |
|---|---|---|
| 1 | Submit payment successfully. | Payment submitted. |
| 2 | Check email (Juan's inbox). | Payment confirmation email received. |
| 3 | Verify email content. | Contains payment details, invoice reference, amount, date. |
API Test Cases
TC-PAY-API-001: POST /api/billing/payments - Valid Submission
Request:
{
"invoiceId": "INV-2024-0002",
"amount": 15000,
"paymentMethod": "BANK_BDO",
"referenceNumber": "BDO-TEST-12345",
"paymentDate": "2024-01-27",
"notes": "Transferred via BDO mobile"
}
Expected Response: 201 Created
{
"id": "PAY-2024-XXXX",
"invoiceId": "INV-2024-0002",
"amount": 15000,
"status": "PENDING",
"paymentMethod": "BANK_BDO",
"referenceNumber": "BDO-TEST-12345",
"createdAt": "timestamp"
}
TC-PAY-API-002: POST /api/billing/payments - Missing Required Fields
Request:
{
"invoiceId": "INV-2024-0002"
}
Expected Response: 400 Bad Request
{
"error": "VALIDATION_ERROR",
"details": {
"amount": "Required",
"paymentMethod": "Required"
}
}
TC-PAY-API-003: POST /api/billing/payments - Non-Existent Invoice
Request:
{
"invoiceId": "INVALID-ID",
"amount": 15000,
"paymentMethod": "BANK_BDO",
"referenceNumber": "REF-123"
}
Expected Response: 404 Not Found
{
"error": "INVOICE_NOT_FOUND"
}
TC-PAY-API-004: POST /api/billing/payments with Proof Upload
Request: multipart/form-data
invoiceId: INV-2024-0002amount: 5000paymentMethod: GCASHreferenceNumber: 9171234567-001proofFile: (binary image data)
Expected Response: 201 Created with proofUrl in response