@prume/testkit
v0.1.1
Published
Neutral test fixtures: temp git repos, snapshot normalization, committed test repo factories.
Readme
@prume/testkit
Neutral test fixtures shared between this repository and downstream consumers. Contains no backend driver — backend-spawning harnesses live in the package that owns the backend (per ADR-0013).
Public API
import {
withTempRepo,
isolatedGitEnv,
normalize,
ensureSchema,
withEmptyFixture,
withSimpleModifyFixture,
withMultiHunkMultiFileFixture,
type BackendUnderTest,
} from "@prume/testkit";withTempRepo(callback, options?)
Creates an isolated tmp git repository (with a deterministic identity and
an initial commit), passes its absolute path to the callback, and removes
the directory on success or failure. Set options.readme: null to skip the
initial commit.
isolatedGitEnv()
Returns a process.env-shaped object with HOME, XDG_CONFIG_HOME,
GIT_CONFIG_GLOBAL, etc. set to dummy values so spawned git processes do
not pick up the user's real git config.
normalize(body, opts?)
Walks an arbitrary JSON-shaped value and replaces volatile substrings with stable placeholders so contract snapshots are stable across runs and machines.
opts.repoPath— replaces every occurrence of the absolute path with<repo>(handles macOS/private/...resolution).opts.replacements— additional[from, to]pairs applied last.
Default substitutions:
- ISO 8601 timestamps →
<ts> - UUIDs →
<uuid> - 40-char SHAs →
<sha> - Volatile keys (
request_id,created_at,updated_at,last_updated,timestamp,elapsed_ms,duration_ms,build_commit,build_timestamp,issued_at) →<volatile>
with{Empty,SimpleModify,MultiHunkMultiFile}Fixture(callback)
Committed test-repo factories. Each lays down a deterministic working tree
inside withTempRepo before handing control to the callback. See
src/fixtures/ for the exact contents and the spec catalog (Section 29.4).
BackendUnderTest
Free-form interface for the multi-backend contract harness. Concrete implementations live with the backend they drive.
ensureSchema(schema, value)
Thin wrapper around schema.parse(value) that returns a typed value.
