Home › Test reports › Webhooks Done Right (for Stripe)

v1.0.022/22 tests passedProduct pageRaw TEST-REPORT.md

This is the TEST-REPORT.md shipped inside the download, shown unedited. "Tested by SkillHammer" is SkillHammer's own claim, backed by this report. It is not a third-party certification.

TEST REPORT: Webhooks Done Right (for Stripe) v1.0.0

Run from a clean unzipped copy of the dist zip (fresh npm install / pip install). Started 2026-10-17 06:14:54 BST (UTC+01:00), finished 2026-10-17 06:15:02 BST (UTC+01:00) (times from date at run time). Box: Linux, Node v24.22.0, Python 3.13.5.

Result: 22/22 passed (Node 11/11 + Python 11/11). The TypeScript typecheck is clean.

Scope: the tests cover rules 1 to 5 in SKILL.md (raw body, correct secret, replay window, idempotency, status codes). Rules 6 to 9 (respond quickly, ordering, fulfilment events, API version) are guidance and are not covered by tests. Method: fixtures are signed locally. Node uses stripe-node's generateTestHeaderString; Python uses tests/signing.py, which follows Stripe's documented HMAC scheme. The real Stripe libraries (stripe-node 19.x, stripe-python 16.x) then check the signatures. No live Stripe deliveries were used.

Node: cd node && npm test

✔ valid signature -> 200 and handler runs once (29.376597ms)
✔ wrong secret -> 400, handler not called (5.751572ms)
✔ tampered body -> 400 (3.099571ms)
✔ re-serialised JSON (key order/whitespace changed) -> 400: raw body matters (2.71328ms)
✔ stale timestamp (older than 300s tolerance) -> 400 replay protection (2.944077ms)
✔ missing header -> 400 (2.419776ms)
✔ duplicate delivery of same event id is processed once (6.168041ms)
✔ concurrent duplicate deliveries are processed once (24.468871ms)
✔ handler failure -> 500, claim released, retry succeeds (3.845335ms)
✔ unhandled event type -> 200 handled:false (do not make Stripe retry) (1.949752ms)
✔ misconfigured app (express.json before router) is detected -> 500 (9.829871ms)
ℹ tests 11
ℹ pass 11
ℹ fail 0
typecheck: OK

Python: pytest -v tests

tests/test_webhook.py::test_valid_signature PASSED                       [  9%]
tests/test_webhook.py::test_wrong_secret PASSED                          [ 18%]
tests/test_webhook.py::test_tampered_body PASSED                         [ 27%]
tests/test_webhook.py::test_reserialised_json_fails PASSED               [ 36%]
tests/test_webhook.py::test_stale_timestamp PASSED                       [ 45%]
tests/test_webhook.py::test_missing_header PASSED                        [ 54%]
tests/test_webhook.py::test_duplicates_processed_once PASSED             [ 63%]
tests/test_webhook.py::test_concurrent_duplicates_processed_once PASSED  [ 72%]
tests/test_webhook.py::test_handler_failure_then_retry PASSED            [ 81%]
tests/test_webhook.py::test_unhandled_type_acknowledged PASSED           [ 90%]
tests/test_webhook.py::test_zero_tolerance_rejected PASSED               [100%]
============================== 11 passed in 0.22s ==============================

Not tested

Agent dry-run

This was a self-review by the builder, not an independent agent run. The description names concrete triggers, and every file the steps refer to exists.