1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-22 09:57:02 +01:00

[MMI] swap button redirect when account is Custody (#20234)

* wip

* adds test

* add value to constants

* clean up
This commit is contained in:
António Regadas 2023-08-01 11:17:36 +01:00 committed by GitHub
parent c92f3b32b2
commit 2b5c112a02
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 53 additions and 1 deletions

View File

@ -133,6 +133,8 @@ export const WETH_ARBITRUM_CONTRACT_ADDRESS =
const SWAPS_TESTNET_CHAIN_ID = '0x539'; const SWAPS_TESTNET_CHAIN_ID = '0x539';
export const MMI_SWAPS_URL = 'https://metamask-institutional.io/swap';
export const SWAPS_API_V2_BASE_URL = 'https://swap.metaswap.codefi.network'; export const SWAPS_API_V2_BASE_URL = 'https://swap.metaswap.codefi.network';
export const SWAPS_DEV_API_V2_BASE_URL = 'https://swap.dev-api.cx.metamask.io'; export const SWAPS_DEV_API_V2_BASE_URL = 'https://swap.dev-api.cx.metamask.io';
export const GAS_API_BASE_URL = 'https://gas-api.metaswap.codefi.network'; export const GAS_API_BASE_URL = 'https://gas-api.metaswap.codefi.network';

View File

@ -15,7 +15,7 @@ import {
getMmiPortfolioUrl, getMmiPortfolioUrl,
} from '../../../selectors/institutional/selectors'; } from '../../../selectors/institutional/selectors';
///: END:ONLY_INCLUDE_IN ///: END:ONLY_INCLUDE_IN
import { MMI_SWAPS_URL } from '../../../../shared/constants/swaps';
import { I18nContext } from '../../../contexts/i18n'; import { I18nContext } from '../../../contexts/i18n';
import { import {
SEND_ROUTE, SEND_ROUTE,
@ -25,6 +25,7 @@ import Tooltip from '../../ui/tooltip';
import UserPreferencedCurrencyDisplay from '../user-preferenced-currency-display'; import UserPreferencedCurrencyDisplay from '../user-preferenced-currency-display';
import { PRIMARY, SECONDARY } from '../../../helpers/constants/common'; import { PRIMARY, SECONDARY } from '../../../helpers/constants/common';
import { import {
getAccountType,
isBalanceCached, isBalanceCached,
getShouldShowFiat, getShouldShowFiat,
getCurrentKeyring, getCurrentKeyring,
@ -77,6 +78,7 @@ const EthOverview = ({ className, showAddress }) => {
const isSwapsChain = useSelector(getIsSwapsChain); const isSwapsChain = useSelector(getIsSwapsChain);
const defaultSwapsToken = useSelector(getSwapsDefaultToken); const defaultSwapsToken = useSelector(getSwapsDefaultToken);
const chainId = useSelector(getCurrentChainId); const chainId = useSelector(getCurrentChainId);
const accountType = useSelector(getAccountType);
///: BEGIN:ONLY_INCLUDE_IN(build-mmi) ///: BEGIN:ONLY_INCLUDE_IN(build-mmi)
const mmiPortfolioEnabled = useSelector(getMmiPortfolioEnabled); const mmiPortfolioEnabled = useSelector(getMmiPortfolioEnabled);
@ -254,6 +256,14 @@ const EthOverview = ({ className, showAddress }) => {
/> />
} }
onClick={() => { onClick={() => {
if (accountType === 'custody') {
global.platform.openTab({
url: MMI_SWAPS_URL,
});
return;
}
if (isSwapsChain) { if (isSwapsChain) {
trackEvent({ trackEvent({
event: MetaMetricsEventName.NavSwapButtonClicked, event: MetaMetricsEventName.NavSwapButtonClicked,

View File

@ -72,6 +72,7 @@ describe('EthOverview', () => {
const ETH_OVERVIEW_BUY = 'eth-overview-buy'; const ETH_OVERVIEW_BUY = 'eth-overview-buy';
const ETH_OVERVIEW_BRIDGE = 'eth-overview-bridge'; const ETH_OVERVIEW_BRIDGE = 'eth-overview-bridge';
const ETH_OVERVIEW_PORTFOLIO = 'eth-overview-portfolio'; const ETH_OVERVIEW_PORTFOLIO = 'eth-overview-portfolio';
const ETH_OVERVIEW_SWAP = 'token-overview-button-swap';
const ETH_OVERVIEW_PRIMARY_CURRENCY = 'eth-overview__primary-currency'; const ETH_OVERVIEW_PRIMARY_CURRENCY = 'eth-overview__primary-currency';
const ETH_OVERVIEW_SECONDARY_CURRENCY = 'eth-overview__secondary-currency'; const ETH_OVERVIEW_SECONDARY_CURRENCY = 'eth-overview__secondary-currency';
@ -191,6 +192,45 @@ describe('EthOverview', () => {
); );
}); });
it('should open the MMI PD Swaps URI when clicking on Swap button with a Custody account', async () => {
const mockedStoreWithCustodyKeyring = {
metamask: {
...mockStore.metamask,
keyrings: [
{
type: 'Custody',
accounts: ['0x1'],
},
],
},
};
const mockedStore = configureMockStore([thunk])(
mockedStoreWithCustodyKeyring,
);
const { queryByTestId } = renderWithProvider(
<EthOverview />,
mockedStore,
);
const swapButton = queryByTestId(ETH_OVERVIEW_SWAP);
expect(swapButton).toBeInTheDocument();
expect(swapButton).not.toBeDisabled();
fireEvent.click(swapButton);
expect(openTabSpy).toHaveBeenCalledTimes(1);
await waitFor(() =>
expect(openTabSpy).toHaveBeenCalledWith({
url: expect.stringContaining(
'https://metamask-institutional.io/swap',
),
}),
);
});
it('should have the Bridge button disabled if chain id is not part of supported chains', () => { it('should have the Bridge button disabled if chain id is not part of supported chains', () => {
const mockedFantomStore = { const mockedFantomStore = {
...mockStore, ...mockStore,