From d42bae55a9a0fbcb7e838688aced9ebd0013683e Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Mon, 16 Mar 2026 18:02:59 +0700 Subject: [PATCH 1/2] fix: hide the expired card on Home page --- src/libs/CardUtils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libs/CardUtils.ts b/src/libs/CardUtils.ts index 3f723e1127bac..a67888365958a 100644 --- a/src/libs/CardUtils.ts +++ b/src/libs/CardUtils.ts @@ -1390,7 +1390,7 @@ function getDisplayableExpensifyCards(cardList: CardList | undefined): Card[] { } const activeCards = filterAllInactiveCards(cardList); - const activeExpensifyCards = Object.values(activeCards).filter((card) => isExpensifyCard(card) && card.cardName !== CONST.COMPANY_CARDS.CARD_NAME.CASH); + const activeExpensifyCards = Object.values(activeCards).filter((card) => isExpensifyCard(card) && !isExpiredCard(card) && card.cardName !== CONST.COMPANY_CARDS.CARD_NAME.CASH); const sortedCards = lodashSortBy(activeExpensifyCards, getAssignedCardSortKey); const seenDomains = new Set(); From 2beda1f836abbfcc3f65f69ac5aaf3845fdb40b4 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Mon, 16 Mar 2026 18:48:29 +0700 Subject: [PATCH 2/2] =?UTF-8?q?add=20unit=20t=C3=A9st?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unit/CardUtilsTest.ts | 41 +++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/tests/unit/CardUtilsTest.ts b/tests/unit/CardUtilsTest.ts index 2265dab428794..622ab8c6cdb18 100644 --- a/tests/unit/CardUtilsTest.ts +++ b/tests/unit/CardUtilsTest.ts @@ -2571,6 +2571,47 @@ describe('CardUtils', () => { expect(result).toHaveLength(1); expect(result.at(0)?.cardID).toBe(18468850); // Physical card comes first even if virtual was added first }); + + it('should filter out expired Expensify cards based on validThru', () => { + jest.spyOn(DateUtils, 'getDBTime').mockReturnValue('2026-02-25 00:00:00'); + + const cardList = { + 1: { + accountID: 1, + bank: CONST.EXPENSIFY_CARD.BANK, + cardID: 1, + cardName: 'Expired Expensify Card', + domainName: 'test.com', + fraud: 'none', + lastFourPAN: '1234', + lastScrape: '', + lastUpdated: '', + state: CONST.EXPENSIFY_CARD.STATE.OPEN, + nameValuePairs: { + validThru: '2026-02-24 23:59:59', + }, + }, + 2: { + accountID: 1, + bank: CONST.EXPENSIFY_CARD.BANK, + cardID: 2, + cardName: 'Valid Expensify Card', + domainName: 'test.com', + fraud: 'none', + lastFourPAN: '5678', + lastScrape: '', + lastUpdated: '', + state: CONST.EXPENSIFY_CARD.STATE.OPEN, + nameValuePairs: { + validThru: '2026-02-25 00:00:00', + }, + }, + } as unknown as CardList; + + const result = getDisplayableExpensifyCards(cardList); + expect(result).toHaveLength(1); + expect(result.at(0)?.cardID).toBe(2); + }); }); describe('PersonalCard (isPersonalCard)', () => {