aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDivisionByZero <[email protected]>2025-08-13 22:01:31 +0200
committerGitHub <[email protected]>2025-08-13 20:01:31 +0000
commit9783d95a8e43c45bc44c5c0c546b250b6c2ae140 (patch)
tree18ba8ad955b31ae4fa0b37b0aaf9cda79ba96f51
parent9940d54f75205b65a74d11484cb385c85656a43f (diff)
downloadfaker-9783d95a8e43c45bc44c5c0c546b250b6c2ae140.tar.xz
faker-9783d95a8e43c45bc44c5c0c546b250b6c2ae140.zip
refactor(locale): remove invalid credit card issuer patterns (#3568)
-rw-r--r--src/locales/el/finance/credit_card/discover.ts6
-rw-r--r--src/locales/en/finance/credit_card/diners_club.ts6
-rw-r--r--src/locales/en/finance/credit_card/discover.ts6
-rw-r--r--test/modules/finance.spec.ts63
4 files changed, 65 insertions, 16 deletions
diff --git a/src/locales/el/finance/credit_card/discover.ts b/src/locales/el/finance/credit_card/discover.ts
index 1010fae7..6b7bbb48 100644
--- a/src/locales/el/finance/credit_card/discover.ts
+++ b/src/locales/el/finance/credit_card/discover.ts
@@ -1,5 +1 @@
-export default [
- '/6011-####-####-###L/',
- '/64[4-9]#-####-####-###L/',
- '/65##-####-####-###L/',
-];
+export default ['/6011-####-####-###L/', '/65##-####-####-###L/'];
diff --git a/src/locales/en/finance/credit_card/diners_club.ts b/src/locales/en/finance/credit_card/diners_club.ts
index b372913b..b5eb6933 100644
--- a/src/locales/en/finance/credit_card/diners_club.ts
+++ b/src/locales/en/finance/credit_card/diners_club.ts
@@ -1,5 +1 @@
-export default [
- '30[0-5]#-######-###L',
- '36##-######-###L',
- '54##-####-####-###L',
-];
+export default ['30[0-5]#-######-###L', '36##-######-###L'];
diff --git a/src/locales/en/finance/credit_card/discover.ts b/src/locales/en/finance/credit_card/discover.ts
index d2b3ac18..734723f8 100644
--- a/src/locales/en/finance/credit_card/discover.ts
+++ b/src/locales/en/finance/credit_card/discover.ts
@@ -1,5 +1 @@
-export default [
- '6011-####-####-###L',
- '64[4-9]#-####-####-###L',
- '65##-####-####-###L',
-];
+export default ['6011-####-####-###L', '65##-####-####-###L'];
diff --git a/test/modules/finance.spec.ts b/test/modules/finance.spec.ts
index d325f1b7..d79bc79a 100644
--- a/test/modules/finance.spec.ts
+++ b/test/modules/finance.spec.ts
@@ -1,6 +1,7 @@
import isCreditCard from 'validator/lib/isCreditCard';
+import isLuhnNumber from 'validator/lib/isLuhnNumber';
import { describe, expect, it } from 'vitest';
-import { faker, fakerZH_CN } from '../../src';
+import { allLocales, faker, fakerZH_CN } from '../../src';
import { FakerError } from '../../src/errors/faker-error';
import {
BitcoinAddressFamily,
@@ -597,3 +598,63 @@ describe('finance', () => {
}
);
});
+
+describe('finance locale data', () => {
+ // Dedicated type for readability purposes
+ type KnownProvider = Exclude<
+ Parameters<typeof isCreditCard>[1],
+ undefined
+ >['provider'];
+
+ function getKnownProvider(value: string | undefined): KnownProvider {
+ // taken from definitions of validatorjs:
+ // https://github.com/validatorjs/validator.js/blob/72573b3d1d8ab2e6575e6bba1cbe2b01f95f4935/src/lib/isCreditCard.js#L4-L12
+ const providers: Record<string, KnownProvider> = {
+ american_express: 'amex',
+ diners_club: 'dinersclub',
+ discover: 'discover',
+ jcb: 'jcb',
+ mastercard: 'mastercard',
+ unionpay: 'unionpay',
+ visa: 'visa',
+ };
+
+ const knownProvider = providers[value ?? ''];
+ if (knownProvider == null) {
+ throw new Error(
+ `Issuer "${value}" is not a known provider for validatorjs. Because of that the validity of it's patterns can not be verified.`
+ );
+ }
+
+ return knownProvider;
+ }
+
+ const localesWithData = Object.entries(allLocales).filter(
+ ([, data]) => Object.keys(data.finance?.credit_card ?? {}).length > 0
+ );
+ describe.each(localesWithData)(`%s`, (_localeName, localeData) => {
+ describe('credit cards', () => {
+ describe('issuer', () => {
+ describe.each(Object.entries(localeData.finance?.credit_card ?? {}))(
+ '%s',
+ (issuerName, issuerPatterns) => {
+ function isCreditCardFromIssuer(value: string) {
+ return isCreditCard(value, {
+ provider: getKnownProvider(issuerName),
+ });
+ }
+
+ it.each(issuerPatterns)(
+ 'pattern "%s" should generate a valid credit card number',
+ (pattern) => {
+ const result = faker.finance.creditCardNumber(pattern);
+ expect(result).toSatisfy(isLuhnNumber);
+ expect(result).toSatisfy(isCreditCardFromIssuer);
+ }
+ );
+ }
+ );
+ });
+ });
+ });
+});