Skip to content

Commit

Permalink
Remove unnecessary INVALID_DATE_FORMAT validation result
Browse files Browse the repository at this point in the history
COAND-985
  • Loading branch information
ozgur00 committed Oct 10, 2024
1 parent 53c4740 commit 90d44ed
Show file tree
Hide file tree
Showing 9 changed files with 42 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ class CardValidationMapper {
CardExpiryDateValidation.INVALID_TOO_OLD ->
Validation.Invalid(R.string.checkout_expiry_date_not_valid_too_old)

CardExpiryDateValidation.INVALID_DATE_FORMAT -> Validation.Invalid(R.string.checkout_expiry_date_not_valid)
CardExpiryDateValidation.INVALID_OTHER_REASON -> Validation.Invalid(R.string.checkout_expiry_date_not_valid)
}
return FieldState(expiryDate, validation)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import androidx.annotation.VisibleForTesting
import com.adyen.checkout.card.internal.data.model.Brand
import com.adyen.checkout.card.internal.data.model.DetectedCardType
import com.adyen.checkout.card.internal.ui.model.InputFieldUIState
import com.adyen.checkout.core.internal.ui.model.isEmptyDate
import com.adyen.checkout.core.internal.util.StringUtil
import com.adyen.checkout.core.ui.model.ExpiryDate
import com.adyen.checkout.core.ui.validation.CardExpiryDateValidationResult
Expand Down Expand Up @@ -69,11 +70,12 @@ object CardValidationUtils {
fieldPolicy: Brand.FieldPolicy?,
): CardExpiryDateValidation {
val result = CardExpiryDateValidator.validateExpiryDate(expiryDate)
return validateExpiryDate(result, fieldPolicy)
return validateExpiryDate(expiryDate, result, fieldPolicy)
}

