diff --git a/src/libs/CardUtils.ts b/src/libs/CardUtils.ts index 1d697af554f5..81e77d565db3 100644 --- a/src/libs/CardUtils.ts +++ b/src/libs/CardUtils.ts @@ -287,8 +287,8 @@ function getCardFeedIcon(cardFeed: CompanyCardFeed | typeof CONST.EXPENSIFY_CARD /** * Verify if the feed is a custom feed. Those are also refered to as commercial feeds. */ -function isCustomFeed(feed: CompanyCardFeed): boolean { - return [CONST.COMPANY_CARD.FEED_BANK_NAME.MASTER_CARD, CONST.COMPANY_CARD.FEED_BANK_NAME.VISA, CONST.COMPANY_CARD.FEED_BANK_NAME.AMEX].some((value) => value === feed); +function isCustomFeed(feed: CompanyCardFeedWithNumber): boolean { + return [CONST.COMPANY_CARD.FEED_BANK_NAME.MASTER_CARD, CONST.COMPANY_CARD.FEED_BANK_NAME.VISA, CONST.COMPANY_CARD.FEED_BANK_NAME.AMEX].some((value) => feed.startsWith(value)); } function getCompanyFeeds(cardFeeds: OnyxEntry, shouldFilterOutRemovedFeeds = false): CompanyFeeds { diff --git a/tests/unit/CardUtilsTest.ts b/tests/unit/CardUtilsTest.ts index 0ac8de13c8c8..642494d6ed11 100644 --- a/tests/unit/CardUtilsTest.ts +++ b/tests/unit/CardUtilsTest.ts @@ -2,6 +2,7 @@ import type {OnyxCollection} from 'react-native-onyx'; import CONST from '@src/CONST'; import * as CardUtils from '@src/libs/CardUtils'; import type * as OnyxTypes from '@src/types/onyx'; +import type {CompanyCardFeedWithNumber} from '@src/types/onyx/CardFeeds'; const shortDate = '0924'; const shortDateSlashed = '09/24'; @@ -12,6 +13,17 @@ const longDateHyphen = '09-2024'; const expectedMonth = '09'; const expectedYear = '2024'; +const directFeedBanks = [ + CONST.COMPANY_CARD.FEED_BANK_NAME.AMEX_DIRECT, + CONST.COMPANY_CARD.FEED_BANK_NAME.BANK_OF_AMERICA, + CONST.COMPANY_CARD.FEED_BANK_NAME.BREX, + CONST.COMPANY_CARD.FEED_BANK_NAME.CAPITAL_ONE, + CONST.COMPANY_CARD.FEED_BANK_NAME.CHASE, + CONST.COMPANY_CARD.FEED_BANK_NAME.CITIBANK, + CONST.COMPANY_CARD.FEED_BANK_NAME.STRIPE, + CONST.COMPANY_CARD.FEED_BANK_NAME.WELLS_FARGO, +]; + const companyCardsCustomFeedSettings = { [CONST.COMPANY_CARD.FEED_BANK_NAME.MASTER_CARD]: { pending: true, @@ -232,14 +244,43 @@ describe('CardUtils', () => { }); describe('isCustomFeed', () => { - it('Should return true for the custom feed', () => { + it('Should return true for the custom visa feed with no number', () => { const customFeed = CONST.COMPANY_CARD.FEED_BANK_NAME.VISA; const isCustomFeed = CardUtils.isCustomFeed(customFeed); expect(isCustomFeed).toBe(true); }); - it('Should return false for the direct feed', () => { - const directFeed = CONST.COMPANY_CARD.FEED_BANK_NAME.CHASE; + it('Should return true for the custom visa feed with a number', () => { + const customFeed = `${CONST.COMPANY_CARD.FEED_BANK_NAME.VISA}1` as CompanyCardFeedWithNumber; + const isCustomFeed = CardUtils.isCustomFeed(customFeed); + expect(isCustomFeed).toBe(true); + }); + + it('Should return true for the custom mastercard feed with no number', () => { + const customFeed = CONST.COMPANY_CARD.FEED_BANK_NAME.MASTER_CARD; + const isCustomFeed = CardUtils.isCustomFeed(customFeed); + expect(isCustomFeed).toBe(true); + }); + + it('Should return true for the custom mastercard feed with a number', () => { + const customFeed = `${CONST.COMPANY_CARD.FEED_BANK_NAME.MASTER_CARD}3` as CompanyCardFeedWithNumber; + const isCustomFeed = CardUtils.isCustomFeed(customFeed); + expect(isCustomFeed).toBe(true); + }); + + it('Should return true for the custom amex feed with no number', () => { + const customFeed = CONST.COMPANY_CARD.FEED_BANK_NAME.AMEX; + const isCustomFeed = CardUtils.isCustomFeed(customFeed); + expect(isCustomFeed).toBe(true); + }); + + it('Should return true for the custom amex feed with a number', () => { + const customFeed = `${CONST.COMPANY_CARD.FEED_BANK_NAME.AMEX}2` as CompanyCardFeedWithNumber; + const isCustomFeed = CardUtils.isCustomFeed(customFeed); + expect(isCustomFeed).toBe(true); + }); + + test.each(directFeedBanks)('Should return false for the direct feed %s', (directFeed) => { const isCustomFeed = CardUtils.isCustomFeed(directFeed); expect(isCustomFeed).toBe(false); });