tweb/src/tests/cards.test.ts

60 lines
1.7 KiB
TypeScript

import cardFormattingPatterns from '../helpers/cards/cardFormattingPatterns';
import formatValueByPattern from '../helpers/cards/formatValueByPattern';
import {validateCardExpiry, validateCardNumber} from '../helpers/cards/validateCard';
describe('Card number', () => {
test('Format', () => {
const data = [
['4242424242424242', '4242 4242 4242 4242'],
['371758885524003', '3717 588855 24003']
];
data.forEach(([plain, formatted]) => {
const result = formatValueByPattern(cardFormattingPatterns.cardNumber, plain);
expect(result.value).toEqual(formatted);
});
});
test('Validate', () => {
const data = [
['4242424242424242', null],
['4242424242424241', 'invalid'],
['424242424242424', 'incomplete']
];
data.forEach(([cardNumber, code]) => {
const result = validateCardNumber(cardNumber);
if(code) {
expect(result.code).toEqual(code);
} else {
expect(result).toEqual(null);
}
});
});
});
describe('Expiry date', () => {
const joiner = '/';
const getExpiryDate = (date: Date) => `${date.getMonth()}${joiner}${date.getFullYear() % 100}`;
test('Format', () => {
const month = 10;
const year = 20;
const {value} = formatValueByPattern(cardFormattingPatterns.cardExpiry, `${month}${year}`);
expect(value).toEqual(`${month}${joiner}${year}`);
});
test('Expired', () => {
const date = new Date();
date.setMonth(date.getMonth() - 1);
expect(validateCardExpiry(getExpiryDate(date))).toBeTruthy();
});
test('Nonexpired', () => {
const date = new Date();
date.setFullYear(date.getFullYear() + 1);
expect(validateCardExpiry(getExpiryDate(date))).toEqual(null);
});
});