@VisibleForTesting
internal fun validateExpiryDate(
expiryDate: ExpiryDate,
validationResult: CardExpiryDateValidationResult,
fieldPolicy: Brand.FieldPolicy?
): CardExpiryDateValidation {
Expand All @@ -88,13 +90,12 @@ object CardValidationUtils {
is CardExpiryDateValidationResult.Invalid.TooOld ->
CardExpiryDateValidation.INVALID_TOO_OLD

is CardExpiryDateValidationResult.Invalid.DateFormat ->
CardExpiryDateValidation.INVALID_DATE_FORMAT

is CardExpiryDateValidationResult.Invalid.OtherReason -> if (fieldPolicy?.isRequired() == false) {
CardExpiryDateValidation.VALID_NOT_REQUIRED
} else {
CardExpiryDateValidation.INVALID_OTHER_REASON
is CardExpiryDateValidationResult.Invalid.NonParseableDate -> {
if (expiryDate.isEmptyDate() && fieldPolicy?.isRequired() == false) {
CardExpiryDateValidation.VALID_NOT_REQUIRED
} else {
CardExpiryDateValidation.INVALID_OTHER_REASON
}
}

else -> {
Expand Down Expand Up @@ -157,7 +158,6 @@ enum class CardExpiryDateValidation {
VALID_NOT_REQUIRED,
INVALID_TOO_FAR_IN_THE_FUTURE,
INVALID_TOO_OLD,
INVALID_DATE_FORMAT,
INVALID_OTHER_REASON,
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ internal class CardValidationMapperTest {
val expiryDate = ExpiryDate(4, 20) // 04/2020
val actual = cardValidationMapper.mapExpiryDateValidation(
expiryDate,
CardExpiryDateValidation.INVALID_DATE_FORMAT,
CardExpiryDateValidation.INVALID_OTHER_REASON,
)

val expectedInvalidReason = R.string.checkout_expiry_date_not_valid
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ package com.adyen.checkout.card.internal.util

import com.adyen.checkout.card.internal.data.model.Brand
import com.adyen.checkout.card.internal.ui.model.InputFieldUIState
import com.adyen.checkout.core.internal.ui.model.EMPTY_DATE
import com.adyen.checkout.core.internal.ui.model.INVALID_DATE
import com.adyen.checkout.core.ui.model.ExpiryDate
import com.adyen.checkout.core.ui.validation.CardExpiryDateValidationResult
import com.adyen.checkout.core.ui.validation.CardNumberValidationResult
import com.adyen.checkout.core.ui.validation.CardSecurityCodeValidationResult
Expand Down Expand Up @@ -85,6 +88,7 @@ internal class CardValidationUtilsTest {
@Test
fun `date is valid with field policy optional, then result should be valid`() {
val actual = CardValidationUtils.validateExpiryDate(
ExpiryDate(12, 2030),
CardExpiryDateValidationResult.Valid(),
Brand.FieldPolicy.OPTIONAL,
)
Expand All @@ -95,6 +99,7 @@ internal class CardValidationUtilsTest {
@Test
fun `date is valid with field policy hidden, then result should be valid`() {
val actual = CardValidationUtils.validateExpiryDate(
ExpiryDate(12, 2030),
CardExpiryDateValidationResult.Valid(),
Brand.FieldPolicy.HIDDEN,
)
Expand All @@ -105,6 +110,7 @@ internal class CardValidationUtilsTest {
@Test
fun `date is too far in the future with field policy optional, then result should be invalid`() {
val actual = CardValidationUtils.validateExpiryDate(
ExpiryDate(12, 2099),
CardExpiryDateValidationResult.Invalid.TooFarInTheFuture(),
Brand.FieldPolicy.OPTIONAL,
)
Expand All @@ -115,6 +121,7 @@ internal class CardValidationUtilsTest {
@Test
fun `date is too far in the future with field policy hidden, then result should be invalid`() {
val actual = CardValidationUtils.validateExpiryDate(
ExpiryDate(12, 2099),
CardExpiryDateValidationResult.Invalid.TooFarInTheFuture(),
Brand.FieldPolicy.HIDDEN,
)
Expand All @@ -125,6 +132,7 @@ internal class CardValidationUtilsTest {
@Test
fun `date is too old with field policy optional, then result should be invalid`() {
val actual = CardValidationUtils.validateExpiryDate(
ExpiryDate(12, 2012),
CardExpiryDateValidationResult.Invalid.TooOld(),
Brand.FieldPolicy.OPTIONAL,
)
Expand All @@ -135,6 +143,7 @@ internal class CardValidationUtilsTest {
@Test
fun `date is too old with field policy hidden, then result should be invalid`() {
val actual = CardValidationUtils.validateExpiryDate(
ExpiryDate(12, 2012),
CardExpiryDateValidationResult.Invalid.TooOld(),
Brand.FieldPolicy.HIDDEN,
)
Expand All @@ -145,7 +154,8 @@ internal class CardValidationUtilsTest {
@Test
fun `date is empty with field policy required, then result should be invalid`() {
val actual = CardValidationUtils.validateExpiryDate(
CardExpiryDateValidationResult.Invalid.OtherReason(),
EMPTY_DATE,
CardExpiryDateValidationResult.Invalid.NonParseableDate(),
Brand.FieldPolicy.REQUIRED,
)

Expand All @@ -155,7 +165,8 @@ internal class CardValidationUtilsTest {
@Test
fun `date is empty with field policy optional, then result should be valid`() {
val actual = CardValidationUtils.validateExpiryDate(
CardExpiryDateValidationResult.Invalid.OtherReason(),
EMPTY_DATE,
CardExpiryDateValidationResult.Invalid.NonParseableDate(),
Brand.FieldPolicy.OPTIONAL,
)

Expand All @@ -165,7 +176,8 @@ internal class CardValidationUtilsTest {
@Test
fun `date is empty with field policy hidden, then result should be valid`() {
val actual = CardValidationUtils.validateExpiryDate(
CardExpiryDateValidationResult.Invalid.OtherReason(),
EMPTY_DATE,
CardExpiryDateValidationResult.Invalid.NonParseableDate(),
Brand.FieldPolicy.HIDDEN,
)

Expand All @@ -175,31 +187,34 @@ internal class CardValidationUtilsTest {
@Test
fun `date is invalid with field policy required, then result should be invalid`() {
val actual = CardValidationUtils.validateExpiryDate(
CardExpiryDateValidationResult.Invalid.DateFormat(),
INVALID_DATE,
CardExpiryDateValidationResult.Invalid.NonParseableDate(),
Brand.FieldPolicy.REQUIRED,
)

assertEquals(CardExpiryDateValidation.INVALID_DATE_FORMAT, actual)
assertEquals(CardExpiryDateValidation.INVALID_OTHER_REASON, actual)
}

@Test
fun `date is invalid with field policy optional, then result should be invalid`() {
val actual = CardValidationUtils.validateExpiryDate(
CardExpiryDateValidationResult.Invalid.DateFormat(),
INVALID_DATE,
CardExpiryDateValidationResult.Invalid.NonParseableDate(),
Brand.FieldPolicy.OPTIONAL,
)

assertEquals(CardExpiryDateValidation.INVALID_DATE_FORMAT, actual)
assertEquals(CardExpiryDateValidation.INVALID_OTHER_REASON, actual)
}

@Test
fun `date is invalid with field policy hidden, then result should be invalid`() {
val actual = CardValidationUtils.validateExpiryDate(
CardExpiryDateValidationResult.Invalid.DateFormat(),
INVALID_DATE,
CardExpiryDateValidationResult.Invalid.NonParseableDate(),
Brand.FieldPolicy.HIDDEN,
)

assertEquals(CardExpiryDateValidation.INVALID_DATE_FORMAT, actual)
assertEquals(CardExpiryDateValidation.INVALID_OTHER_REASON, actual)
}
}

Expand Down
6 changes: 1 addition & 5 deletions checkout-core/api/checkout-core.api
Original file line number Diff line number Diff line change
Expand Up @@ -242,11 +242,7 @@ public abstract interface class com/adyen/checkout/core/ui/validation/CardExpiry
public abstract interface class com/adyen/checkout/core/ui/validation/CardExpiryDateValidationResult$Invalid : com/adyen/checkout/core/ui/validation/CardExpiryDateValidationResult {
}

public final class com/adyen/checkout/core/ui/validation/CardExpiryDateValidationResult$Invalid$DateFormat : com/adyen/checkout/core/ui/validation/CardExpiryDateValidationResult$Invalid {
public fun <init> ()V
}

public final class com/adyen/checkout/core/ui/validation/CardExpiryDateValidationResult$Invalid$OtherReason : com/adyen/checkout/core/ui/validation/CardExpiryDateValidationResult$Invalid {
public final class com/adyen/checkout/core/ui/validation/CardExpiryDateValidationResult$Invalid$NonParseableDate : com/adyen/checkout/core/ui/validation/CardExpiryDateValidationResult$Invalid {
public fun <init> ()V
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ sealed interface CardExpiryDateValidationResult {
interface Invalid : CardExpiryDateValidationResult {
class TooFarInTheFuture : Invalid
class TooOld : Invalid
class DateFormat : Invalid
class OtherReason : Invalid
class NonParseableDate : Invalid
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@
package com.adyen.checkout.core.ui.validation

import androidx.annotation.VisibleForTesting
import com.adyen.checkout.core.internal.ui.model.isEmptyDate
import com.adyen.checkout.core.internal.ui.model.isInvalidDate
import com.adyen.checkout.core.ui.model.ExpiryDate
import java.util.Calendar
import java.util.GregorianCalendar
Expand Down Expand Up @@ -50,9 +48,7 @@ object CardExpiryDateValidator {
}
}

expiryDate.isInvalidDate() -> CardExpiryDateValidationResult.Invalid.DateFormat()

else -> CardExpiryDateValidationResult.Invalid.OtherReason()
else -> CardExpiryDateValidationResult.Invalid.NonParseableDate()
}

private fun isInMaxYearRange(expiryDate: ExpiryDate, calendar: Calendar): Boolean {
Expand All @@ -70,11 +66,8 @@ object CardExpiryDateValidator {
}

private fun dateExists(expiryDate: ExpiryDate): Boolean {
return (
!expiryDate.isEmptyDate() &&
isValidMonth(expiryDate.expiryMonth) &&
expiryDate.expiryYear > 0
)
return isValidMonth(expiryDate.expiryMonth) &&
expiryDate.expiryYear > 0
}

private fun isValidMonth(month: Int): Boolean {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,12 @@ internal class CardExpiryDateValidatorTest {
arguments(
EMPTY_DATE,
GregorianCalendar.getInstance(),
CardExpiryDateValidationResult.Invalid.OtherReason(),
CardExpiryDateValidationResult.Invalid.NonParseableDate(),
),
arguments(
INVALID_DATE,
GregorianCalendar.getInstance(),
CardExpiryDateValidationResult.Invalid.DateFormat(),
CardExpiryDateValidationResult.Invalid.NonParseableDate(),
),
// Date 30 years in future
arguments(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,7 @@ internal object MealVoucherFRValidationUtils {
Validation.Invalid(R.string.checkout_meal_voucher_fr_expiry_date_not_valid_too_old),
)

is CardExpiryDateValidationResult.Invalid.DateFormat,
is CardExpiryDateValidationResult.Invalid.OtherReason -> FieldState(
is CardExpiryDateValidationResult.Invalid.NonParseableDate -> FieldState(
expiryDate,
Validation.Invalid(R.string.checkout_meal_voucher_fr_expiry_date_not_valid),
)
Expand Down

0 comments on commit 90d44ed

Please sign in to comment.