package com.uaihebert.uaimockserver.validator.body; import org.json.JSONException; import org.json.JSONObject; import org.skyscreamer.jsonassert.JSONCompareMode; import org.skyscreamer.jsonassert.JSONCompareResult; import org.skyscreamer.jsonassert.comparator.DefaultComparator; import org.skyscreamer.jsonassert.comparator.JSONComparator; import java.util.Set; import static org.skyscreamer.jsonassert.comparator.JSONCompareUtil.getKeys; import static org.skyscreamer.jsonassert.comparator.JSONCompareUtil.qualify; public class UaiJSONComparator extends DefaultComparator implements JSONComparator { public UaiJSONComparator(JSONCompareMode mode) { super(mode); } @Override protected void checkJsonObjectKeysExpectedInActual(String prefix, JSONObject expected, JSONObject actual, JSONCompareResult result) throws JSONException { final Set<String> expectedKeys = getKeys(expected); for (String key : expectedKeys) { final Object expectedValue = expected.get(key); if (actual.has(key)) { final Object actualValue = actual.get(key); compareValues(qualify(prefix, key), expectedValue, actualValue, result); } else { result.missing(prefix, key); result.fail(key, expectedValue, "we did not received the value"); } } } @Override protected void checkJsonObjectKeysActualInExpected(String prefix, JSONObject expected, JSONObject actual, JSONCompareResult result) { final Set<String> actualKeys = getKeys(actual); for (String key : actualKeys) { if (!expected.has(key)) { result.unexpected(prefix, key); final Object actualValue = actual.opt(key); result.fail(key, actualValue, String.format("The [%s] is not mapped", key)); } } } }