Skip to content

Commit 9783d95

Browse files
refactor(locale): remove invalid credit card issuer patterns (#3568)
1 parent 9940d54 commit 9783d95

File tree

4 files changed

+65
-16
lines changed

4 files changed

+65
-16
lines changed
Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1 @@
1-
export default [
2-
'/6011-####-####-###L/',
3-
'/64[4-9]#-####-####-###L/',
4-
'/65##-####-####-###L/',
5-
];
1+
export default ['/6011-####-####-###L/', '/65##-####-####-###L/'];
Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1 @@
1-
export default [
2-
'30[0-5]#-######-###L',
3-
'36##-######-###L',
4-
'54##-####-####-###L',
5-
];
1+
export default ['30[0-5]#-######-###L', '36##-######-###L'];
Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1 @@
1-
export default [
2-
'6011-####-####-###L',
3-
'64[4-9]#-####-####-###L',
4-
'65##-####-####-###L',
5-
];
1+
export default ['6011-####-####-###L', '65##-####-####-###L'];

test/modules/finance.spec.ts

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import isCreditCard from 'validator/lib/isCreditCard';
2+
import isLuhnNumber from 'validator/lib/isLuhnNumber';
23
import { describe, expect, it } from 'vitest';
3-
import { faker, fakerZH_CN } from '../../src';
4+
import { allLocales, faker, fakerZH_CN } from '../../src';
45
import { FakerError } from '../../src/errors/faker-error';
56
import {
67
BitcoinAddressFamily,
@@ -597,3 +598,63 @@ describe('finance', () => {
597598
}
598599
);
599600
});
601+
602+
describe('finance locale data', () => {
603+
// Dedicated type for readability purposes
604+
type KnownProvider = Exclude<
605+
Parameters<typeof isCreditCard>[1],
606+
undefined
607+
>['provider'];
608+
609+
function getKnownProvider(value: string | undefined): KnownProvider {
610+
// taken from definitions of validatorjs:
611+
// https://github.com/validatorjs/validator.js/blob/72573b3d1d8ab2e6575e6bba1cbe2b01f95f4935/src/lib/isCreditCard.js#L4-L12
612+
const providers: Record<string, KnownProvider> = {
613+
american_express: 'amex',
614+
diners_club: 'dinersclub',
615+
discover: 'discover',
616+
jcb: 'jcb',
617+
mastercard: 'mastercard',
618+
unionpay: 'unionpay',
619+
visa: 'visa',
620+
};
621+
622+
const knownProvider = providers[value ?? ''];
623+
if (knownProvider == null) {
624+
throw new Error(
625+
`Issuer "${value}" is not a known provider for validatorjs. Because of that the validity of it's patterns can not be verified.`
626+
);
627+
}
628+
629+
return knownProvider;
630+
}
631+
632+
const localesWithData = Object.entries(allLocales).filter(
633+
([, data]) => Object.keys(data.finance?.credit_card ?? {}).length > 0
634+
);
635+
describe.each(localesWithData)(`%s`, (_localeName, localeData) => {
636+
describe('credit cards', () => {
637+
describe('issuer', () => {
638+
describe.each(Object.entries(localeData.finance?.credit_card ?? {}))(
639+
'%s',
640+
(issuerName, issuerPatterns) => {
641+
function isCreditCardFromIssuer(value: string) {
642+
return isCreditCard(value, {
643+
provider: getKnownProvider(issuerName),
644+
});
645+
}
646+
647+
it.each(issuerPatterns)(
648+
'pattern "%s" should generate a valid credit card number',
649+
(pattern) => {
650+
const result = faker.finance.creditCardNumber(pattern);
651+
expect(result).toSatisfy(isLuhnNumber);
652+
expect(result).toSatisfy(isCreditCardFromIssuer);
653+
}
654+
);
655+
}
656+
);
657+
});
658+
});
659+
});
660+
});

0 commit comments

Comments
 (0)