From 4032a5c86ac8aa3234c1c9a64f6e6fb9dadb6cad Mon Sep 17 00:00:00 2001 From: Tim Chow Date: Wed, 28 Aug 2024 09:15:24 -0500 Subject: [PATCH] Fix BinType crash - ignore case when parsing BinType (#1134) --- .../com/braintreepayments/api/card/BinData.kt | 12 +++++----- .../com/braintreepayments/api/card/BinType.kt | 12 +++++++++- .../api/card/BinTypeUnitTest.kt | 22 +++++++++++++++++++ 3 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 Card/src/test/java/com/braintreepayments/api/card/BinTypeUnitTest.kt diff --git a/Card/src/main/java/com/braintreepayments/api/card/BinData.kt b/Card/src/main/java/com/braintreepayments/api/card/BinData.kt index ab35c20084..4cd6b306c2 100644 --- a/Card/src/main/java/com/braintreepayments/api/card/BinData.kt +++ b/Card/src/main/java/com/braintreepayments/api/card/BinData.kt @@ -56,12 +56,12 @@ data class BinData internal constructor( val json = jsonObject ?: JSONObject() return BinData( - prepaid = BinType.valueOf(Json.optString(json, PREPAID_KEY, BinType.Unknown.name)), - healthcare = BinType.valueOf(Json.optString(json, HEALTHCARE_KEY, BinType.Unknown.name)), - debit = BinType.valueOf(Json.optString(json, DEBIT_KEY, BinType.Unknown.name)), - durbinRegulated = BinType.valueOf(Json.optString(json, DURBIN_REGULATED_KEY, BinType.Unknown.name)), - commercial = BinType.valueOf(Json.optString(json, COMMERCIAL_KEY, BinType.Unknown.name)), - payroll = BinType.valueOf(Json.optString(json, PAYROLL_KEY, BinType.Unknown.name)), + prepaid = BinType.fromString(Json.optString(json, PREPAID_KEY, BinType.Unknown.name)), + healthcare = BinType.fromString(Json.optString(json, HEALTHCARE_KEY, BinType.Unknown.name)), + debit = BinType.fromString(Json.optString(json, DEBIT_KEY, BinType.Unknown.name)), + durbinRegulated = BinType.fromString(Json.optString(json, DURBIN_REGULATED_KEY, BinType.Unknown.name)), + commercial = BinType.fromString(Json.optString(json, COMMERCIAL_KEY, BinType.Unknown.name)), + payroll = BinType.fromString(Json.optString(json, PAYROLL_KEY, BinType.Unknown.name)), issuingBank = convertNullToUnknown(json, ISSUING_BANK_KEY), countryOfIssuance = convertNullToUnknown(json, COUNTRY_OF_ISSUANCE_KEY), productId = convertNullToUnknown(json, PRODUCT_ID_KEY) diff --git a/Card/src/main/java/com/braintreepayments/api/card/BinType.kt b/Card/src/main/java/com/braintreepayments/api/card/BinType.kt index c37ec73f3e..a6b24a3d6d 100644 --- a/Card/src/main/java/com/braintreepayments/api/card/BinType.kt +++ b/Card/src/main/java/com/braintreepayments/api/card/BinType.kt @@ -3,5 +3,15 @@ package com.braintreepayments.api.card enum class BinType { Yes, No, - Unknown + Unknown; + + companion object { + fun fromString(string: String): BinType { + return when (string.lowercase()) { + Yes.name.lowercase() -> Yes + No.name.lowercase() -> No + else -> Unknown + } + } + } } diff --git a/Card/src/test/java/com/braintreepayments/api/card/BinTypeUnitTest.kt b/Card/src/test/java/com/braintreepayments/api/card/BinTypeUnitTest.kt new file mode 100644 index 0000000000..93fd18803a --- /dev/null +++ b/Card/src/test/java/com/braintreepayments/api/card/BinTypeUnitTest.kt @@ -0,0 +1,22 @@ +package com.braintreepayments.api.card + +import org.junit.Test +import kotlin.test.assertEquals + +class BinTypeUnitTest { + + @Test + fun `fromString is case insensitive`() { + assertEquals(BinType.Yes, BinType.fromString("YES")) + } + + @Test + fun `fromString returns No`() { + assertEquals(BinType.No, BinType.fromString("no")) + } + + @Test + fun `fromString returns Unknown for an unknown string`() { + assertEquals(BinType.Unknown, BinType.fromString("otherString")) + } +}