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([ ...@@ -124,7 +124,7 @@ define([
if (!CreditCardUtils.isValidCardNumber(cardNumber)) { if (!CreditCardUtils.isValidCardNumber(cardNumber)) {
appendCardValidationErrorMsg(event, cardNumberField, 'Invalid card number'); 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'); appendCardValidationErrorMsg(event, cardNumberField, 'Unsupported card type');
} else if (cvnNumber.length !== cardType.cvnLength || !Number.isInteger(Number(cvnNumber))) { } else if (cvnNumber.length !== cardType.cvnLength || !Number.isInteger(Number(cvnNumber))) {
appendCardValidationErrorMsg(event, cvnNumberField, 'Invalid CVN'); appendCardValidationErrorMsg(event, cvnNumberField, 'Invalid CVN');
...@@ -148,6 +148,11 @@ define([ ...@@ -148,6 +148,11 @@ define([
if (cardNumber.length > 12) { if (cardNumber.length > 12) {
card = CreditCardUtils.getCreditCardType(cardNumber); card = CreditCardUtils.getCreditCardType(cardNumber);
if (!CreditCardUtils.isValidCardNumber(cardNumber)) {
$('.card-type-icon').attr('src', '').addClass('hidden');
return;
}
if (typeof card !== 'undefined') { if (typeof card !== 'undefined') {
$('.card-type-icon').attr( $('.card-type-icon').attr(
'src', 'src',
...@@ -163,6 +168,10 @@ define([ ...@@ -163,6 +168,10 @@ define([
} }
}, },
isCardTypeSupported = function (cardType) {
return $.inArray(cardType, ['amex', 'discover', 'mastercard', 'visa']) > -1;
},
onReady = function() { onReady = function() {
var $paymentButtons = $('.payment-buttons'), var $paymentButtons = $('.payment-buttons'),
basketId = $paymentButtons.data('basket-id'); basketId = $paymentButtons.data('basket-id');
...@@ -347,6 +356,7 @@ define([ ...@@ -347,6 +356,7 @@ define([
cardInfoValidation: cardInfoValidation, cardInfoValidation: cardInfoValidation,
checkoutPayment: checkoutPayment, checkoutPayment: checkoutPayment,
hideVoucherForm: hideVoucherForm, hideVoucherForm: hideVoucherForm,
isCardTypeSupported: isCardTypeSupported,
onFail: onFail, onFail: onFail,
onReady: onReady, onReady: onReady,
onSuccess: onSuccess, onSuccess: onSuccess,
......
...@@ -184,12 +184,9 @@ define([ ...@@ -184,12 +184,9 @@ define([
it('should recognize the credit card', function() { it('should recognize the credit card', function() {
var validCardList = [ var validCardList = [
{'number': '378282246310005', 'name': 'amex', 'type': '003'}, {'number': '378282246310005', 'name': 'amex', 'type': '003'},
{'number': '30569309025904', 'name': 'diners', 'type': '005'},
{'number': '6011111111111117', 'name': 'discover', 'type': '004'}, {'number': '6011111111111117', 'name': 'discover', 'type': '004'},
{'number': '3530111333300000', 'name': 'jcb', 'type': '007'},
{'number': '5105105105105100', 'name': 'mastercard', 'type': '002'}, {'number': '5105105105105100', 'name': 'mastercard', 'type': '002'},
{'number': '4111111111111111', 'name': 'visa', 'type': '001'}, {'number': '4111111111111111', 'name': 'visa', 'type': '001'}
{'number': '6759649826438453', 'name': 'maestro', 'type': '042'}
]; ];
BasketPage.onReady(); BasketPage.onReady();
...@@ -209,6 +206,19 @@ define([ ...@@ -209,6 +206,19 @@ define([
expect($('input[name=card_type]').val()).toEqual(card.type); 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() { describe('clientSideCheckoutValidation', function() {
......
...@@ -34,26 +34,11 @@ define([],function () { ...@@ -34,26 +34,11 @@ define([],function () {
cybersourceTypeId: '003', cybersourceTypeId: '003',
cvnLength: 4 cvnLength: 4
}, },
diners: {
regex: /^3(?:0[0-59]|[689]\d)\d{11}$/,
cybersourceTypeId: '005',
cvnLength: 3
},
discover: { 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 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', cybersourceTypeId: '004',
cvnLength: 3 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: { 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}$/, 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', 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