From 546156874023afe4937ed3114cb12f56258b7aa3 Mon Sep 17 00:00:00 2001 From: Alex Chang Date: Sun, 26 Jul 2026 11:11:35 -0400 Subject: [PATCH 1/2] test: support a hermetic local API reference --- scripts/mock | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/scripts/mock b/scripts/mock index 04d29019fc..233fdc3ea4 100755 --- a/scripts/mock +++ b/scripts/mock @@ -7,6 +7,15 @@ cd "$(dirname "$0")/.." if [[ -n "$1" && "$1" != '--'* ]]; then URL="$1" shift +elif [[ -f .castiron.stats.yml && -f api_reference/openapi.yaml ]]; then + URL="api_reference/openapi.yaml" + EXPECTED_HASH="$(awk '$1 == "openapi_spec_hash:" { print $2; exit }' .castiron.stats.yml)" + ACTUAL_HASH="$(node -e 'process.stdout.write(require("node:crypto").createHash("md5").update(require("node:fs").readFileSync(process.argv[1])).digest("hex"))' "$URL")" + + if [[ -z "$EXPECTED_HASH" || "$ACTUAL_HASH" != "$EXPECTED_HASH" ]]; then + echo "Error: Local OpenAPI specification does not match generation metadata" >&2 + exit 1 + fi else URL="$(grep 'openapi_spec_url' .stats.yml | cut -d' ' -f2)" fi From 6a626fc01701ff8b9733ef5d27e47198a0aef635 Mon Sep 17 00:00:00 2001 From: Alex Chang Date: Sun, 26 Jul 2026 13:40:56 -0400 Subject: [PATCH 2/2] test: validate transformed local API reference --- scripts/mock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/mock b/scripts/mock index 233fdc3ea4..efc647aec1 100755 --- a/scripts/mock +++ b/scripts/mock @@ -7,9 +7,9 @@ cd "$(dirname "$0")/.." if [[ -n "$1" && "$1" != '--'* ]]; then URL="$1" shift -elif [[ -f .castiron.stats.yml && -f api_reference/openapi.yaml ]]; then - URL="api_reference/openapi.yaml" - EXPECTED_HASH="$(awk '$1 == "openapi_spec_hash:" { print $2; exit }' .castiron.stats.yml)" +elif [[ -f .castiron.stats.yml && -f api_reference/openapi.transformed.yml ]]; then + URL="api_reference/openapi.transformed.yml" + EXPECTED_HASH="$(awk '$1 == "openapi_transformed_spec_hash:" { print $2; exit }' .castiron.stats.yml)" ACTUAL_HASH="$(node -e 'process.stdout.write(require("node:crypto").createHash("md5").update(require("node:fs").readFileSync(process.argv[1])).digest("hex"))' "$URL")" if [[ -z "$EXPECTED_HASH" || "$ACTUAL_HASH" != "$EXPECTED_HASH" ]]; then