package com.opensymphony.xwork2.validator.validators; import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.util.ValueStackFactory; import com.opensymphony.xwork2.validator.DummyValidatorContext; import com.opensymphony.xwork2.validator.ValidatorContext; import org.apache.struts2.StrutsInternalTestCase; import java.util.Arrays; import java.util.List; public class CreditCardValidatorTest extends StrutsInternalTestCase { private CreditCardValidator validator; private CreditCardAction action; private ValidatorContext context; public void testInvalidCardNumber() throws Exception { // given action.setAmericanExpress("123456768900"); validator.setFieldName("americanExpress"); validator.setDefaultMessage("It is not a valid American Express card number: ${americanExpress}"); // when validator.validate(action); // then assertTrue(context.hasFieldErrors()); assertEquals(1, context.getFieldErrors().size()); assertEquals("It is not a valid American Express card number: 123456768900", context.getFieldErrors().get("americanExpress").get(0)); } public void testInvalidArrayOfCardNumbers() throws Exception { // given action.setAmericanExpresses(new String[]{"098776544322"}); validator.setFieldName("americanExpresses"); validator.setDefaultMessage("It is not a valid American Express card number: ${currentValue}"); // when validator.validate(action); // then assertTrue(context.hasFieldErrors()); assertEquals(1, context.getFieldErrors().size()); assertEquals("It is not a valid American Express card number: 098776544322", context.getFieldErrors().get("americanExpresses").get(0)); } public void testEmptyArrayOfCardNumbers() throws Exception { // given action.setAmericanExpresses(new String[]{}); validator.setFieldName("americanExpresses"); validator.setDefaultMessage("It is not a valid American Express card number: ${currentValue}"); // when validator.validate(action); // then assertFalse(context.hasFieldErrors()); } public void testInvalidCollectionOfCardNumbers() throws Exception { // given action.setDinerClubs(Arrays.asList("75736151433")); validator.setFieldName("dinerClubs"); validator.setDefaultMessage("It is not a valid Diner Club card number: ${currentValue}"); // when validator.validate(action); // then assertTrue(context.hasFieldErrors()); assertEquals(1, context.getFieldErrors().size()); assertEquals("It is not a valid Diner Club card number: 75736151433", context.getFieldErrors().get("dinerClubs").get(0)); } public void testValidAmericanExpressCard() throws Exception { // given action.setAmericanExpress("378282246310005"); validator.setFieldName("americanExpress"); // when validator.validate(action); // then assertFalse(context.hasFieldErrors()); } public void testValidAmericanExpressCardWithSpaces() throws Exception { // given action.setAmericanExpress("3782 8224 6310 005"); validator.setFieldName("americanExpress"); // when validator.validate(action); // then assertFalse(context.hasFieldErrors()); } public void testValidDinersClubCard() throws Exception { // given action.setDinersClub("30569309025904"); validator.setFieldName("dinersClub"); // when validator.validate(action); // then assertFalse(context.hasFieldErrors()); } public void testValidJCBCard() throws Exception { // given action.setJCB("3530111333300000"); validator.setFieldName("JCB"); // when validator.validate(action); // then assertFalse(context.hasFieldErrors()); } public void testMasterCardCard() throws Exception { // given action.setMasterCard("5555555555554444"); validator.setFieldName("masterCard"); // when validator.validate(action); // then assertFalse(context.hasFieldErrors()); } public void testVisaCard() throws Exception { // given action.setVisa("4111111111111111"); validator.setFieldName("visa"); // when validator.validate(action); // then assertFalse(context.hasFieldErrors()); } protected void setUp() throws Exception { super.setUp(); validator = new CreditCardValidator(); action = new CreditCardAction(); TextProviderFactory tpf = container.getInstance(TextProviderFactory.class); context = new DummyValidatorContext(action, tpf); validator.setValidatorContext(context); ValueStack valueStack = container.getInstance(ValueStackFactory.class).createValueStack(); valueStack.push(action); validator.setValueStack(valueStack); } } class CreditCardAction { private String americanExpress; private String dinersClub; private String JCB; private String masterCard; private String visa; private String[] americanExpresses; private List<String> dinerClubs; public void setAmericanExpress(String americanExpress) { this.americanExpress = americanExpress; } public String getAmericanExpress() { return americanExpress; } public void setDinersClub(String dinersClub) { this.dinersClub = dinersClub; } public String getDinersClub() { return dinersClub; } public void setJCB(String JCB) { this.JCB = JCB; } public String getJCB() { return JCB; } public void setMasterCard(String masterCard) { this.masterCard = masterCard; } public String getMasterCard() { return masterCard; } public void setVisa(String visa) { this.visa = visa; } public String getVisa() { return visa; } public void setAmericanExpresses(String[] americanExpresses) { this.americanExpresses = americanExpresses; } public String[] getAmericanExpresses() { return americanExpresses; } public void setDinerClubs(List<String> dinerClubs) { this.dinerClubs = dinerClubs; } public List<String> getDinerClubs() { return dinerClubs; } }