Commit e6b9b7e
test(substrate): expand coverage via mock.module — claim/complete/fail/lease-recovery paths
Closes the test-gap finding from arc0btc #4 and secret-mars: prior
suite covered only `resolveSubstrateConfig`, `jobRowToTaskInput`, and
two write-back *early-return* guards via a fakeDb that threw if
touched. Claim, complete, fail, epoch-mismatch no-op, transient
write-back throw, and lease recovery — the "highest correctness
surface" per the PR's own Commit-2 description — were untested.
Rewires the file to use `mock.module("@genesis-works/substrate-db", ...)`
with mock fns per substrate-db export. Local DB is a real
`openDb(:memory:)` so `enqueueTask` exercises the actual sqlite write
path. console.{info,error,warn} are spied per-test for log-line
assertions.
New tests (18, alongside 10 existing for 28 total):
- `runSubstrateIntakeTick`:
- happy claim → enqueues local task, returns `claimed=true` with
correct epoch + jobId, emits `[substrate] claim ...` log
- null claim → silent (no `[substrate] claim` log line; just
`claimed: false`)
- db-unreachable → catches `claimNextJob` throw, logs
`reason=db-unreachable`
- local-enqueue-fail → forces `enqueueTask` to throw by closing the
local db, asserts catch fires + log line includes
`reason=local-enqueue-fail jobs.id=<id>` (proves Copilot #4 /
arc0btc #1 fix is wired)
- `runSubstrateWriteBack`:
- non-substrate source no-op (existing — kept)
- missing `_substrate_job_id` no-op (existing — kept)
- complete happy → calls `completeJob` with `claim_epoch` arg,
`[substrate] complete jobs.id=... epoch=...` log
- complete `{ ok: false }` → emits self-contained fallback
`[substrate] complete-failed` log (proves secret-mars #5 fix)
- complete throws → catches transient PG blip, emits
`[substrate] write-back error=... jobs.id=...` (proves arc0btc #3
fix is wired — write-back no longer propagates out of `runOnce`)
- fail happy → calls `failJob`, logs reason snippet
- fail `{ ok: false }` → emits `[substrate] fail-failed` fallback
- `runSubstrateLeaseRecovery`:
- released > 0 → logs `[substrate] lease-recovery released=<n>`
- released = 0 → no log (quiet success)
- throws → catches, logs `[substrate] lease-recovery error=...`,
does NOT propagate
- `createSubstrateConnection`:
- throws when `substrate.host` is unset (proves Copilot #3 fix —
no implicit default to a hard-coded private IP)
- throws on whitespace-only host
- `jobRowToTaskInput`:
- asserts `payload.idempotency_key = "substrate-<job_id>-e<epoch>"`
(proves idempotency-key threading is wired)
- asserts `priority = 1`
- asserts `_substrate_*` payload fields threaded
- asserts `max_attempts = 1` (substrate handles retry)
- existing source / subject-fallback tests kept
Header comment rewritten to match what's actually covered (Copilot #7).
Unused `mock`/`beforeEach`/`afterEach` imports replaced with the ones
actually used (Copilot #6 — though now they ARE used, so the prior nit
naturally resolves).
Test count: 143 total (28 substrate + 115 existing) — up from 125.
`bunx tsc --noEmit` clean.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent 478a4a3 commit e6b9b7e
1 file changed
Lines changed: 431 additions & 162 deletions
0 commit comments