/** * Checks whether or not the {@link #expMonth} and {@link #expYear} fields represent a valid * expiry date. * * @return {@code true} if valid, {@code false} otherwise */ public boolean validateExpiryDate() { return validateExpiryDate(Calendar.getInstance()); }
boolean validateCard(@NonNull Calendar now) { if (cvc == null) { return validateNumber() && validateExpiryDate(now); } else { return validateNumber() && validateExpiryDate(now) && validateCVC(); } }
@Test public void shouldFailValidateExpiryDateIfNullYear() { Card card = new Card(null, 1, null, null); assertFalse(card.validateExpiryDate(calendar)); }
@Test public void shouldFailValidateExpiryDateIfNullMonth() { Card card = new Card(null, null, YEAR_IN_FUTURE, null); assertFalse(card.validateExpMonth()); assertTrue(card.validateExpYear(calendar)); assertFalse(card.validateExpiryDate(calendar)); }
@Test public void shouldPassValidateExpiryDateForDecemberOfThisYear() { Card card = new Card(null, 12, 1997, null); assertTrue(card.validateExpMonth()); assertTrue(card.validateExpYear(calendar)); assertTrue(card.validateExpiryDate(calendar)); }
@Test public void shouldPassValidateExpiryDateIfCurrentMonth() { Card card = new Card(null, 8, 1997, null); assertTrue(card.validateExpMonth()); assertTrue(card.validateExpYear(calendar)); assertTrue(card.validateExpiryDate(calendar)); }
@Test public void shouldFailValidateExpiryDateIfZeroYear() { Card card = new Card(null, 12, 0, null); assertTrue(card.validateExpMonth()); assertFalse(card.validateExpYear(calendar)); assertFalse(card.validateExpiryDate(calendar)); }
@Test public void shouldFailValidateExpiryDateIfNegativeMonth() { Card card = new Card(null, -1, YEAR_IN_FUTURE, null); assertFalse(card.validateExpMonth()); assertTrue(card.validateExpYear(calendar)); assertFalse(card.validateExpiryDate(calendar)); }
@Test public void shouldFailValidateExpiryDateIfMonthToLarge() { Card card = new Card(null, 13, YEAR_IN_FUTURE, null); assertFalse(card.validateExpMonth()); assertTrue(card.validateExpYear(calendar)); assertFalse(card.validateExpiryDate(calendar)); }
@Test public void shouldFailValidateExpiryDateIfNegativeYear() { Card card = new Card(null, 12, -1, null); assertTrue(card.validateExpMonth()); assertFalse(card.validateExpYear(calendar)); assertFalse(card.validateExpiryDate(calendar)); }
@Test public void shouldPassValidateExpiryDateIfCurrentMonthTwoDigitYear() { Card card = new Card(null, 8, 97, null); assertTrue(card.validateExpMonth()); assertTrue(card.validateExpYear(calendar)); assertTrue(card.validateExpiryDate(calendar)); }
@Test public void shouldFailValidateCardIfNotLuhnNumber() { Card card = new Card("4242-4242-4242-4241", 12, 2050, "123"); assertFalse(card.validateCard()); assertFalse(card.validateNumber()); assertTrue(card.validateExpiryDate(calendar)); assertTrue(card.validateCVC()); }
@Test public void shouldFailValidateCardVisaWithShortCVC() { Card card = new Card("4242-4242-4242-4242", 12, 2050, "12"); assertFalse(card.validateCard(calendar)); assertTrue(card.validateNumber()); assertTrue(card.validateExpiryDate(calendar)); assertFalse(card.validateCVC()); }
@Test public void shouldFailValidateCardVisaWithLongCVC() { Card card = new Card("4242-4242-4242-4242", 12, 2050, "1234"); assertFalse(card.validateCard(calendar)); assertTrue(card.validateNumber()); assertTrue(card.validateExpiryDate(calendar)); assertFalse(card.validateCVC()); }
@Test public void shouldPassValidateCardVisa() { Card card = new Card("4242-4242-4242-4242", 12, 2050, "123"); assertTrue(card.validateCard(calendar)); assertTrue(card.validateNumber()); assertTrue(card.validateExpiryDate(calendar)); assertTrue(card.validateCVC()); }
@Test public void shouldPassValidateCardAmexWithNullCVC() { Card card = new Card("378282246310005", 12, 2050, null); assertTrue(card.validateCard(calendar)); assertTrue(card.validateNumber()); assertTrue(card.validateExpiryDate(calendar)); assertFalse(card.validateCVC()); }
@Test public void shouldFailValidateCardAmexWithLongCVC() { Card card = new Card("378282246310005", 12, 2050, "12345"); assertFalse(card.validateCard(calendar)); assertTrue(card.validateNumber()); assertTrue(card.validateExpiryDate(calendar)); assertFalse(card.validateCVC()); }
@Test public void shouldPassValidateCardWithNullCVC() { Card card = new Card("4242-4242-4242-4242", 12, 2050, null); assertTrue(card.validateCard(calendar)); assertTrue(card.validateNumber()); assertTrue(card.validateExpiryDate(calendar)); assertFalse(card.validateCVC()); }
@Test public void shouldFailValidateCardAmexWithShortCVC() { Card card = new Card("378282246310005", 12, 2050, "12"); assertFalse(card.validateCard(calendar)); assertTrue(card.validateNumber()); assertTrue(card.validateExpiryDate(calendar)); assertFalse(card.validateCVC()); }
@Test public void shouldFailValidateCardAmexWithBadCVC() { Card card = new Card("378282246310005", 12, 2050, "bad"); assertFalse(card.validateCard(calendar)); assertTrue(card.validateNumber()); assertTrue(card.validateExpiryDate(calendar)); assertFalse(card.validateCVC()); }