Commit 8be3cdb0 by iivic Committed by Ivan Ivic

[SOL-2197] Do not allow unsupported CCs from new basket page.

parent 864b431f
......@@ -124,7 +124,7 @@ define([
if (!CreditCardUtils.isValidCardNumber(cardNumber)) {
appendCardValidationErrorMsg(event, cardNumberField, 'Invalid card number');
} else if (typeof cardType === 'undefined') {
} else if (typeof cardType === 'undefined' || !isCardTypeSupported(cardType.name)) {
appendCardValidationErrorMsg(event, cardNumberField, 'Unsupported card type');
} else if (cvnNumber.length !== cardType.cvnLength || !Number.isInteger(Number(cvnNumber))) {
appendCardValidationErrorMsg(event, cvnNumberField, 'Invalid CVN');
......@@ -148,6 +148,11 @@ define([
if (cardNumber.length > 12) {
card = CreditCardUtils.getCreditCardType(cardNumber);
if (!CreditCardUtils.isValidCardNumber(cardNumber)) {
$('.card-type-icon').attr('src', '').addClass('hidden');
return;
}
if (typeof card !== 'undefined') {
$('.card-type-icon').attr(
'src',
......@@ -163,6 +168,10 @@ define([
}
},
isCardTypeSupported = function (cardType) {
return $.inArray(cardType, ['amex', 'discover', 'mastercard', 'visa']) > -1;
},
onReady = function() {
var $paymentButtons = $('.payment-buttons'),
basketId = $paymentButtons.data('basket-id');
......@@ -347,6 +356,7 @@ define([
cardInfoValidation: cardInfoValidation,
checkoutPayment: checkoutPayment,
hideVoucherForm: hideVoucherForm,
isCardTypeSupported: isCardTypeSupported,
onFail: onFail,
onReady: onReady,
onSuccess: onSuccess,
......
......@@ -184,12 +184,9 @@ define([
it('should recognize the credit card', function() {
var validCardList = [
{'number': '378282246310005', 'name': 'amex', 'type': '003'},
{'number': '30569309025904', 'name': 'diners', 'type': '005'},
{'number': '6011111111111117', 'name': 'discover', 'type': '004'},
{'number': '3530111333300000', 'name': 'jcb', 'type': '007'},
{'number': '5105105105105100', 'name': 'mastercard', 'type': '002'},
{'number': '4111111111111111', 'name': 'visa', 'type': '001'},
{'number': '6759649826438453', 'name': 'maestro', 'type': '042'}
{'number': '4111111111111111', 'name': 'visa', 'type': '001'}
];
BasketPage.onReady();
......@@ -209,6 +206,19 @@ define([
expect($('input[name=card_type]').val()).toEqual(card.type);
});
});
it('should determine if credit card type is supported', function () {
var validCardTypes = ['amex', 'discover', 'mastercard', 'visa'],
invalidCardTypes = ['diners', 'jcb', 'maestro'];
_.each(validCardTypes, function (cardType) {
expect(BasketPage.isCardTypeSupported(cardType)).toBeTruthy();
});
_.each(invalidCardTypes, function (cardType) {
expect(BasketPage.isCardTypeSupported(cardType)).toBeFalsy();
});
});
});
describe('clientSideCheckoutValidation', function() {
......
......@@ -34,26 +34,11 @@ define([],function () {
cybersourceTypeId: '003',
cvnLength: 4
},
diners: {
regex: /^3(?:0[0-59]|[689]\d)\d{11}$/,
cybersourceTypeId: '005',
cvnLength: 3
},
discover: {
regex: /^(6011\d{2}|65\d{4}|64[4-9]\d{3}|62212[6-9]|6221[3-9]\d|622[2-8]\d{2}|6229[01]\d|62292[0-5])\d{10,13}$/, // jshint ignore:line
cybersourceTypeId: '004',
cvnLength: 3
},
jcb: {
regex: /^(?:2131|1800|35\d{3})\d{11}$/,
cybersourceTypeId: '007',
cvnLength: 4
},
maestro: {
regex: /^(5[06789]|6\d)[0-9]{10,17}$/,
cybersourceTypeId: '042',
cvnLength: 3
},
mastercard: {
regex: /^(5[1-5]\d{2}|222[1-9]|22[3-9]\d|2[3-6]\d{2}|27[01]\d|2720)\d{12}$/,
cybersourceTypeId: '002',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment