Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2691,8 +2691,6 @@ describe('MoneyHomeView', () => {
} as unknown as ReturnType<typeof useMoneyAccountCardLinkage>;

// 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: {
Expand All @@ -2716,14 +2714,37 @@ 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({
...baseCardHomeData,
primaryToken: {
balanceFiat: '€90.00',
rawFiatNumber: 90,
isMoneyAccountEntry: false,
} as unknown as ReturnType<
typeof useMoneyAccountCardLinkage
>['primaryMoneyAccount'],
});

const { getByTestId } = renderWithProvider(<MoneyHomeView />, {
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
Expand Down Expand Up @@ -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<
Expand All @@ -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', () => {
Expand Down
19 changes: 12 additions & 7 deletions app/components/UI/Money/Views/MoneyHomeView/MoneyHomeView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Loading