From 9ef5c1bc1a695491218160a5785202b79f7f23b3 Mon Sep 17 00:00:00 2001 From: Amy Evans Date: Tue, 17 Mar 2026 16:08:06 -0400 Subject: [PATCH 1/5] Use account refresh code for mock break testing --- src/libs/actions/Card.ts | 4 ++-- src/libs/actions/CompanyCards.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libs/actions/Card.ts b/src/libs/actions/Card.ts index 556905a54f312..aebd4e8fa0eb1 100644 --- a/src/libs/actions/Card.ts +++ b/src/libs/actions/Card.ts @@ -378,8 +378,8 @@ function syncCard(cardID: number, lastScrapeResult?: number, breakConnection?: b }; if (breakConnection) { - // Simulate "Account not found" error code for testing - parameters.breakConnection = 434; + // Simulate "Account refresh required" error code for testing + parameters.breakConnection = 438; } API.write(WRITE_COMMANDS.SYNC_CARD, parameters, {optimisticData, finallyData, failureData}); diff --git a/src/libs/actions/CompanyCards.ts b/src/libs/actions/CompanyCards.ts index 4f788066708f8..4439218ab5eff 100644 --- a/src/libs/actions/CompanyCards.ts +++ b/src/libs/actions/CompanyCards.ts @@ -585,8 +585,8 @@ function updateWorkspaceCompanyCard(domainOrWorkspaceAccountID: number, cardID: }; if (breakConnection) { - // Simulate "Account not found" error code for testing - parameters.breakConnection = 434; + // Simulate "Account refresh required" error code for testing + parameters.breakConnection = 438; } API.write(WRITE_COMMANDS.SYNC_CARD, parameters, {optimisticData, finallyData, failureData}); From 9687809bfbac86512da489af3dbd5e75fe4c6315 Mon Sep 17 00:00:00 2001 From: Amy Evans Date: Tue, 17 Mar 2026 16:09:14 -0400 Subject: [PATCH 2/5] Use environment check for break connection visibility --- src/pages/settings/Wallet/PersonalCardDetailsPage.tsx | 2 +- .../workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/settings/Wallet/PersonalCardDetailsPage.tsx b/src/pages/settings/Wallet/PersonalCardDetailsPage.tsx index c9528ebc1d089..2a14f761c7760 100644 --- a/src/pages/settings/Wallet/PersonalCardDetailsPage.tsx +++ b/src/pages/settings/Wallet/PersonalCardDetailsPage.tsx @@ -88,7 +88,7 @@ function PersonalCardDetailsPage({route}: PersonalCardDetailsPageProps) { // Show "Break connection" option only for Mock Bank cards when the backend API is non-production const isMockBank = cardBank.includes(CONST.COMPANY_CARDS.BANK_CONNECTIONS.MOCK_BANK); - const isNonProductionBackend = CONFIG.EXPENSIFY.EXPENSIFY_URL.includes('.dev') || CONFIG.EXPENSIFY.EXPENSIFY_URL.includes('staging') || !!shouldUseStagingServer; + const isNonProductionBackend = CONFIG.ENVIRONMENT !== CONST.ENVIRONMENT.PRODUCTION || !!shouldUseStagingServer; const shouldShowBreakConnection = isMockBank && isNonProductionBackend; const lastScrape = card?.lastScrape diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx index b61547bbf84bd..b078d7c52d34f 100644 --- a/src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx +++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx @@ -111,7 +111,7 @@ function WorkspaceCompanyCardDetailsPage({route}: WorkspaceCompanyCardDetailsPag // Show "Break connection" option only for Mock Bank cards when the backend API is non-production const isMockBank = bank?.includes(CONST.COMPANY_CARDS.BANK_CONNECTIONS.MOCK_BANK); - const isNonProductionBackend = CONFIG.EXPENSIFY.EXPENSIFY_URL.includes('.dev') || CONFIG.EXPENSIFY.EXPENSIFY_URL.includes('staging') || !!shouldUseStagingServer; + const isNonProductionBackend = CONFIG.ENVIRONMENT !== CONST.ENVIRONMENT.PRODUCTION || !!shouldUseStagingServer; const shouldShowBreakConnection = isMockBank && isNonProductionBackend; const lastScrape = useMemo(() => { From 7ba0ac1015fd2e96852029a672b018b2ecb878ae Mon Sep 17 00:00:00 2001 From: Amy Evans Date: Tue, 17 Mar 2026 16:16:03 -0400 Subject: [PATCH 3/5] Default staging flag from active API --- src/pages/settings/Wallet/PersonalCardDetailsPage.tsx | 3 ++- .../workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pages/settings/Wallet/PersonalCardDetailsPage.tsx b/src/pages/settings/Wallet/PersonalCardDetailsPage.tsx index 2a14f761c7760..78a539a795c76 100644 --- a/src/pages/settings/Wallet/PersonalCardDetailsPage.tsx +++ b/src/pages/settings/Wallet/PersonalCardDetailsPage.tsx @@ -16,6 +16,7 @@ import useNetwork from '@hooks/useNetwork'; import useOnyx from '@hooks/useOnyx'; import useThemeIllustrations from '@hooks/useThemeIllustrations'; import useThemeStyles from '@hooks/useThemeStyles'; +import {isUsingStagingApi} from '@libs/ApiUtils'; import {getCardFeedIcon, isCardConnectionBroken, isPersonalCard} from '@libs/CardUtils'; import {getLatestErrorField} from '@libs/ErrorUtils'; import type {PlatformStackScreenProps} from '@libs/Navigation/PlatformStackNavigation/types'; @@ -40,7 +41,7 @@ type PersonalCardDetailsPageProps = PlatformStackScreenProps Date: Tue, 17 Mar 2026 16:21:23 -0400 Subject: [PATCH 4/5] Remove redundant boolean cast for staging flag --- src/pages/settings/Wallet/PersonalCardDetailsPage.tsx | 2 +- .../workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/settings/Wallet/PersonalCardDetailsPage.tsx b/src/pages/settings/Wallet/PersonalCardDetailsPage.tsx index 78a539a795c76..707eb77c09d4a 100644 --- a/src/pages/settings/Wallet/PersonalCardDetailsPage.tsx +++ b/src/pages/settings/Wallet/PersonalCardDetailsPage.tsx @@ -89,7 +89,7 @@ function PersonalCardDetailsPage({route}: PersonalCardDetailsPageProps) { // Show "Break connection" option only for Mock Bank cards when the backend API is non-production const isMockBank = cardBank.includes(CONST.COMPANY_CARDS.BANK_CONNECTIONS.MOCK_BANK); - const isNonProductionBackend = CONFIG.ENVIRONMENT !== CONST.ENVIRONMENT.PRODUCTION || !!shouldUseStagingServer; + const isNonProductionBackend = CONFIG.ENVIRONMENT !== CONST.ENVIRONMENT.PRODUCTION || shouldUseStagingServer; const shouldShowBreakConnection = isMockBank && isNonProductionBackend; const lastScrape = card?.lastScrape diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx index 11ae2eb9e7076..e49ff5fcbe689 100644 --- a/src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx +++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx @@ -112,7 +112,7 @@ function WorkspaceCompanyCardDetailsPage({route}: WorkspaceCompanyCardDetailsPag // Show "Break connection" option only for Mock Bank cards when the backend API is non-production const isMockBank = bank?.includes(CONST.COMPANY_CARDS.BANK_CONNECTIONS.MOCK_BANK); - const isNonProductionBackend = CONFIG.ENVIRONMENT !== CONST.ENVIRONMENT.PRODUCTION || !!shouldUseStagingServer; + const isNonProductionBackend = CONFIG.ENVIRONMENT !== CONST.ENVIRONMENT.PRODUCTION || shouldUseStagingServer; const shouldShowBreakConnection = isMockBank && isNonProductionBackend; const lastScrape = useMemo(() => { From 885d806c8d1887be0c15dee670bf905e653e86c1 Mon Sep 17 00:00:00 2001 From: Amy Evans Date: Tue, 17 Mar 2026 17:10:26 -0400 Subject: [PATCH 5/5] Gate mock break action on active non-prod API --- src/pages/settings/Wallet/PersonalCardDetailsPage.tsx | 6 +++--- .../companyCards/WorkspaceCompanyCardDetailsPage.tsx | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/pages/settings/Wallet/PersonalCardDetailsPage.tsx b/src/pages/settings/Wallet/PersonalCardDetailsPage.tsx index 707eb77c09d4a..8931ee4a82db4 100644 --- a/src/pages/settings/Wallet/PersonalCardDetailsPage.tsx +++ b/src/pages/settings/Wallet/PersonalCardDetailsPage.tsx @@ -87,10 +87,10 @@ function PersonalCardDetailsPage({route}: PersonalCardDetailsPageProps) { syncCard(card.cardID, card.lastScrapeResult, true); }; - // Show "Break connection" option only for Mock Bank cards when the backend API is non-production + // Show "Break connection" only when Mock Bank requests target non-production APIs. const isMockBank = cardBank.includes(CONST.COMPANY_CARDS.BANK_CONNECTIONS.MOCK_BANK); - const isNonProductionBackend = CONFIG.ENVIRONMENT !== CONST.ENVIRONMENT.PRODUCTION || shouldUseStagingServer; - const shouldShowBreakConnection = isMockBank && isNonProductionBackend; + const isUsingNonProductionAPI = shouldUseStagingServer || CONFIG.IS_USING_LOCAL_WEB; + const shouldShowBreakConnection = isMockBank && isUsingNonProductionAPI; const lastScrape = card?.lastScrape ? format(getLocalDateFromDatetime(card.lastScrape), CONST.DATE.FNS_DATE_TIME_FORMAT_STRING) diff --git a/src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx b/src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx index e49ff5fcbe689..6cfaa1498d1aa 100644 --- a/src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx +++ b/src/pages/workspace/companyCards/WorkspaceCompanyCardDetailsPage.tsx @@ -110,10 +110,10 @@ function WorkspaceCompanyCardDetailsPage({route}: WorkspaceCompanyCardDetailsPag updateWorkspaceCompanyCard(domainOrWorkspaceAccountID, cardID, bank, card?.lastScrapeResult, true); }; - // Show "Break connection" option only for Mock Bank cards when the backend API is non-production + // Show "Break connection" only when Mock Bank requests target non-production APIs. const isMockBank = bank?.includes(CONST.COMPANY_CARDS.BANK_CONNECTIONS.MOCK_BANK); - const isNonProductionBackend = CONFIG.ENVIRONMENT !== CONST.ENVIRONMENT.PRODUCTION || shouldUseStagingServer; - const shouldShowBreakConnection = isMockBank && isNonProductionBackend; + const isUsingNonProductionAPI = shouldUseStagingServer || CONFIG.IS_USING_LOCAL_WEB; + const shouldShowBreakConnection = isMockBank && isUsingNonProductionAPI; const lastScrape = useMemo(() => { if (!card?.lastScrape) {