11import {
22 isValidLuhn ,
33 getCreditCardNetworkFromNumber ,
4+ mapCardNetworkStrings ,
45} from '../../helpers/credit_card_utils' ;
56import { CreditCardNetwork } from '../../models/credit_card_network' ;
67
@@ -10,13 +11,15 @@ describe('isValidLuhn', () => {
1011 expect ( isValidLuhn ( '4532015112830366' ) ) . toBe ( true ) ; // Valid Visa
1112 expect ( isValidLuhn ( '378282246310005' ) ) . toBe ( true ) ; // Valid Amex
1213 expect ( isValidLuhn ( '5421080101000000' ) ) . toBe ( true ) ; // Valid Mastercard
14+ expect ( isValidLuhn ( '6200000000000005' ) ) . toBe ( true ) ; // Valid UnionPay
1315 } ) ;
1416
1517 it ( 'should return false for an invalid card number' , ( ) => {
1618 expect ( isValidLuhn ( '4201320111111011' ) ) . toBe ( false ) ; // Invalid Mada
1719 expect ( isValidLuhn ( '4532015112830367' ) ) . toBe ( false ) ; // Invalid Visa
1820 expect ( isValidLuhn ( '378282246310006' ) ) . toBe ( false ) ; // Invalid Amex
1921 expect ( isValidLuhn ( '5421080101000001' ) ) . toBe ( false ) ; // Invalid Mastercard
22+ expect ( isValidLuhn ( '6200000000000006' ) ) . toBe ( false ) ; // Invalid UnionPay
2023 } ) ;
2124
2225 it ( 'should return false for a card number with non-digit characters' , ( ) => {
@@ -60,9 +63,48 @@ describe('getCreditCardNetworkFromNumber', () => {
6063 ) ;
6164 } ) ;
6265
66+ it ( 'should return unionpay for a card number matching unionpay range and length' , ( ) => {
67+ expect ( getCreditCardNetworkFromNumber ( '6200000000000005' ) ) . toBe (
68+ CreditCardNetwork . unionpay
69+ ) ;
70+ expect ( getCreditCardNetworkFromNumber ( '6200000000000000000' ) ) . toBe (
71+ CreditCardNetwork . unionpay
72+ ) ;
73+ } ) ;
74+
6375 it ( 'should return unknown for a card number not matching any known network' , ( ) => {
6476 expect ( getCreditCardNetworkFromNumber ( '1234567812345670' ) ) . toBe (
6577 CreditCardNetwork . unknown
6678 ) ;
6779 } ) ;
6880} ) ;
81+
82+ describe ( 'mapCardNetworkStrings' , ( ) => {
83+ it ( 'should map all supported network aliases including UnionPay aliases' , ( ) => {
84+ const mappedNetworks = mapCardNetworkStrings ( [
85+ 'mada' ,
86+ 'visa' ,
87+ 'mastercard' ,
88+ 'amex' ,
89+ 'unionpay' ,
90+ 'chinaunionpay' ,
91+ 'china union pay' ,
92+ ] ) ;
93+
94+ expect ( mappedNetworks ) . toEqual ( [
95+ CreditCardNetwork . mada ,
96+ CreditCardNetwork . visa ,
97+ CreditCardNetwork . master ,
98+ CreditCardNetwork . amex ,
99+ CreditCardNetwork . unionpay ,
100+ CreditCardNetwork . unionpay ,
101+ CreditCardNetwork . unionpay ,
102+ ] ) ;
103+ } ) ;
104+
105+ it ( 'should filter out unsupported network names' , ( ) => {
106+ const mappedNetworks = mapCardNetworkStrings ( [ 'visa' , 'unsupported' ] ) ;
107+
108+ expect ( mappedNetworks ) . toEqual ( [ CreditCardNetwork . visa ] ) ;
109+ } ) ;
110+ } ) ;
0 commit comments