Test Cases: Invoice Creation

Module: Billing & Invoicing - Invoice Creation

Backend Endpoint: POST /api/billing/invoices, POST /api/billing/admin/invoices

Frontend Page: frontend/pwa-app/src/pages/AdminInvoicesPage.tsx

Prerequisites

Test Data

FieldValue
CreatorAna Reyes (FINANCE_MANAGER)
Target MemberMaria Cruz (MEM-2024-0004)
Invoice TypeManual Invoice
Line Item 1Annual Dues - PHP 15,000.00
Line Item 2Late Fee - PHP 500.00
TotalPHP 15,500.00
Due DateCurrent Month + 30 days

Test Cases

TC-BIL-001: Create Manual Invoice Successfully

StepActionExpected Result
1Login as Ana Reyes (FINANCE_MANAGER).Dashboard displayed.
2Navigate to Admin > Invoices.Invoice list page displayed.
3Click "Create Invoice" button.Invoice creation form opens.
4Select member: Maria Cruz.Member details auto-populated.
5Add line item: "Annual Dues" - PHP 15,000.00.Line item added to invoice.
6Add line item: "Late Fee" - PHP 500.00.Second line item added. Total shows PHP 15,500.00.
7Set due date: Current Month + 30 days.Due date field populated.
8Click "Create Invoice".API POST /api/billing/invoices called.
9Verify API response.Status 201 Created. Invoice number generated (format: INV-YYYY-XXXX).
10Verify invoice list.New invoice appears in list with status "PENDING".

TC-BIL-002: Create Invoice with Multiple Line Items

StepActionExpected Result
1Open invoice creation form.Form displayed.
2Select member: Maria Cruz.-
3Add 5 different line items with varying amounts.All items displayed with subtotals.
4Verify total calculation.Total equals sum of all line items.
5Create invoice.Invoice created with all 5 line items preserved.
6View invoice details.All line items displayed correctly.

TC-BIL-003: Create Invoice - Validation Errors

StepActionExpected Result
1Open invoice creation form.Form displayed.
2Click "Create Invoice" without selecting member.Validation error: "Member is required".
3Select member but add no line items.Validation error: "At least one line item required".
4Add line item with amount 0 or negative.Validation error: "Amount must be greater than 0".
5Add line item with empty description.Validation error: "Description is required".
6Set due date in the past.Warning displayed (may allow based on business rules).

TC-BIL-004: Create Invoice - Permission Denied

StepActionExpected Result
1Login as Maria Cruz (MEMBER role).Member dashboard displayed.
2Attempt to navigate to Admin > Invoices.Access denied or menu not visible.
3Attempt direct API call POST /api/billing/invoices.Status 403 Forbidden.

TC-BIL-005: Create Invoice for Pending Member

StepActionExpected Result
1Login as FINANCE_MANAGER.-
2Open invoice creation form.-
3Search for Miguel Fernandez (PENDING_APPROVAL status).Member found in search.
4Attempt to create invoice.System should warn or prevent (business rule dependent).

TC-BIL-006: Create Invoice - Duplicate Prevention

StepActionExpected Result
1Create invoice for Maria Cruz - "Annual Dues 2024".Invoice created successfully.
2Attempt to create another invoice with same description for same period.Warning displayed about potential duplicate.
3Confirm to proceed if allowed.Duplicate created (if business rules allow).

TC-BIL-007: Create Invoice with Notes

StepActionExpected Result
1Open invoice creation form.-
2Fill required fields.-
3Add internal notes: "Follow up if not paid by due date".Notes field accepts text.
4Add customer-facing notes: "Thank you for your membership".Notes field accepts text.
5Create invoice.Invoice created with both note types.
6View invoice details.Internal notes visible to admin only. Customer notes visible to member.

API Test Cases

TC-BIL-API-001: POST /api/billing/invoices - Valid Request

Request:

{

"memberId": "MEM-2024-0004",

"dueDate": "2024-02-28",

"lines": [

{ "description": "Annual Dues 2024", "amount": 15000 },

{ "description": "Late Fee", "amount": 500 }

],

"notes": "Manual invoice for dues collection"

}

Expected Response: 201 Created

{

"id": "uuid",

"invoiceNumber": "RCME-DUES-XXXX",

"memberId": "MEM-2024-0004",

"total": 15500,

"status": "PENDING",

"dueDate": "2024-02-28",

"createdAt": "timestamp",

"createdBy": "treasurer@demo.membervu.com"

}

TC-BIL-API-002: POST /api/billing/invoices - Invalid Member

Request:

{

"memberId": "INVALID-ID",

"dueDate": "2024-02-28",

"lines": [{ "description": "Test", "amount": 100 }]

}

Expected Response: 404 Not Found or 400 Bad Request

{

"error": "MEMBER_NOT_FOUND",

"message": "Member not found"

}

TC-BIL-API-003: POST /api/billing/invoices - Unauthorized

Headers: No auth token or invalid token

Expected Response: 401 Unauthorized