d0523fcc2d
- P0: CLI verify now honors test budget with seeded multi-sample - P0: Observe sampling enforced via Math.random() gate in hook-validator - P1: Remove misleading undici-mock-agent isolation option - P1: Qualify reuses shared discoverRouteDetails() with warnings - P1: Chaos/scenario config exposed via preset schema - P1: README/docs limitations updated to current state - P2: Nested response annotations prefer 2xx deterministically - P2: --changed documented as heuristic in verify.md - Add observe sink tests (sampling 0/1, sink failure non-interference) - Add verify runs regression tests (scale, determinism, variants) - Add configured-scenario qualify test (independent of OAuth fixture) - Add coverageBreakdown to qualify artifacts (per-gate route coverage) - Add production-style observe example with real sink in docs/observe.md - Add nightly/staging vs PR gating guidance to docs/qualify.md - Enrich VerifyFailure with formula-aware diagnostics: status:201 => 'HTTP 200', body field checks => actual values - Remove stale observe CLI activation message - Document outbound mocks as process-global in getting-started.md - Refresh APOPHIS_ADOPTION_AUDIT.md with current state 903 tests pass, build clean, typecheck clean.
36 lines
903 B
TypeScript
36 lines
903 B
TypeScript
import Fastify from 'fastify'
|
|
import apophisPlugin from '@apophis/fastify'
|
|
|
|
const fastify = Fastify()
|
|
|
|
// APOPHIS auto-registers @fastify/swagger
|
|
await fastify.register(apophisPlugin, {})
|
|
|
|
// Behavioral contract: what you send is what you get back.
|
|
// This is not a structural test — the schema already validates shape.
|
|
// This checks that the server does not mutate or drop fields.
|
|
fastify.post('/echo', {
|
|
schema: {
|
|
'x-category': 'observer',
|
|
'x-ensures': [
|
|
'response_body(this) == request_body(this)'
|
|
],
|
|
body: {
|
|
type: 'object',
|
|
properties: { message: { type: 'string' } }
|
|
},
|
|
response: {
|
|
200: {
|
|
type: 'object',
|
|
properties: { message: { type: 'string' } }
|
|
}
|
|
}
|
|
}
|
|
}, async (req) => req.body)
|
|
|
|
await fastify.ready()
|
|
|
|
// Run contract tests
|
|
const result = await fastify.apophis.contract({ runs: 10 })
|
|
console.log(result.summary)
|