diff --git a/app/components/UI/Money/Views/MoneyHomeView/MoneyHomeView.test.tsx b/app/components/UI/Money/Views/MoneyHomeView/MoneyHomeView.test.tsx index 0b04894887e3..13178a2727a7 100644 --- a/app/components/UI/Money/Views/MoneyHomeView/MoneyHomeView.test.tsx +++ b/app/components/UI/Money/Views/MoneyHomeView/MoneyHomeView.test.tsx @@ -2691,8 +2691,6 @@ describe('MoneyHomeView', () => { } as unknown as ReturnType; // EUR/ETH = 900, USD/ETH = 1000 -> fiat->USD factor is 1000/900 = 10/9. - // 90 EUR raw fiat converts to exactly 100 USD, proving the conversion (not - // a pass-through of balanceFiat) drives the rendered value. const eurCurrencyRatesState = { engine: { backgroundState: { @@ -2716,7 +2714,7 @@ describe('MoneyHomeView', () => { ); }); - it('converts the primary token raw fiat number from the preferred currency to USD', () => { + it('converts a non-Money primary token raw fiat number to USD', () => { mockSelectIsCardholder.mockReturnValue(true); mockUseMoneyAccountCardLinkage.mockReturnValue(linkedCardLinkage); mockUseCardHomeData.mockReturnValue({ @@ -2724,6 +2722,29 @@ describe('MoneyHomeView', () => { primaryToken: { balanceFiat: '€90.00', rawFiatNumber: 90, + isMoneyAccountEntry: false, + } as unknown as ReturnType< + typeof useMoneyAccountCardLinkage + >['primaryMoneyAccount'], + }); + + const { getByTestId } = renderWithProvider(, { + state: eurCurrencyRatesState, + }); + + expect( + getByTestId(MoneyMetaMaskCardTestIds.MANAGE_BALANCE), + ).toHaveTextContent('$100.00'); + }); + + it('renders the Money Account USD raw fiat number without reconverting it', () => { + mockSelectIsCardholder.mockReturnValue(true); + mockUseMoneyAccountCardLinkage.mockReturnValue(linkedCardLinkage); + mockUseCardHomeData.mockReturnValue({ + ...baseCardHomeData, + primaryToken: { + balanceFiat: '$100.00', + rawFiatNumber: 100, isMoneyAccountEntry: true, } as unknown as ReturnType< typeof useMoneyAccountCardLinkage @@ -2754,15 +2775,13 @@ describe('MoneyHomeView', () => { ).toHaveTextContent('$0.00'); }); - it('falls back to formatted zero when the fiat→USD rate is unavailable', () => { - // rawFiatNumber is present, but currency rates haven't loaded — must not - // render an unconverted (wrong-currency) balance. + it('renders the Money Account USD balance when currency rates are unavailable', () => { mockSelectIsCardholder.mockReturnValue(true); mockUseMoneyAccountCardLinkage.mockReturnValue(linkedCardLinkage); mockUseCardHomeData.mockReturnValue({ ...baseCardHomeData, primaryToken: { - balanceFiat: '€90.00', + balanceFiat: '$90.00', rawFiatNumber: 90, isMoneyAccountEntry: true, } as unknown as ReturnType< @@ -2774,7 +2793,7 @@ describe('MoneyHomeView', () => { expect( getByTestId(MoneyMetaMaskCardTestIds.MANAGE_BALANCE), - ).toHaveTextContent('$0.00'); + ).toHaveTextContent('$90.00'); }); it('masks the Card manage balance when privacy mode is on', () => { diff --git a/app/components/UI/Money/Views/MoneyHomeView/MoneyHomeView.tsx b/app/components/UI/Money/Views/MoneyHomeView/MoneyHomeView.tsx index ac8f165a93da..8cac58c038c5 100644 --- a/app/components/UI/Money/Views/MoneyHomeView/MoneyHomeView.tsx +++ b/app/components/UI/Money/Views/MoneyHomeView/MoneyHomeView.tsx @@ -660,17 +660,22 @@ const MoneyHomeView = () => { const { primaryToken: cardPrimaryToken } = useCardHomeData(); const currencyRates = useSelector(selectCurrencyRates); - // The Card pipeline reports balanceFiat in the user's selected currency, but - // we want to show USD fiat values in this view. + // Money Account entries are already valued in USD. Other Card tokens report + // their fiat value in the user's selected currency. const cardBalanceUsd = useMemo(() => { - const usd = convertSelectedFiatToUsd( - cardPrimaryToken?.rawFiatNumber, - currencyRates, - ); + const rawFiat = cardPrimaryToken?.rawFiatNumber; + const usd = cardPrimaryToken?.isMoneyAccountEntry + ? rawFiat + : convertSelectedFiatToUsd(rawFiat, currencyRates); return usd === undefined ? formattedZero : moneyFormatUsd(new BigNumber(usd)); - }, [cardPrimaryToken?.rawFiatNumber, currencyRates, formattedZero]); + }, [ + cardPrimaryToken?.isMoneyAccountEntry, + cardPrimaryToken?.rawFiatNumber, + currencyRates, + formattedZero, + ]); const cardState = deriveCardState({ isCardholder,