01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */
17: package org.apache.commons.validator;
18:
19: import junit.framework.TestCase;
20:
21: /**
22: * Test the CreditCardValidator class.
23: *
24: * @version $Revision: 478334 $ $Date: 2006-11-22 21:31:54 +0000 (Wed, 22 Nov 2006) $
25: */
26: public class CreditCardValidatorTest extends TestCase {
27:
28: private static final String VALID_VISA = "4417123456789113";
29: private static final String VALID_SHORT_VISA = "4222222222222";
30: private static final String VALID_AMEX = "378282246310005";
31: private static final String VALID_MASTERCARD = "5105105105105100";
32: private static final String VALID_DISCOVER = "6011000990139424";
33: private static final String VALID_DINERS = "30569309025904";
34:
35: /**
36: * Constructor for CreditCardValidatorTest.
37: */
38: public CreditCardValidatorTest(String name) {
39: super (name);
40: }
41:
42: public void testIsValid() {
43: CreditCardValidator ccv = new CreditCardValidator();
44:
45: assertFalse(ccv.isValid(null));
46: assertFalse(ccv.isValid(""));
47: assertFalse(ccv.isValid("123456789012")); // too short
48: assertFalse(ccv.isValid("12345678901234567890")); // too long
49: assertFalse(ccv.isValid("4417123456789112"));
50: assertFalse(ccv.isValid("4417q23456w89113"));
51: assertTrue(ccv.isValid(VALID_VISA));
52: assertTrue(ccv.isValid(VALID_SHORT_VISA));
53: assertTrue(ccv.isValid(VALID_AMEX));
54: assertTrue(ccv.isValid(VALID_MASTERCARD));
55: assertTrue(ccv.isValid(VALID_DISCOVER));
56:
57: // disallow Visa so it should fail even with good number
58: ccv = new CreditCardValidator(CreditCardValidator.AMEX);
59: assertFalse(ccv.isValid("4417123456789113"));
60: }
61:
62: public void testAddAllowedCardType() {
63: CreditCardValidator ccv = new CreditCardValidator(
64: CreditCardValidator.NONE);
65: // Turned off all cards so even valid numbers should fail
66: assertFalse(ccv.isValid(VALID_VISA));
67: assertFalse(ccv.isValid(VALID_AMEX));
68: assertFalse(ccv.isValid(VALID_MASTERCARD));
69: assertFalse(ccv.isValid(VALID_DISCOVER));
70:
71: // test our custom type
72: ccv.addAllowedCardType(new DinersClub());
73: assertTrue(ccv.isValid(VALID_DINERS));
74: }
75:
76: /**
77: * Test a custom implementation of CreditCardType.
78: */
79: private class DinersClub implements
80: CreditCardValidator.CreditCardType {
81: private static final String PREFIX = "300,301,302,303,304,305,";
82:
83: public boolean matches(String card) {
84: String prefix = card.substring(0, 3) + ",";
85: return ((PREFIX.indexOf(prefix) != -1) && (card.length() == 14));
86: }
87: }
88:
89: }
|