Skip to main content

Quotations — Test Cases

Manual acceptance test cases for the quotation flows. See Quotation Lifecycle concept and the quotation guides for context.


TC-QUO-001 — Create a draft quotation with multiple line items

Verifies: Create a Quotation

Preconditions:

  • Logged in as Office (with quotations.create).
  • A test customer exists.
  • At least 3 items exist in the catalogue.

Steps:

  1. Navigate to Quotations -> Add Quotation.
  2. Pick the customer.
  3. Pick Lead Type: call.
  4. Enter Lead Source: Test — referral from Acme.
  5. Add 3 line items with quantities and prices.
  6. Set Discount Rate to 5 (5%).
  7. Save.

Expected:

  • Quotation is created with status pending.
  • Subtotal, discount line, tax line, and total all reflect the items entered.
  • Quotation is editable (not yet submitted).
  • A unique guid is assigned (visible in the URL or details).

TC-QUO-002 — Sending a quotation locks editing

Verifies: Send a Quotation, Quotation Lifecycle

Preconditions:

  • The quotation from TC-QUO-001 exists with status pending.
  • Logged in as Office (with quotations.send).
  • The customer on the quotation has at least one email or WhatsApp number on record.

Steps:

  1. Open the quotation.
  2. Select the Send to Customer action.
  3. Pick at least one channel (email or WhatsApp).
  4. Confirm.
  5. After sending, attempt to edit a line item.

Expected:

  • Status moves to submitted.
  • The quotation is locked: line item fields, customer, address, and lead fields are all read-only (or the edit controls are hidden).
  • Adding notes and photos is still allowed.
  • The quotation's notified_at is stamped.

TC-QUO-003 — Public quotation URL works without login

Verifies: Quotation Lifecycle, QR Codes concept

Preconditions:

  • A submitted quotation exists with guid <guid>.

Steps:

  1. Copy the URL /q/<guid>.
  2. Open it in an incognito browser (no login).

Expected:

  • Public quotation page loads.
  • It shows: customer name, line items, prices, totals, Accept/Reject actions.
  • It does not show: cost basis, internal notes, technician info, related work orders, the office's view.

TC-QUO-004 — Send quotation by email reaches all customer emails

Verifies: Send a Quotation, Customers concept

Preconditions:

  • The customer on the quotation has two emails set: a@example.com and b@example.com.
  • The quotation is submitted.

Steps:

  1. Open the quotation.
  2. Select the Send by Email action.
  3. Confirm.

Expected:

  • Both a@example.com and b@example.com receive the notification (verify via mail trap, log, or test inbox).
  • The quotation's notified_at is set to the current timestamp.
  • The notified_via array includes email.

TC-QUO-005 — Convert an accepted quotation to multiple work orders

Verifies: Convert a Quotation to Work Orders, Quotation Lifecycle

Preconditions:

  • A quotation is accepted (move it manually if needed).
  • The quotation has line items split across at least 2 logical jobs.
  • Logged in as Office or Supervisor (with work_orders.create, which gates conversion).

Steps:

  1. Open the quotation.
  2. Select the Convert to Work Orders action.
  3. Group the line items into 2 work orders.
  4. Confirm.

Expected:

  • 2 work orders are created, each carrying the quotation's customer.
  • Each work order has quotation_id set to the source quotation.
  • The quotation's detail view lists both work orders.
  • The quotation status remains accepted until all work orders complete (then can move to fulfilled).

TC-QUO-006 — Cancelling a quotation prevents further actions

Verifies: Quotation Lifecycle

Preconditions:

  • A submitted quotation exists.
  • Logged in as Office.

Steps:

  1. Open the quotation.
  2. Select the Cancel action.
  3. Confirm.

Expected:

  • Status moves to cancelled.
  • The quotation is locked (no edits, no convert action).
  • The public /q/<guid> URL still resolves but shows the cancelled state.
  • A new quotation can be created for the same customer with corrections.