From 9ec7d268da918f4765081dc76c2ba37bf270378e Mon Sep 17 00:00:00 2001 From: Michael Shafrir Date: Tue, 28 May 2019 17:03:05 -0400 Subject: [PATCH 1/2] Remove null values in PaymentMethod.BillingDetails#toMap() --- .../com/stripe/android/model/Address.java | 24 ++++++++++++---- .../stripe/android/model/PaymentMethod.java | 28 ++++++++++++------- .../com/stripe/android/model/AddressTest.java | 11 ++------ .../android/model/PaymentMethodTest.java | 14 ++++++++++ 4 files changed, 53 insertions(+), 24 deletions(-) diff --git a/stripe/src/main/java/com/stripe/android/model/Address.java b/stripe/src/main/java/com/stripe/android/model/Address.java index a732e61015b..7187e196807 100644 --- a/stripe/src/main/java/com/stripe/android/model/Address.java +++ b/stripe/src/main/java/com/stripe/android/model/Address.java @@ -118,12 +118,24 @@ public String getState() { @Override public Map toMap() { final AbstractMap map = new HashMap<>(); - map.put(FIELD_CITY, mCity); - map.put(FIELD_COUNTRY, mCountry); - map.put(FIELD_LINE_1, mLine1); - map.put(FIELD_LINE_2, mLine2); - map.put(FIELD_POSTAL_CODE, mPostalCode); - map.put(FIELD_STATE, mState); + if (mCity != null) { + map.put(FIELD_CITY, mCity); + } + if (mCountry != null) { + map.put(FIELD_COUNTRY, mCountry); + } + if (mLine1 != null) { + map.put(FIELD_LINE_1, mLine1); + } + if (mLine2 != null) { + map.put(FIELD_LINE_2, mLine2); + } + if (mPostalCode != null) { + map.put(FIELD_POSTAL_CODE, mPostalCode); + } + if (mState != null) { + map.put(FIELD_STATE, mState); + } return map; } diff --git a/stripe/src/main/java/com/stripe/android/model/PaymentMethod.java b/stripe/src/main/java/com/stripe/android/model/PaymentMethod.java index b7171036b09..447540cc934 100644 --- a/stripe/src/main/java/com/stripe/android/model/PaymentMethod.java +++ b/stripe/src/main/java/com/stripe/android/model/PaymentMethod.java @@ -275,12 +275,12 @@ public PaymentMethod build() { } public static final class BillingDetails extends StripeJsonModel { - private static final String FIELD_ADDRESS = "address"; - private static final String FIELD_EMAIL = "email"; - private static final String FIELD_NAME = "name"; - private static final String FIELD_PHONE = "phone"; + static final String FIELD_ADDRESS = "address"; + static final String FIELD_EMAIL = "email"; + static final String FIELD_NAME = "name"; + static final String FIELD_PHONE = "phone"; - @NonNull public final Address address; + @Nullable public final Address address; public final String email; public final String name; public final String phone; @@ -296,10 +296,18 @@ private BillingDetails(@NonNull Builder builder) { @Override public Map toMap() { final Map billingDetails = new HashMap<>(); - billingDetails.put(FIELD_ADDRESS, address.toMap()); - billingDetails.put(FIELD_EMAIL, email); - billingDetails.put(FIELD_NAME, name); - billingDetails.put(FIELD_PHONE, phone); + if (address != null) { + billingDetails.put(FIELD_ADDRESS, address.toMap()); + } + if (email != null) { + billingDetails.put(FIELD_EMAIL, email); + } + if (name != null) { + billingDetails.put(FIELD_NAME, name); + } + if (phone != null) { + billingDetails.put(FIELD_PHONE, phone); + } return billingDetails; } @@ -308,7 +316,7 @@ public Map toMap() { public JSONObject toJson() { final JSONObject billingDetails = new JSONObject(); try { - billingDetails.put(FIELD_ADDRESS, address.toJson()); + billingDetails.put(FIELD_ADDRESS, address != null ? address.toJson() : null); billingDetails.put(FIELD_EMAIL, email); billingDetails.put(FIELD_NAME, name); billingDetails.put(FIELD_PHONE, phone); diff --git a/stripe/src/test/java/com/stripe/android/model/AddressTest.java b/stripe/src/test/java/com/stripe/android/model/AddressTest.java index cd1ab69d8f9..f12430bd2c4 100644 --- a/stripe/src/test/java/com/stripe/android/model/AddressTest.java +++ b/stripe/src/test/java/com/stripe/android/model/AddressTest.java @@ -11,7 +11,6 @@ import static com.stripe.android.testharness.JsonTestUtils.assertMapEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; /** * Test class for {@link Address}. @@ -39,14 +38,10 @@ public class AddressTest { private static final Address ADDRESS = Address.fromString(JSON_ADDRESS); @Test - public void fromJsonString_backToJson_createsIdenticalElement() { + public void fromJsonString_backToJson_createsIdenticalElement() throws JSONException { assertNotNull(ADDRESS); - try { - JSONObject rawConversion = new JSONObject(JSON_ADDRESS); - assertJsonEquals(rawConversion, ADDRESS.toJson()); - } catch (JSONException jsonException) { - fail("Test Data failure: " + jsonException.getLocalizedMessage()); - } + JSONObject rawConversion = new JSONObject(JSON_ADDRESS); + assertJsonEquals(rawConversion, ADDRESS.toJson()); } @Test diff --git a/stripe/src/test/java/com/stripe/android/model/PaymentMethodTest.java b/stripe/src/test/java/com/stripe/android/model/PaymentMethodTest.java index 85b29da38ff..d98f3b1bc05 100644 --- a/stripe/src/test/java/com/stripe/android/model/PaymentMethodTest.java +++ b/stripe/src/test/java/com/stripe/android/model/PaymentMethodTest.java @@ -8,6 +8,8 @@ import java.util.Map; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; public class PaymentMethodTest { public static final String RAW_CARD_JSON = "{\n" + @@ -165,4 +167,16 @@ public void equals_withEqualPaymentMethods_shouldReturnTrue() { public void fromString_shouldReturnExpectedPaymentMethod() { assertEquals(CARD_PAYMENT_METHOD, PaymentMethod.fromString(RAW_CARD_JSON)); } + + @Test + public void billingDetailsToMap_removesNullValues() { + final Map billingDetails = + new PaymentMethod.BillingDetails.Builder() + .setName("name") + .build() + .toMap(); + assertEquals(1, billingDetails.size()); + assertFalse(billingDetails.containsKey(PaymentMethod.BillingDetails.FIELD_ADDRESS)); + assertTrue(billingDetails.containsKey(PaymentMethod.BillingDetails.FIELD_NAME)); + } } From e89718bcd082ff7df18371ecdd29b4e81ebc8b1e Mon Sep 17 00:00:00 2001 From: Michael Shafrir Date: Tue, 28 May 2019 17:08:24 -0400 Subject: [PATCH 2/2] Use removeNullAndEmptyParams --- stripe/src/main/java/com/stripe/android/model/Address.java | 2 ++ .../src/main/java/com/stripe/android/model/PaymentMethod.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/stripe/src/main/java/com/stripe/android/model/Address.java b/stripe/src/main/java/com/stripe/android/model/Address.java index 7187e196807..fc340a0126f 100644 --- a/stripe/src/main/java/com/stripe/android/model/Address.java +++ b/stripe/src/main/java/com/stripe/android/model/Address.java @@ -6,6 +6,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import com.stripe.android.StripeNetworkUtils; import com.stripe.android.utils.ObjectUtils; import org.json.JSONException; @@ -136,6 +137,7 @@ public Map toMap() { if (mState != null) { map.put(FIELD_STATE, mState); } + StripeNetworkUtils.removeNullAndEmptyParams(map); return map; } diff --git a/stripe/src/main/java/com/stripe/android/model/PaymentMethod.java b/stripe/src/main/java/com/stripe/android/model/PaymentMethod.java index 447540cc934..3517f82023e 100644 --- a/stripe/src/main/java/com/stripe/android/model/PaymentMethod.java +++ b/stripe/src/main/java/com/stripe/android/model/PaymentMethod.java @@ -4,6 +4,7 @@ import android.support.annotation.Nullable; import android.support.annotation.StringDef; +import com.stripe.android.StripeNetworkUtils; import com.stripe.android.model.wallets.Wallet; import com.stripe.android.model.wallets.WalletFactory; import com.stripe.android.utils.ObjectUtils; @@ -308,6 +309,7 @@ public Map toMap() { if (phone != null) { billingDetails.put(FIELD_PHONE, phone); } + StripeNetworkUtils.removeNullAndEmptyParams(billingDetails); return billingDetails; }