diff options
| author | DivisionByZero <[email protected]> | 2025-08-13 22:01:31 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-08-13 20:01:31 +0000 |
| commit | 9783d95a8e43c45bc44c5c0c546b250b6c2ae140 (patch) | |
| tree | 18ba8ad955b31ae4fa0b37b0aaf9cda79ba96f51 /test | |
| parent | 9940d54f75205b65a74d11484cb385c85656a43f (diff) | |
| download | faker-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.ts | 63 |
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); + } + ); + } + ); + }); + }); + }); +}); |
