Add JSON contract and snapshot matching#278
Merged
Merged
Conversation
json_schema validates against an authored schema and jsonpath extracts, but nothing matched two JSON payloads with relaxed rules or diffed them path-by-path for contract/snapshot tests. Add match_json (partial, match_type, ignore), diff_json (path-tagged missing/extra/changed), normalize_json and golden-master snapshot. Composes with json_schema and json_patch. Wired through the facade, AC_match_json/AC_diff_json executor commands, MCP tools and the Script Builder.
Up to standards ✅🟢 Issues
|
| Metric | Results |
|---|---|
| Complexity | 57 |
| Duplication | 0 |
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Summary
json_schemavalidates a value against an authored schema andjsonpathextracts values, but nothing matched two JSON payloads with relaxed rules or diffed them path-by-path for contract / snapshot tests. This adds that layer (composes withjson_schema+json_patch).match_json(actual, expected, *, ignore, match_type, partial)→MatchReport(ok, mismatches); each mismatch is{path, kind}(missing/extra/changed).partial= subset match,match_type= Pact-stylelike(types must match),ignore= skip volatile paths.diff_json(actual, expected)— raw path-tagged diff.normalize_json(value, *, drop)— canonical copy (sorted keys, dropped keys).snapshot(actual, path)— golden-master (write-if-absent, else compare).truestays distinct from1. Pure stdlib (json), deterministic.Five-layer wiring
je_auto_control/utils/json_contract/__init__.py+__all__AC_match_json,AC_diff_jsonac_match_json,ac_diff_jsonTests & docs
test/unit_test/headless/test_json_contract_batch.py(14 tests: changed/missing/extra, partial, match_type, ignore, nested path, snapshot)Lint clean: ruff / pylint / bandit / radon.