aboutsummaryrefslogtreecommitdiff
path: root/test
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 /test
parent9940d54f75205b65a74d11484cb385c85656a43f (diff)
downloadfaker-9783d95a8e43c45bc44c5c0c546b250b6c2ae140.tar.xz
faker-9783d95a8e43c45bc44c5c0c546b250b6c2ae140.zip
refactor(locale): remove invalid credit card issuer patterns (#3568)
Diffstat (limited to 'test')
-rw-r--r--test/modules/finance.spec.ts63
1 files changed, 62 insertions, 1 deletions
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);
+ }
+ );
+ }
+ );
+ });
+ });
+ });
+});