Skip to content

Invoicing Tests

Test IDDescriptionPreconditionsStepsExpected ResultPriority
INV-001Dashboard loads stats and recent invoicesUser has at least one invoice1. Navigate to /business/apps/invoicing.Dashboard displays stats (total revenue, outstanding, paid, overdue counts). Recent invoices list shows up to 5 items.P0
INV-002Dashboard shows empty stateUser has no invoices1. Navigate to /business/apps/invoicing.Stats show zero values. Empty state message or CTA to create first invoice is displayed.P1
INV-003Unauthenticated user sees null stateUser is not signed in1. Navigate to /business/apps/invoicing without auth.Page returns stats: null and recentInvoices: []. No error thrown.P1

Invoices List (/business/apps/invoicing/invoices)

Section titled “Invoices List (/business/apps/invoicing/invoices)”
Test IDDescriptionPreconditionsStepsExpected ResultPriority
INV-010List all invoicesUser has multiple invoices1. Navigate to /business/apps/invoicing/invoices.All invoices are displayed with status, customer name, amount, and date.P0
INV-011Filter by statusUser has invoices in different statuses1. Navigate to invoices list. 2. Select “Paid” from status filter.Only paid invoices are shown. URL updates with ?status=paid.P1
INV-012Filter by customerUser has invoices for multiple customers1. Navigate to invoices list. 2. Select a customer from dropdown.Only invoices for that customer are shown. URL updates with ?customer={id}.P1
INV-013Filter by date rangeUser has invoices across date ranges1. Set from and to date parameters.Only invoices within the date range are shown.P1
INV-014Search invoicesUser has invoices1. Enter a search term in the search field.Invoices matching the search term (number, customer name) are shown.P1
INV-015Combined filtersUser has diverse invoice data1. Apply status filter, customer filter, and date range simultaneously.Results reflect all active filters. Clearing one filter updates results accordingly.P2

Create Invoice (/business/apps/invoicing/invoices/new)

Section titled “Create Invoice (/business/apps/invoicing/invoices/new)”
Test IDDescriptionPreconditionsStepsExpected ResultPriority
INV-020Create invoice with valid dataAt least one customer and catalog item exist1. Navigate to /business/apps/invoicing/invoices/new. 2. Select customer. 3. Add line items from catalog. 4. Set date and due date. 5. Submit the create action.Invoice is created. User is redirected to /business/apps/invoicing/invoices/{id}.P0
INV-021Create invoice with new inline customerNo customers exist1. Navigate to create invoice page. 2. Click “Add Customer” inline. 3. Fill name, email. 4. Submit create-customer action.Customer is created. Customer ID is returned in the form message. Customer appears in the dropdown.P0
INV-022Create invoice with new inline catalog itemNo catalog items exist1. Navigate to create invoice page. 2. Click “Add Item” inline. 3. Fill name, price. 4. Submit create-catalog-item action.Catalog item is created. Item ID is returned. Item appears in the line items list.P1
INV-023Missing invoice_data rejectedNone1. Submit the create action without the invoice_data form field.Returns 400 with message “Missing invoice data”.P1
INV-024Invalid JSON in invoice_data rejectedNone1. Submit the create action with malformed JSON in invoice_data.Returns 400 with a parse error message.P1
INV-025Schema validation failureNone1. Submit create with JSON that fails createInvoiceSchema validation (e.g., missing required fields).Returns 400 with the schema validation error message.P1
INV-026Tax rates loaded on create pageUser has tax rates configured1. Navigate to create invoice page.Tax rates are available in the form for selection.P1
INV-027Unauthenticated create rejectedUser is not signed in1. Submit create action without auth.Returns 401 “Not authenticated”.P0

Invoice Detail (/business/apps/invoicing/invoices/[id])

