From e886a4afa96bde49dbbb2d3dd45c16ac093ff16a Mon Sep 17 00:00:00 2001 From: PetrovP Date: Mon, 15 May 2023 16:34:47 +0300 Subject: [PATCH] 1.3.6 --- GenesisAndroid/build.gradle | 4 +- .../api/constants/WPFTransactionTypes.kt | 2 - .../request/TransactionTypesRequest.kt | 2 +- .../internal/validation/GenesisValidator.kt | 45 +++++++++++++++---- .../validation/GenesisValidatorUnitTest.kt | 32 ++++++++++--- README.md | 2 +- 6 files changed, 65 insertions(+), 22 deletions(-) diff --git a/GenesisAndroid/build.gradle b/GenesisAndroid/build.gradle index 3a84a08..f72e9cb 100644 --- a/GenesisAndroid/build.gradle +++ b/GenesisAndroid/build.gradle @@ -5,7 +5,7 @@ apply plugin: 'kotlin-kapt' ext { PUBLISH_GROUP_ID = 'com.emerchantpay.gateway' - PUBLISH_VERSION = '1.3.5' + PUBLISH_VERSION = '1.3.6' PUBLISH_ARTIFACT_ID = 'genesis-android' PUBLISH_DESCRIPTION = 'Genesis Android SDK' PUBLISH_URL = 'https://github.com/GenesisGateway/android_sdk' @@ -27,7 +27,7 @@ android { minSdkVersion 19 targetSdkVersion 33 versionCode 1 - versionName "1.3.5" + versionName "1.3.6" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { diff --git a/GenesisAndroid/src/main/java/com/emerchantpay/gateway/genesisandroid/api/constants/WPFTransactionTypes.kt b/GenesisAndroid/src/main/java/com/emerchantpay/gateway/genesisandroid/api/constants/WPFTransactionTypes.kt index 348d864..c80ac45 100644 --- a/GenesisAndroid/src/main/java/com/emerchantpay/gateway/genesisandroid/api/constants/WPFTransactionTypes.kt +++ b/GenesisAndroid/src/main/java/com/emerchantpay/gateway/genesisandroid/api/constants/WPFTransactionTypes.kt @@ -16,8 +16,6 @@ enum class WPFTransactionTypes(val value: String) { SALE3D("sale3d"), // Card verification without any financial impact - ACCOUNT_VERIFICATION("account_verification"), - // Payment using credit or debit cards connected to a consumer's Google account GOOGLE_PAY("google_pay"), diff --git a/GenesisAndroid/src/main/java/com/emerchantpay/gateway/genesisandroid/api/internal/request/TransactionTypesRequest.kt b/GenesisAndroid/src/main/java/com/emerchantpay/gateway/genesisandroid/api/internal/request/TransactionTypesRequest.kt index 1058b2f..f90b424 100644 --- a/GenesisAndroid/src/main/java/com/emerchantpay/gateway/genesisandroid/api/internal/request/TransactionTypesRequest.kt +++ b/GenesisAndroid/src/main/java/com/emerchantpay/gateway/genesisandroid/api/internal/request/TransactionTypesRequest.kt @@ -114,7 +114,7 @@ class TransactionTypesRequest : Request, CommonManagedRecurringAttributes { } if (isManagedRecurringEnabled()) - builder!!.addElement("managed_recurring", buildManagedRecurringAttributes()) + builder.addElement("managed_recurring", buildManagedRecurringAttributes().toXML()) return builder } diff --git a/GenesisAndroid/src/main/java/com/emerchantpay/gateway/genesisandroid/api/internal/validation/GenesisValidator.kt b/GenesisAndroid/src/main/java/com/emerchantpay/gateway/genesisandroid/api/internal/validation/GenesisValidator.kt index 0fcffd0..788a2db 100644 --- a/GenesisAndroid/src/main/java/com/emerchantpay/gateway/genesisandroid/api/internal/validation/GenesisValidator.kt +++ b/GenesisAndroid/src/main/java/com/emerchantpay/gateway/genesisandroid/api/internal/validation/GenesisValidator.kt @@ -5,6 +5,7 @@ import com.emerchantpay.gateway.genesisandroid.api.constants.ErrorMessages.GOOGL import com.emerchantpay.gateway.genesisandroid.api.constants.ErrorMessages.REQUIRED_PARAMS_THREE_DS_V2 import com.emerchantpay.gateway.genesisandroid.api.constants.ReminderConstants import com.emerchantpay.gateway.genesisandroid.api.constants.WPFTransactionTypes +import com.emerchantpay.gateway.genesisandroid.api.constants.WPFTransactionTypes.* import com.emerchantpay.gateway.genesisandroid.api.internal.request.KlarnaItemsRequest import com.emerchantpay.gateway.genesisandroid.api.internal.request.PaymentRequest import com.emerchantpay.gateway.genesisandroid.api.models.GenesisError @@ -29,15 +30,10 @@ open class GenesisValidator { private var requiredParametersValidator: RequiredParametersValidator? = null // Validate amount - fun validateAmount(amount: BigDecimal?): Boolean? { + fun validateAmount(amount: BigDecimal?, transactionType: String?): Boolean? { return when { - amount!!.toDouble() > 0 && amount != null -> true - else -> { - error = GenesisError(ErrorMessages.INVALID_AMOUNT) - notValidParamsList.add(amount.toString()) - - false - } + permitZeroAmount(transactionType) -> amount?.let { validateZeroAmount(it) } + else -> amount?.let { validateNonZeroAmount(it) } } } @@ -256,7 +252,7 @@ open class GenesisValidator { } private fun isValidRegex(request: PaymentRequest): Boolean? { - val isValidAmount = validateAmount(request.amount) + val isValidAmount = validateAmount(request.amount, request.getTransactionType()) val isValidEmail = validateEmail(request.customerEmail) val isValidPhone = validatePhone(request.customerPhone) val isValidUrl = validateNotificationUrl(request.notificationUrl) @@ -264,6 +260,37 @@ open class GenesisValidator { return isValidAmount!! && isValidEmail!! && isValidPhone!! && isValidUrl!! } + private fun permitZeroAmount(transactionType: String?): Boolean { + return transactionType == AUTHORIZE.value + || transactionType == AUTHORIZE3D.value + || transactionType == SALE.value + || transactionType == SALE3D.value + } + + private fun validateNonZeroAmount(amount: BigDecimal): Boolean? { + return when { + amount != null && amount.toDouble() > 0 -> true + else -> { + error = GenesisError(ErrorMessages.INVALID_AMOUNT) + notValidParamsList.add(amount.toString()) + + false + } + } + } + + private fun validateZeroAmount(amount: BigDecimal): Boolean? { + return when { + amount != null && amount.toDouble() >= 0 -> true + else -> { + error = GenesisError(ErrorMessages.INVALID_AMOUNT) + notValidParamsList.add(amount.toString()) + + false + } + } + } + companion object { // Regular expressions val VALID_EMAIL_REGEX = Pattern diff --git a/GenesisAndroid/src/test/java/com/emerchantpay/gateway/genesisandroid/validation/GenesisValidatorUnitTest.kt b/GenesisAndroid/src/test/java/com/emerchantpay/gateway/genesisandroid/validation/GenesisValidatorUnitTest.kt index 7093ff4..337b14c 100644 --- a/GenesisAndroid/src/test/java/com/emerchantpay/gateway/genesisandroid/validation/GenesisValidatorUnitTest.kt +++ b/GenesisAndroid/src/test/java/com/emerchantpay/gateway/genesisandroid/validation/GenesisValidatorUnitTest.kt @@ -4,6 +4,7 @@ import android.content.Context import com.emerchantpay.gateway.genesisandroid.api.constants.ErrorMessages import com.emerchantpay.gateway.genesisandroid.api.constants.ReminderConstants import com.emerchantpay.gateway.genesisandroid.api.constants.WPFTransactionTypes +import com.emerchantpay.gateway.genesisandroid.api.constants.WPFTransactionTypes.* import com.emerchantpay.gateway.genesisandroid.api.constants.recurring.RecurringCategory import com.emerchantpay.gateway.genesisandroid.api.constants.recurring.RecurringType import com.emerchantpay.gateway.genesisandroid.api.interfaces.financial.googlepay.definitions.GooglePayPaymentSubtype @@ -50,7 +51,7 @@ class GenesisValidatorUnitTest { @Before @Throws(IllegalAccessException::class) fun setup() { - createPaymentRequest(listOf(WPFTransactionTypes.AUTHORIZE, WPFTransactionTypes.EZEEWALLET)) + createPaymentRequest(listOf(AUTHORIZE, EZEEWALLET)) } private fun createPaymentRequest(transactions: List) { @@ -96,16 +97,33 @@ class GenesisValidatorUnitTest { // Amount @Test fun testAmountValidationSuccess() { - assertTrue(validator!!.validateAmount(amount)!!) + assertTrue(validator!!.validateAmount(amount, AUTHORIZE.value)!!) amount = BigDecimal("0.99") - assertTrue(validator!!.validateAmount(amount)!!) + assertTrue(validator!!.validateAmount(amount, AUTHORIZE.value)!!) } @Test - fun testAmountValidationFailed() { + fun testZeroAmountValidationSuccess() { + assertTrue(validator!!.validateAmount(amount, AUTHORIZE.value)!!) + + amount = BigDecimal("0.00") + assertTrue(validator!!.validateAmount(amount, AUTHORIZE.value)!!) + } + + @Test + fun testAmountValidationFailedWithAuthorize() { + amount = BigDecimal("-1.00") + assertFalse(validator!!.validateAmount(amount, AUTHORIZE.value)!!) + + error = GenesisError(ErrorMessages.INVALID_AMOUNT) + assertEquals(error!!.message, ErrorMessages.INVALID_AMOUNT) + } + + @Test + fun testAmountValidationFailedWithGooglePay() { amount = BigDecimal("0.00") - assertFalse(validator!!.validateAmount(amount)!!) + assertFalse(validator!!.validateAmount(amount, GOOGLE_PAY.value)!!) error = GenesisError(ErrorMessages.INVALID_AMOUNT) assertEquals(error!!.message, ErrorMessages.INVALID_AMOUNT) @@ -194,7 +212,7 @@ class GenesisValidatorUnitTest { @Test @Throws(IllegalAccessException::class) fun testTransactionTypeValidionSuccess() { - assertTrue(validator!!.validateTransactionType(WPFTransactionTypes.AUTHORIZE.value)!!) + assertTrue(validator!!.validateTransactionType(AUTHORIZE.value)!!) } @Test @@ -267,7 +285,7 @@ class GenesisValidatorUnitTest { @Test fun testValidDataWithGooglePayTransaction() { - createPaymentRequest(listOf(WPFTransactionTypes.GOOGLE_PAY)) + createPaymentRequest(listOf(GOOGLE_PAY)) request?.setGooglePayPaymentSubtype(GooglePayPaymentSubtype.INIT_RECURRING_SALE) assertTrue(request?.let { validator!!.isValidRequest(it) }!!) diff --git a/README.md b/README.md index d2d67a8..c1d1bea 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ cd GenesisAndroid * Add the dependency in your build.gradle: ``` dependencies { - implementation 'com.emerchantpay.gateway:genesis-android:1.3.5' + implementation 'com.emerchantpay.gateway:genesis-android:1.3.6' } ```