public static List<BraintreeApiError> fromJsonArray(JSONArray json) { if (json == null) { json = new JSONArray(); } List<BraintreeApiError> errors = new ArrayList<>(); for (int i = 0; i < json.length(); i++) { try { errors.add(BraintreeApiError.fromJson(json.getJSONObject(i))); } catch (JSONException ignored) {} } return errors; }
public BraintreeApiErrorResponse(String jsonString) { mOriginalResponse = jsonString; try { JSONObject json = new JSONObject(jsonString); JSONObject error = json.getJSONObject("error"); mMessage = Json.optString(error, "developer_message", "No message was returned"); mErrors = BraintreeApiError.fromJsonArray(error.optJSONArray("details")); } catch (JSONException e) { mMessage = "Parsing error response failed"; } }
@Override public BraintreeApiError createFromParcel(Parcel source) { return new BraintreeApiError(source); }
@Test public void fromJson_doesNotBlowUpParsingBadJson() throws JSONException { String badJson = stringFromFixture("random_json.json"); BraintreeApiError error = BraintreeApiError.fromJson(new JSONObject(badJson)); assertNull(error.getCode()); assertNull(error.getMessage()); assertNull(error.getIn()); assertNull(error.getAt()); }
@Test public void fromJson_parsesDetails() throws JSONException { JSONObject response = new JSONObject(stringFromFixture("errors/braintree_api_error_response.json")); JSONObject detail = response.getJSONObject("error").getJSONArray("details").getJSONObject(0); BraintreeApiError error = BraintreeApiError.fromJson(detail); assertEquals("not_an_integer", error.getCode()); assertEquals("The provided value must be a string encoding of a base-10 integer between 1 and 12.", error.getMessage()); assertEquals("body", error.getIn()); assertEquals("/expiration_month", error.getAt()); }
@Test public void fromJsonArray_parsesErrors() throws JSONException { JSONObject response = new JSONObject(stringFromFixture("errors/braintree_api_error_response.json")); JSONArray details = response.getJSONObject("error").getJSONArray("details"); List<BraintreeApiError> errors = BraintreeApiError.fromJsonArray(details); assertEquals(1, errors.size()); assertEquals("not_an_integer", errors.get(0).getCode()); assertEquals("The provided value must be a string encoding of a base-10 integer between 1 and 12.", errors.get(0).getMessage()); assertEquals("body", errors.get(0).getIn()); assertEquals("/expiration_month", errors.get(0).getAt()); }
@Test public void fromJsonArray_doesNotBlowUpParsingBadJson() throws JSONException { List<BraintreeApiError> errors = BraintreeApiError.fromJsonArray(new JSONArray()); assertEquals(0, errors.size()); }
public static BraintreeApiError fromJson(JSONObject json) { BraintreeApiError error = new BraintreeApiError(); error.mCode = Json.optString(json, "code", null); error.mMessage = Json.optString(json, "developer_message", null); error.mIn = Json.optString(json, "in", null); error.mAt = Json.optString(json, "at", null); return error; }
@Test public void parcelsCorrectly() throws JSONException { JSONObject response = new JSONObject(stringFromFixture("errors/braintree_api_error_response.json")); JSONObject detail = response.getJSONObject("error").getJSONArray("details").getJSONObject(0); BraintreeApiError error = BraintreeApiError.fromJson(detail); Parcel parcel = Parcel.obtain(); error.writeToParcel(parcel, 0); parcel.setDataPosition(0); BraintreeApiError parceled = BraintreeApiError.CREATOR.createFromParcel(parcel); assertEquals("not_an_integer", parceled.getCode()); assertEquals("The provided value must be a string encoding of a base-10 integer between 1 and 12.", parceled.getMessage()); assertEquals("body", parceled.getIn()); assertEquals("/expiration_month", parceled.getAt()); } }
@Test public void parsesErrorsCorrectly() { String response = stringFromFixture("errors/braintree_api_error_response.json"); BraintreeApiErrorResponse errorResponse = new BraintreeApiErrorResponse(response); assertEquals("The provided parameters are invalid; see details for field-specific error messages.", errorResponse.getMessage()); assertEquals(response, errorResponse.getErrorResponse()); assertEquals(1, errorResponse.getErrors().size()); assertEquals("not_an_integer", errorResponse.getErrors().get(0).getCode()); assertEquals("The provided value must be a string encoding of a base-10 integer between 1 and 12.", errorResponse.getErrors().get(0).getMessage()); assertEquals("body", errorResponse.getErrors().get(0).getIn()); assertEquals("/expiration_month", errorResponse.getErrors().get(0).getAt()); }
@Test public void parcelsCorrectly() { String response = stringFromFixture("errors/braintree_api_error_response.json"); BraintreeApiErrorResponse errorResponse = new BraintreeApiErrorResponse(response); Parcel parcel = Parcel.obtain(); errorResponse.writeToParcel(parcel, 0); parcel.setDataPosition(0); BraintreeApiErrorResponse parceled = BraintreeApiErrorResponse.CREATOR.createFromParcel(parcel); assertEquals("The provided parameters are invalid; see details for field-specific error messages.", parceled.getMessage()); assertEquals(response, parceled.getErrorResponse()); assertEquals(1, parceled.getErrors().size()); assertEquals("not_an_integer", parceled.getErrors().get(0).getCode()); assertEquals("The provided value must be a string encoding of a base-10 integer between 1 and 12.", parceled.getErrors().get(0).getMessage()); assertEquals("body", parceled.getErrors().get(0).getIn()); assertEquals("/expiration_month", parceled.getErrors().get(0).getAt()); } }