Section titled “Invoice Detail (/business/apps/invoicing/invoices/[id])”
Test IDDescriptionPreconditionsStepsExpected ResultPriority
INV-030View invoice detailInvoice exists for user1. Navigate to /business/apps/invoicing/invoices/{id}.Invoice details are displayed: customer, line items, subtotal, tax, total, status, dates. Payment form is available.P0
INV-031Send invoiceInvoice exists in draft status1. Navigate to invoice detail. 2. Click “Send” (submit send action).Invoice is sent. sent: true returned. Invoice status updates to “sent”.P0
INV-032Delete invoiceInvoice exists1. Navigate to invoice detail. 2. Click “Delete” (submit delete action). 3. Confirm deletion.Invoice is deleted. User is redirected to /business/apps/invoicing/invoices.P0
INV-033Duplicate invoiceInvoice exists1. Navigate to invoice detail. 2. Click “Duplicate” (submit duplicate action).A new invoice is created as a copy. User is redirected to the new invoice detail page.P1
INV-034Record paymentInvoice has an outstanding balance1. Navigate to invoice detail. 2. Fill payment amount and method in the payment form. 3. Submit record-payment action.Payment is recorded. Success message “Payment recorded!” displayed. Invoice balance updates.P0
INV-035Record payment with invalid dataInvoice exists1. Submit record-payment with invalid form data (e.g., negative amount).Returns 400 with form validation errors. No payment recorded.P1
INV-036Access another user’s invoiceInvoice belongs to a different user1. Navigate to /business/apps/invoicing/invoices/{other-user-id}.Returns 403 Forbidden. Invoice data is not exposed.P0
INV-037Non-existent invoice returns 404None1. Navigate to /business/apps/invoicing/invoices/{nonexistent-id}.Returns 404 “Invoice not found”.P1

Edit Invoice (/business/apps/invoicing/invoices/[id]/edit)

Section titled “Edit Invoice (/business/apps/invoicing/invoices/[id]/edit)”
Test IDDescriptionPreconditionsStepsExpected ResultPriority
INV-040Load edit form with existing dataInvoice exists for user1. Navigate to /business/apps/invoicing/invoices/{id}/edit.Form is pre-populated with invoice data. Customers, catalog items, and tax rates are loaded.P0
INV-041Update invoiceInvoice exists1. Modify customer, date, due date, note, or shipping. 2. Submit update action.Invoice is updated. User is redirected to invoice detail page.P0
INV-042Create customer inline during editNone1. On edit page, submit create-customer action with valid data.Customer is created. Customer ID is returned for selection.P1
INV-043Update with missing data rejectedNone1. Submit update action without invoice_data field.Returns 400 “Missing data”.P1
INV-044Access control on edit pageInvoice belongs to another user1. Navigate to edit page for another user’s invoice.Returns 403.P0

Customers (/business/apps/invoicing/customers)

Section titled “Customers (/business/apps/invoicing/customers)”
Test IDDescriptionPreconditionsStepsExpected ResultPriority
INV-050List customersUser has customers1. Navigate to /business/apps/invoicing/customers.All customers are displayed.P0
INV-051Search customersUser has multiple customers1. Enter search term in search field.Filtered customer list is displayed.P1
INV-052Create customerNone1. Fill customer form (name, email, company, address fields). 2. Submit create action.Customer is created. Success message “Customer created!” displayed. Customer appears in list.P0
INV-053Create customer with validation errorsNone1. Submit create with empty required fields.Returns 400 with form validation errors.P1

Customer Detail (/business/apps/invoicing/customers/[id])

Section titled “Customer Detail (/business/apps/invoicing/customers/[id])”
Test IDDescriptionPreconditionsStepsExpected ResultPriority
INV-060View customer detailCustomer exists1. Navigate to /business/apps/invoicing/customers/{id}.Customer details displayed. Associated invoices listed. Edit form pre-populated.P0
INV-061Update customerCustomer exists1. Modify customer fields. 2. Submit update action.Customer updated. Success message “Customer updated!” displayed.P1
INV-062Delete customerCustomer exists with no linked invoices1. Submit delete action.Customer is deleted. deleted: true returned.P1
INV-063Delete customer with linked invoicesCustomer has associated invoices1. Submit delete action.Returns 400 with “Cannot delete” message. Customer is not deleted.P1
INV-064Non-existent customer returns 404None1. Navigate to /business/apps/invoicing/customers/{nonexistent-id}.Returns 404 “Customer not found”.P1

