/*
* Hibernate Validator, declare and validate application constraints
*
* License: Apache License, Version 2.0
* See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
*/
package org.hibernate.validator.test.internal.constraintvalidators.hv;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.hibernate.validator.constraints.CreditCardNumber;
import org.hibernate.validator.testutil.MyCustomStringImpl;
import org.hibernate.validator.testutil.TestForIssue;
import static org.hibernate.validator.testutil.ConstraintViolationAssert.assertNumberOfViolations;
import static org.hibernate.validator.testutil.ValidatorUtil.getValidator;
/**
* @author Hardy Ferentschik
*/
public class CreditCardNumberValidatorTest {
private static Validator validator;
@BeforeClass
public static void init() {
validator = getValidator();
}
@Test
public void testInvalidCreditCardNumber() throws Exception {
CreditCard card = new CreditCard();
card.setCreditCardNumber( "1234567890123456" );
Set<ConstraintViolation<CreditCard>> constraintViolations = validator.validate( card );
assertNumberOfViolations( constraintViolations, 1 );
}
@Test
@TestForIssue(jiraKey = "HV-502")
public void testInvalidCreditCardNumberAsCharSequence() throws Exception {
CreditCard card = new CreditCard();
card.setCreditCardNumberAsCharSequence( new MyCustomStringImpl( "1234567890123456" ) );
Set<ConstraintViolation<CreditCard>> constraintViolations = validator.validate( card );
assertNumberOfViolations( constraintViolations, 1 );
}
@Test
public void testValidCreditCardNumber() throws Exception {
CreditCard card = new CreditCard();
card.setCreditCardNumber( "541234567890125" );
Set<ConstraintViolation<CreditCard>> constraintViolations = validator.validate( card );
assertNumberOfViolations( constraintViolations, 0 );
}
@Test
@TestForIssue(jiraKey = "HV-502")
public void testValidCreditCardNumberAsCharSequence() throws Exception {
CreditCard card = new CreditCard();
card.setCreditCardNumberAsCharSequence( new MyCustomStringImpl( "541234567890125" ) );
Set<ConstraintViolation<CreditCard>> constraintViolations = validator.validate( card );
assertNumberOfViolations( constraintViolations, 0 );
}
@Test
@TestForIssue(jiraKey = "HV-901")
public void testValidCreditCardNumberWithZeroCheckDigit() throws Exception {
CreditCard card = new CreditCard();
card.setCreditCardNumber( "5105105105105100" );
Set<ConstraintViolation<CreditCard>> constraintViolations = validator.validate( card );
assertNumberOfViolations( constraintViolations, 0 );
}
@Test
public void testNullValue() throws Exception {
Set<ConstraintViolation<CreditCard>> constraintViolations = validator.validate( new CreditCard() );
assertNumberOfViolations( constraintViolations, 0 );
}
@Test
@TestForIssue(jiraKey = "HV-906")
public void testCharactersAreNotAllowedTest() {
CreditCard card = new CreditCard();
card.setCreditCardNumber( "text not numbers" );
Set<ConstraintViolation<CreditCard>> constraintViolations = validator.validate( card );
assertNumberOfViolations( constraintViolations, 1 );
}
@Test
@TestForIssue(jiraKey = "HV-906")
public void testValidCreditCardNumberWithSpaces() throws Exception {
CreditCard card = new CreditCard();
card.setCreditCardNumberWithNonDigits( "5412 3456 7890 125" );
Set<ConstraintViolation<CreditCard>> constraintViolations = validator.validate( card );
assertNumberOfViolations( constraintViolations, 0 );
}
@Test
@TestForIssue(jiraKey = "HV-906")
public void testValidCreditCardNumberWithDashes() throws Exception {
CreditCard card = new CreditCard();
card.setCreditCardNumberWithNonDigits( "5412-3456-7890-125" );
Set<ConstraintViolation<CreditCard>> constraintViolations = validator.validate( card );
assertNumberOfViolations( constraintViolations, 0 );
}
public static class CreditCard {
@CreditCardNumber
String creditCardNumber;
@CreditCardNumber(ignoreNonDigitCharacters = true)
String creditCardNumberWithNonDigits;
@CreditCardNumber
CharSequence creditCardNumberAsCharSequence;
public void setCreditCardNumber(String creditCardNumber) {
this.creditCardNumber = creditCardNumber;
}
public void setCreditCardNumberAsCharSequence(CharSequence creditCardNumberAsCharSequence) {
this.creditCardNumberAsCharSequence = creditCardNumberAsCharSequence;
}
public void setCreditCardNumberWithNonDigits(String creditCardNumberWithNonDigits) {
this.creditCardNumberWithNonDigits = creditCardNumberWithNonDigits;
}
}
}