Pre-Merge Regression
Purpose
Use this checklist before shipping changes that touch gigs, expenses, receipts, invoices, expense statements, delivery, seller profile, or admin workflows.
This page gives the tester a single path through the product. Some detailed journeys live on separate pages and are linked where they fit.
Preconditions
- You can sign in to the environment being tested.
- The environment has at least one client. If it does not, create one during the client checks.
- You know whether email and Google Drive delivery are configured for this environment.
- For local testing, the app is running and the automated checks have already passed.
For local development, engineers usually run:
./verify.sh
./run-dev.sh
Core Smoke Journey
Steps
- Sign in.
- Open Clients and confirm the client list loads.
- Open Gigs and confirm existing gigs load.
- Open Invoices and confirm existing invoices load.
- Open user settings or seller profile and confirm the modal opens and closes.
- Refresh the page and confirm the same data returns without session issues.
Expected Results
Navigation, session state, and core reads are healthy.
Cross-Workspace Navigation Shortcuts
Steps
- Open Gigs and select a gig with a known client.
- Click the client name in the gig overview.
- Confirm the app opens Clients with that client selected.
- Open Invoices and select an invoice with a known client.
- Click the client name in the invoice overview.
- Confirm the app opens Clients with that client selected.
- Open the same invoice line-items pane.
- Click a generated line-item title for a performance fee, mileage, passenger mileage, or expense line.
- Confirm the app opens Gigs with the corresponding gig selected.
- Confirm manual adjustment lines are not shown as gig links.
Expected Results
Cross-workspace shortcuts preserve the intended target record, clear stale search filters that would hide the target, and leave unrelated records unchanged.
Editor Navigation Regression Checks
Purpose
These checks guard against unsaved edits being discarded while moving between records.
Clients
- Open Clients, select a client, and click
Edit. - Change a field without saving.
- Select a different client in the list and decline the discard prompt.
- Confirm the original client remains selected and the unsaved edit remains visible.
- Select the different client again and accept the discard prompt.
- Confirm the editor updates to the newly selected client.
- Change a field again, click
New client, and decline the discard prompt. - Click
New clientagain and accept the discard prompt.
Expected result: unsaved client edits are never discarded without confirmation. Accepted navigation switches the editor to the selected client or a blank new-client form.
Client Deletion
- Open Clients and select a client with gigs or invoice history.
- Confirm
Deleteis disabled and the helper text explains the blocking records. - Select a client with no gigs and no invoices.
- Click
Delete, decline the confirmation prompt, and confirm the client remains. - Click
Deleteagain, accept the confirmation prompt, and confirm the client is removed from the list.
Expected result: clients cannot be deleted silently. Deletion is only available after explicit confirmation and only when the client has no gig or invoice records.
Gigs
- Open Gigs, select a gig, and click
Edit gig. - Change a field or add an unsaved expense row.
- Select a different gig in the list and decline the discard prompt.
- Confirm the original gig remains selected and the unsaved edit remains visible.
- Select the different gig again and accept the discard prompt.
- Confirm the editor updates to the newly selected gig.
- Change a field again, click
New gig, and decline the discard prompt. - Click
New gigagain and accept the discard prompt.
Expected result: unsaved gig edits and unsaved expense draft fields are never discarded without confirmation. Accepted navigation switches the editor to the selected gig or a blank new-gig form.
Admin
- Open Admin as an administrator, select a user, and click
Edit access. - Change a field without saving.
- Select a different user in the list and decline the discard prompt.
- Confirm the original user remains selected and the unsaved edit remains visible.
- Select the different user again and accept the discard prompt.
- Confirm the editor updates to the newly selected user.
- Change a field again, click
Add user, and decline the discard prompt. - Click
Add useragain and accept the discard prompt.
Expected result: unsaved admin access edits are never discarded without confirmation. Accepted navigation switches the editor to the selected user or a blank add-user form.
Gig To Invoice Journey
Steps
- Create a client or choose an existing client.
- Create a gig with fee, date, venue, status
Planned, and at least one expense. - Save the gig.
- Generate an invoice from that gig.
- Open the invoice.
- Confirm invoice lines include the performance fee and chargeable expenses.
- Download the PDF.
- Return to the gig.
- Confirm the gig shows as invoiced and links back to the invoice.
Expected Results
Generating an invoice links the gig, creates expected lines, and produces a downloadable PDF.
Editing An Invoiced Gig
Purpose
This guards against accidental invoice changes when a linked gig is edited.
Status-Only Change
- Start with a gig that is already linked to an invoice.
- Edit the gig.
- Change only the gig status between
Planned,Completed, andDraft. - Save.
- Open the linked invoice.
Expected result: no prompt appears, the gig remains linked to the invoice, and invoice lines are unchanged.
Invoice-Relevant Change
- Edit the same linked gig.
- Change an invoice-relevant field such as fee, title, date, venue, or expenses.
- Save.
Expected result: if the linked invoice is a draft, the app asks whether to regenerate the draft. If accepted, the draft invoice lines and PDF update. If declined, the existing invoice stays unchanged. Issued invoices are not silently changed.
Cancelling A Gig With A Linked Invoice
Steps
- Start with a gig linked to an invoice.
- Edit the gig.
- Change status to
Cancelled. - Save.
Expected Results
The app asks whether to cancel the linked invoice. If accepted and the invoice status allows cancellation, the invoice moves to Cancelled. If declined, the gig is cancelled but the invoice remains unchanged.
Deleting A Gig
Positive Check
- Create or identify an uninvoiced gig with status
Planned. - Select the gig in Gigs.
- Confirm the
Delete gigbutton is red and enabled. - Click
Delete gigand decline the confirmation prompt. - Confirm the gig remains in the list.
- Click
Delete gigagain and accept the confirmation prompt.
Expected result: the planned, uninvoiced gig is removed from the list and cannot be reopened.
Negative Checks
- Select a gig with status
Draft,Completed, orCancelled. - Confirm
Delete gigis disabled and explains that only planned gigs can be deleted. - Select a planned gig that is linked to an invoice.
- Confirm
Delete gigis disabled and explains that gigs with linked invoices cannot be deleted.
Expected result: only planned gigs with no linked invoice can be deleted. Linked invoice history is never removed by deleting a gig.
Cloning A Gig
Without Expenses
- Create or identify a saved gig with a fee, date, venue, notes, and driving details.
- Select the gig in Gigs.
- Click
Clone gig. - If the gig has expenses, decline the expenses prompt.
- Confirm a new gig is created and immediately opens in the edit pane.
- Confirm the cloned gig has the same core details as the original, has no linked invoice, and has no copied expenses.
- Change at least one identifying detail, such as date or title, then save.
Expected result: cloning creates a separate gig record, opens it for editing straight away, and never copies invoice linkage.
With Expenses
- Select a saved gig with at least one expense and, ideally, at least one receipt attachment.
- Click
Clone gig. - Accept the expenses prompt.
- Confirm the cloned gig opens in the edit pane with copied expense descriptions and amounts.
- Confirm copied expenses have no receipt attachments.
- Save the cloned gig, then generate an invoice from it.
Expected result: expenses are copied only when accepted, receipt attachments are not copied, and any invoice generated from the clone is a new invoice linked only to the cloned gig.
Combined Invoice Journey
Steps
- Create two uninvoiced gigs for the same client.
- Select both gigs in the gig list.
- Generate a combined invoice.
- Confirm the generated invoice preview modal opens.
- Download the PDF or open the invoice.
Expected Results
One invoice is created, both gigs are linked, invoice lines are ordered sensibly by gig date and line type, and the generated PDF can be previewed before navigating away.
Negative Check
- Select gigs from different clients.
- Try to generate a combined invoice.
Expected result: the app blocks generation and explains that selected gigs must belong to the same client.
Monthly Invoice Journey
Steps
- Create or identify multiple uninvoiced gigs for the same client in the same month.
- Open the client.
- Choose the month.
- Generate a monthly invoice.
- Confirm the generated invoice preview modal opens.
- Download the PDF or open the invoice.
Expected Results
The invoice is created as a draft, linked gigs remain linked, lines are generated after redraft, and the PDF can be previewed and downloaded.
Detailed Journeys
Run the focused pages when the change touches those areas, or when the pre-merge path exposes a concern:
Regression Notes
Pay special attention to workflows that cross boundaries:
- Editing gigs should not silently mutate historical or issued invoices.
- Draft invoice regeneration should happen only after an explicit user choice.
- Receipt attachment changes should not mutate reimbursement status.
- Reimbursement status should affect future generated documents, not old PDFs.
- Expense statements are projections and should not create invoices or mutate gig invoice links.
When a manual journey reveals a bug, record the exact steps and tell the engineer or release owner. The fix should usually include an automated backend test for the server-side rule, and the frontend flow may later become an automated browser test.