Catalog (/business/apps/invoicing/catalog)

Section titled “Catalog (/business/apps/invoicing/catalog)”
Test IDDescriptionPreconditionsStepsExpected ResultPriority
INV-070List catalog itemsUser has catalog items1. Navigate to /business/apps/invoicing/catalog.All catalog items displayed with name and price.P0
INV-071Create catalog itemNone1. Fill item form (name, description, price). 2. Submit create action.Item created. Success message “Item added!” displayed.P0
INV-072Create catalog item with invalid dataNone1. Submit create with empty name or invalid price.Returns 400 with validation errors.P1
INV-073Delete catalog itemItem exists1. Submit delete action with item id.Item deleted. deleted: true returned.P1
INV-074Delete catalog item in useItem referenced by an invoice line item1. Submit delete action.Returns 400 “Cannot delete” or item is deleted depending on cascade rules. Verify behavior matches spec.P2

Payments (/business/apps/invoicing/payments)

Section titled “Payments (/business/apps/invoicing/payments)”
Test IDDescriptionPreconditionsStepsExpected ResultPriority
INV-080List paymentsUser has recorded payments1. Navigate to /business/apps/invoicing/payments.All payments displayed with amount, date, invoice reference, and method.P0
INV-081Empty payments listUser has no payments1. Navigate to payments page.Empty state displayed. No errors.P1

Quotations (/business/apps/invoicing/quotations)

Section titled “Quotations (/business/apps/invoicing/quotations)”
Test IDDescriptionPreconditionsStepsExpected ResultPriority
INV-090List quotationsUser has quotations1. Navigate to /business/apps/invoicing/quotations.All quotations displayed.P0
INV-091Empty quotations listNo quotations exist1. Navigate to quotations page.Empty state displayed.P1

Create Quotation (/business/apps/invoicing/quotations/new)

Section titled “Create Quotation (/business/apps/invoicing/quotations/new)”
Test IDDescriptionPreconditionsStepsExpected ResultPriority
INV-100Create quotation with valid dataAt least one customer exists1. Navigate to /business/apps/invoicing/quotations/new. 2. Select customer. 3. Add line items. 4. Submit create action.Quotation created. User is redirected to /business/apps/invoicing/quotations.P0
INV-101Create quotation with inline customerNone1. Submit create-customer action on quotation creation page.Customer created. ID returned for selection.P1
INV-102Create quotation with inline catalog itemNone1. Submit create-catalog-item action on quotation creation page.Item created. ID returned for use.P1
INV-103Missing quotation data rejectedNone1. Submit create without quotation_data field.Returns 400 “Missing data”.P1
INV-104Invalid quotation data rejectedNone1. Submit create with malformed JSON.Returns 500 with error message.P1

Settings (/business/apps/invoicing/settings)

Section titled “Settings (/business/apps/invoicing/settings)”
Test IDDescriptionPreconditionsStepsExpected ResultPriority
INV-110Load settingsUser has settings configured1. Navigate to /business/apps/invoicing/settings.Settings form pre-populated with current values. Tax rates listed.P0
INV-111Update settingsNone1. Modify settings (company info, default note, numbering). 2. Submit update-settings action.Settings saved. Success message “Settings saved!” displayed.P0
INV-112Update settings with invalid dataNone1. Submit update-settings with invalid form data.Returns 400 with validation errors.P1
INV-113Create tax rateNone1. Fill tax rate form (name, percentage). 2. Submit create-tax action.Tax rate created. Success message “Tax rate added!” displayed.P1
INV-114Create tax rate with invalid dataNone1. Submit create-tax with empty name or invalid percentage.Returns 400 with validation errors.P1
INV-115Delete tax rateTax rate exists1. Submit delete-tax action with tax rate id.Tax rate deleted. taxDeleted: true returned.P1
INV-116First-time settings loadNo settings exist yet1. Navigate to settings as new user.Page loads gracefully with empty/default form. No errors.P2