Files
picpeak/backend
Paul Nothaft 997a85cdbc test(crm): mint-path integration tests — quote send, invoice storno, contract countersign (#850)
* test(crm): mint-path integration tests — quote send, invoice storno, contract countersign (#587)

End-to-end through the real HTTP → route → service → DB → email-queue →
file pipeline on full-migration SQLite (helpers/crmDb), real pdfkit/
pdf-lib rendering, no mock-fs, no network. 7 tests.

Deviations from the issue spec — the tests pin the code's real behavior:
- Storno route is POST /:id/cancel (not /:id/storno), responds 200 with
  { cancelled, stornoId } (not 201).
- Quote re-send rejects with 409 (not 400).
- Contract statuses are signed_by_customer → fully_signed; the hash
  columns are pdf_sha256 / signed_pdf_sha256 (no integrity_hash) — the
  test verifies the stored sha256 against the file on disk.
- Business-doc PDFs persist under process.cwd()/storage/business-docs,
  not STORAGE_PATH — isolated via chdir into the temp dir.

Two documented, test-scoped harness workarounds: shrunk pool acquire
timeout (guards against the pre-existing logActivity-inside-transaction
deadlock in createContract/createStorno on single-connection SQLite —
worth its own fix) and Date→ISO binding normalization (node-sqlite3's
cross-realm Date detection under jest's vm sandbox).

Assisted-by: task agent (worktree)

* test(crm): pin sendStorno side effects + real customer-sign flow (codex review of #850)

- Storno test now asserts the delivery leg cancelInvoice deliberately
  swallows on failure: storno status 'sent', PDF on disk, storno_issued
  email queued to the customer — a broken render/persist/queue no
  longer stays green.
- Contract seed goes through sendContract's token + a real
  recordCustomerSignature instead of a direct status UPDATE, so
  countersign exercises the signature-layering path; the test now also
  pins that the customer's signature asset survives countersigning.

* test(crm): prove both signature stamps are embedded in the countersigned PDF (codex review of #850, round 2)

Path/hash assertions alone stay green if countersign stamps the admin
onto the unsigned base PDF. New pdf-lib helper counts embedded image
XObjects per page of the final document and asserts the signature page
carries at least two — customer stamp AND admin stamp.
2026-07-19 22:36:38 +02:00
..