node-creditcard
Version:
Utilities functions for credit cards treatment
372 lines (315 loc) • 12 kB
JavaScript
;
const CreditCard = require('../index'),
identificator = require('../lib/identificator'),
validator = require('../lib/validator'),
decorator = require('../lib/decorator'),
assert = require('unit.js');
const validCards = [
{
brand : 'VISA',
rawNumber : '4716579221521',
maskedNumber: '4716 5792 2152 1',
safeNumber : '4716 **** **** 1',
cvv : '166',
safeCvv : '***',
expiration : '01/2050',
expirationR : '2050/01',
},
{
brand : 'VISA',
rawNumber : '4716058940605004',
maskedNumber: '4716 0589 4060 5004',
safeNumber : '4716 **** **** 5004',
cvv : '517',
safeCvv : '***',
expiration : '01/2050',
expirationR : '2050/01',
},
{
brand : 'MASTERCARD',
rawNumber : '5194189706731425',
maskedNumber: '5194 1897 0673 1425',
safeNumber : '5194 **** **** 1425',
cvv : '831',
safeCvv : '***',
expiration : '01/2050',
expirationR : '2050/01',
},
{
brand : 'DINERS',
rawNumber : '30036809953894',
maskedNumber: '3003 680995 3894',
safeNumber : '3003 ****** 3894',
cvv : '536',
safeCvv : '***',
expiration : '01/2050',
expirationR : '2050/01',
},
{
brand : 'AMEX',
rawNumber : '376921693572268',
maskedNumber: '3769 216935 72268',
safeNumber : '3769 ****** 72268',
cvv : '5710',
safeCvv : '****',
expiration : '01/2050',
expirationR : '2050/01',
},
{
brand : 'HIPERCARD',
rawNumber : '6062822846555505',
maskedNumber: '6062 8228 4655 5505',
safeNumber : '6062 **** **** 5505',
cvv : '123',
safeCvv : '***',
expiration : '01/2050',
expirationR : '2050/01',
},
{
brand : 'ELO',
rawNumber : '4389350624996924',
maskedNumber: '4389 3506 2499 6924',
safeNumber : '4389 **** **** 6924',
cvv : '203',
safeCvv : '***',
expiration : '01/2050',
expirationR : '2050/01',
},
];
describe('Entry Point', function()
{
validCards.forEach(function(data)
{
it('Valid ' + data.brand + ' => ' + data.maskedNumber, function(done)
{
const card = new CreditCard({
holder : ' fulano d tal ',
number : data.maskedNumber,
cvv : data.cvv,
expiration: data.expiration,
});
assert.string(card.brand).isEqualTo(data.brand);
assert.string(card.number).isEqualTo(data.rawNumber);
assert.string(card.maskedNumber).isEqualTo(data.maskedNumber);
assert.string(card.holder).isEqualTo('FULANO D TAL');
assert.string(card.cvv).isEqualTo(data.cvv);
const validation = card.validate();
assert.string(validation.brand).isEqualTo(data.brand);
assert.bool(validation.validCardNumber).isTrue();
assert.bool(validation.validHolder).isTrue();
assert.bool(validation.validCvv).isTrue();
assert.bool(validation.validExpiration).isTrue();
assert.bool(validation.isExpired).isFalse();
assert.bool(card.isValid()).isTrue();
done();
});
it('GetData ' + data.brand + ' => ' + data.maskedNumber, function(done)
{
const card = new CreditCard({
holder : ' fulano d tal ',
number : data.maskedNumber,
cvv : data.cvv,
expiration: data.expiration,
});
assert.object(card.getData()).is({
brand : data.brand,
number : data.rawNumber,
holder : 'FULANO D TAL',
expiration: data.expiration,
cvv : data.cvv,
});
assert.string(card.expirationReverse).isEqualTo(data.expirationR);
done();
});
it('GetSafeData ' + data.brand + ' => ' + data.maskedNumber, function(done)
{
const card = new CreditCard({
holder : ' fulano d tal ',
number : data.maskedNumber,
cvv : data.cvv,
expiration: data.expiration,
});
assert.string(card.safeNumber).isEqualTo(data.safeNumber);
assert.string(card.safeCvv).isEqualTo(data.safeCvv);
assert.object(card.getSafeData()).is({
brand : data.brand,
number : data.safeNumber,
holder : 'FULANO D TAL',
expiration: data.expiration,
cvv : data.safeCvv,
});
done();
});
it('Generating UnMasked String: ' + data.brand, function(done)
{
const generated = CreditCard.generate(data.brand);
assert.string(generated);
assert.bool(validator.validate(generated)).isTrue();
assert.bool(decorator.isMasked(generated)).isFalse();
assert.string(identificator.identify(generated)).isEqualTo(data.brand.toUpperCase());
done();
});
it('Generating UnMasked Array: ' + data.brand, function(done)
{
const generated = CreditCard.generate(data.brand, false, 3);
assert.array(generated).hasLength(3);
generated.forEach(function(number)
{
assert.bool(validator.validate(number)).isTrue();
assert.bool(decorator.isMasked(number)).isFalse();
assert.string(identificator.identify(number)).isEqualTo(data.brand.toUpperCase());
});
done();
});
it('Generating Masked String: ' + data.brand, function(done)
{
const generated = CreditCard.generate(data.brand, true);
assert.string(generated);
assert.bool(validator.validate(generated)).isTrue();
assert.bool(decorator.isMasked(generated)).isTrue();
assert.string(identificator.identify(generated)).isEqualTo(data.brand.toUpperCase());
done();
});
it('Generating Masked Array: ' + data.brand, function(done)
{
const generated = CreditCard.generate(data.brand, true, 3);
assert.array(generated).hasLength(3);
generated.forEach(function(number)
{
assert.bool(validator.validate(number)).isTrue();
assert.bool(decorator.isMasked(number)).isTrue();
assert.string(identificator.identify(number)).isEqualTo(data.brand.toUpperCase());
});
done();
});
it('Identifying UnMasked: ' + data.maskedNumber + ' => ' + data.brand, function(done)
{
assert.string(CreditCard.identify(data.rawNumber)).isEqualTo(data.brand);
done();
});
it('Identifying Masked: ' + data.maskedNumber + ' => ' + data.brand, function(done)
{
assert.string(CreditCard.identify(data.maskedNumber)).isEqualTo(data.brand);
done();
});
it('Is Masked: ' + data.maskedNumber, function(done)
{
assert.bool(CreditCard.isMasked(data.maskedNumber)).isTrue();
done();
});
it('Masking: ' + data.rawNumber, function(done)
{
const masked = CreditCard.mask(data.rawNumber);
assert.bool(decorator.isMasked(masked)).isTrue();
done();
});
it('Is UnMasked: ' + data.rawNumber, function(done)
{
assert.bool(CreditCard.isMasked(data.rawNumber)).isFalse();
done();
});
it('UnMasking: ' + data.rawNumber, function(done)
{
const unMasked = CreditCard.unMask(data.maskedNumber);
assert.bool(decorator.isMasked(unMasked)).isFalse();
done();
});
});
it('Initial Values 1', function(done)
{
const card = new CreditCard();
assert.string(card.brand).isEqualTo('UNKNOW');
assert.string(card.number).isEqualTo('');
assert.string(card.holder).isEqualTo('');
assert.string(card.expiration).isEqualTo('');
assert.string(card.cvv).isEqualTo('');
assert.object(card.getData()).is({
brand : 'UNKNOW',
number : '',
holder : '',
expiration: '',
cvv : '',
});
const validation = card.validate();
assert.string(validation.brand).isEqualTo('UNKNOW');
assert.bool(validation.validCardNumber).isFalse();
assert.bool(validation.validHolder).isFalse();
assert.bool(validation.validCvv).isFalse();
assert.bool(validation.validExpiration).isFalse();
assert.bool(validation.isExpired).isTrue();
assert.bool(card.isValid()).isFalse();
done();
});
it('Initial Values 2', function(done)
{
const card = new CreditCard({});
assert.string(card.brand).isEqualTo('UNKNOW');
assert.string(card.number).isEqualTo('');
assert.string(card.holder).isEqualTo('');
assert.string(card.expiration).isEqualTo('');
assert.string(card.cvv).isEqualTo('');
assert.object(card.getData()).is({
brand : 'UNKNOW',
number : '',
holder : '',
expiration: '',
cvv : '',
});
done();
});
it('Initial Values 3', function(done)
{
const card = new CreditCard({});
assert.string(card.brand).isEqualTo('UNKNOW');
assert.string(card.number).isEqualTo('');
assert.string(card.holder).isEqualTo('');
assert.string(card.expiration).isEqualTo('');
assert.string(card.cvv).isEqualTo('');
assert.object(card.getSafeData()).is({
brand : 'UNKNOW',
number : '',
holder : '',
expiration: '',
cvv : '',
});
const validation = card.validate();
assert.string(validation.brand).isEqualTo('UNKNOW');
assert.bool(validation.validCardNumber).isFalse();
assert.bool(validation.validHolder).isFalse();
assert.bool(validation.validCvv).isFalse();
assert.bool(validation.validExpiration).isFalse();
assert.bool(validation.isExpired).isTrue();
assert.bool(card.isValid()).isFalse();
done();
});
it('Invalid Card Number', function(done)
{
const card = new CreditCard({});
card.number = 123;
assert.object(card.getData()).is({
brand : 'UNKNOW',
number : '123',
holder : '',
expiration: '',
cvv : '',
});
assert.bool(card.isValid()).isFalse();
assert.object(card.validate()).is({
brand : 'UNKNOW',
validCardNumber: false,
validHolder : false,
validCvv : false,
validExpiration: false,
isExpired : true,
});
const validation = card.validate();
assert.string(validation.brand).isEqualTo('UNKNOW');
assert.bool(validation.validCardNumber).isFalse();
assert.bool(validation.validHolder).isFalse();
assert.bool(validation.validCvv).isFalse();
assert.bool(validation.validExpiration).isFalse();
assert.bool(validation.isExpired).isTrue();
assert.bool(card.isValid()).isFalse();
done();
});
});