1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-22 19:26:13 +02:00
metamask-extension/ui/pages/token-details/token-details-page.test.js
Niranjana Binoy 6e5c2f03bf
Token detection V2 Flag Removal and Re-introducing the use of legacy token list when token detection is OFF (#15138)
* addding the legacy tokenlist, tuning token detection OFF by default, adding new message while importing tokens

updating the controller version and calling detectNewToken on network change

fixing rebase error

Run yarn lavamoat:auto for updating policies

updating lavamoat

Deleted node modules and run again lavamoat auto

fixing rebase issues

updating lavamoat policies

updating lavamoat after rebasing

policies

updating custom token warning and blocking detectedtoken link when tpken detection is off for supported networks

to update the token in fetchTosync

updating the contract map object

Revert build-system lavamoat policy changes

Move token list selection logic from components to getTokenList selector

updating the tokenList

Update lavamoat

Fix error

updating lavamoat

lint fix

fix unit test fail

fix unit test fail

lint fix

fixing rebase locale error

rebase fix

Revert build-system policy changes

temp

addressing review comments

* rebase fix
2022-08-09 22:56:25 -02:30

352 lines
10 KiB
JavaScript

import React from 'react';
import configureMockStore from 'redux-mock-store';
import { fireEvent } from '@testing-library/react';
import { renderWithProvider } from '../../../test/lib/render-helpers';
import Identicon from '../../components/ui/identicon/identicon.component';
import { isEqualCaseInsensitive } from '../../../shared/modules/string-utils';
import TokenDetailsPage from './token-details-page';
const testTokenAddress = '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F';
const state = {
metamask: {
selectedAddress: '0xAddress',
contractExchangeRates: {
'0xAnotherToken': 0.015,
},
useTokenDetection: true,
tokenList: {
'0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f': {
address: '0xc011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f',
aggregators: [
'Aave',
'Bancor',
'CMC',
'Crypto.com',
'CoinGecko',
'1inch',
'Paraswap',
'PMM',
'Synthetix',
'Zapper',
'Zerion',
'0x',
],
decimals: 18,
iconUrl: 'https://assets.coingecko.com/coins/images/3406/large/SNX.png',
name: 'Synthetix Network Token',
occurrences: 12,
symbol: 'SNX',
},
'0x1f9840a85d5af5bf1d1762f925bdaddc4201f984': {
address: '0x1f9840a85d5af5bf1d1762f925bdaddc4201f984',
aggregators: [
'Aave',
'Bancor',
'CMC',
'Crypto.com',
'CoinGecko',
'1inch',
'Paraswap',
'PMM',
'Zapper',
'Zerion',
'0x',
],
decimals: 18,
iconUrl:
'https://images.prismic.io/token-price-prod/d0352dd9-5de8-4633-839d-bc3422c44d9c_UNI%404x.png',
name: 'Uniswap',
occurrences: 11,
symbol: 'UNI',
},
'0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e': {
address: '0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e',
aggregators: [
'Aave',
'Bancor',
'CMC',
'Crypto.com',
'CoinGecko',
'1inch',
'Paraswap',
'PMM',
'Zapper',
'Zerion',
'0x',
],
decimals: 18,
iconUrl:
'https://images.prismic.io/token-price-prod/917bc4fa-59d4-40f5-a3ef-33035698ffe0_YFIxxxhdpi.png',
name: 'yearn.finance',
occurrences: 11,
symbol: 'YFI',
},
'0x408e41876cccdc0f92210600ef50372656052a38': {
address: '0x408e41876cccdc0f92210600ef50372656052a38',
aggregators: [
'Aave',
'Bancor',
'CMC',
'Crypto.com',
'CoinGecko',
'1inch',
'Paraswap',
'PMM',
'Zapper',
'Zerion',
'0x',
],
decimals: 18,
iconUrl: 'https://crypto.com/price/coin-data/icon/REN/color_icon.png',
name: 'Republic Token',
occurrences: 11,
symbol: 'REN',
},
'0x2260fac5e5542a773aa44fbcfedf7c193bc2c599': {
address: '0x2260fac5e5542a773aa44fbcfedf7c193bc2c599',
aggregators: [
'Aave',
'Bancor',
'CMC',
'Crypto.com',
'CoinGecko',
'1inch',
'Paraswap',
'PMM',
'Zapper',
'Zerion',
'0x',
],
decimals: 8,
iconUrl:
'https://images.prismic.io/token-price-prod/c27778b1-f402-45f0-9225-f24f24b0518a_WBTC-xxxhdpi.png',
name: 'Wrapped BTC',
occurrences: 11,
symbol: 'WBTC',
},
'0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2': {
address: '0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2',
aggregators: [
'Aave',
'Bancor',
'CMC',
'Crypto.com',
'CoinGecko',
'1inch',
'Paraswap',
'PMM',
'Zapper',
'Zerion',
'0x',
],
decimals: 18,
iconUrl: 'https://crypto.com/price/coin-data/icon/MKR/color_icon.png',
name: 'MakerDAO',
occurrences: 11,
symbol: 'MKR',
},
'0x514910771af9ca656af840dff83e8264ecf986ca': {
address: '0x514910771af9ca656af840dff83e8264ecf986ca',
aggregators: [
'Aave',
'Bancor',
'CMC',
'Crypto.com',
'CoinGecko',
'1inch',
'Paraswap',
'PMM',
'Zapper',
'Zerion',
'0x',
],
decimals: 18,
iconUrl: 'https://crypto.com/price/coin-data/icon/LINK/color_icon.png',
name: 'ChainLink Token',
occurrences: 11,
symbol: 'LINK',
},
'0x6b175474e89094c44da98b954eedeac495271d0f': {
address: '0x6b175474e89094c44da98b954eedeac495271d0f',
aggregators: [
'Aave',
'Bancor',
'CMC',
'Crypto.com',
'CoinGecko',
'1inch',
'Paraswap',
'PMM',
'Zapper',
'Zerion',
'0x',
],
decimals: 18,
iconUrl: 'https://crypto.com/price/coin-data/icon/DAI/color_icon.png',
name: 'Dai Stablecoin',
occurrences: 11,
symbol: 'DAI',
},
'0x04fa0d235c4abf4bcf4787af4cf447de572ef828': {
address: '0x04fa0d235c4abf4bcf4787af4cf447de572ef828',
aggregators: [
'Bancor',
'CMC',
'Crypto.com',
'CoinGecko',
'1inch',
'Paraswap',
'PMM',
'Zapper',
'Zerion',
'0x',
],
decimals: 18,
iconUrl:
'https://images.prismic.io/token-price-prod/e2850554-ccf6-4514-9c3c-a17e19dea82f_UMAxxxhdpi.png',
name: 'UMA',
occurrences: 10,
symbol: 'UMA',
},
},
provider: {
type: 'mainnet',
nickname: '',
},
preferences: {
showFiatInTestnets: true,
},
tokens: [
{
address: testTokenAddress,
symbol: 'SNX',
decimals: 18,
image: 'testImage',
isERC721: false,
},
{
address: '0xaD6D458402F60fD3Bd25163575031ACDce07538U',
symbol: 'DAU',
decimals: 18,
image: null,
isERC721: false,
},
],
},
};
jest.mock('react-router-dom', () => {
const original = jest.requireActual('react-router-dom');
return {
...original,
useHistory: () => ({
push: jest.fn(),
}),
useParams: () => ({
address: testTokenAddress,
}),
};
});
describe('TokenDetailsPage', () => {
it('should render title "Token details" in token details page', () => {
const store = configureMockStore()(state);
const { getByText } = renderWithProvider(<TokenDetailsPage />, store);
expect(getByText('Token details')).toBeInTheDocument();
});
it('should close token details page when close button is clicked', () => {
const store = configureMockStore()(state);
const { container } = renderWithProvider(<TokenDetailsPage />, store);
const onCloseBtn = container.querySelector('.token-details__closeButton');
fireEvent.click(onCloseBtn);
expect(onCloseBtn).toBeDefined();
});
it('should render an icon image', () => {
const token = state.metamask.tokens.find(({ address }) =>
isEqualCaseInsensitive(address, testTokenAddress),
);
const iconImage = (
<Identicon diameter={32} address={testTokenAddress} image={token.image} />
);
expect(iconImage).toBeDefined();
});
it('should render token contract address title in token details page', () => {
const store = configureMockStore()(state);
const { getByText } = renderWithProvider(<TokenDetailsPage />, store);
expect(getByText('Token contract address')).toBeInTheDocument();
});
it('should render token contract address in token details page', () => {
const store = configureMockStore()(state);
const { getByText } = renderWithProvider(<TokenDetailsPage />, store);
expect(getByText(testTokenAddress)).toBeInTheDocument();
});
it('should call copy button when click is simulated', () => {
const store = configureMockStore()(state);
const { container } = renderWithProvider(<TokenDetailsPage />, store);
const handleCopyBtn = container.querySelector('.token-details__copyIcon');
fireEvent.click(handleCopyBtn);
expect(handleCopyBtn).toBeDefined();
});
it('should render token decimal title in token details page', () => {
const store = configureMockStore()(state);
const { getByText } = renderWithProvider(<TokenDetailsPage />, store);
expect(getByText('Token decimal:')).toBeInTheDocument();
});
it('should render number of token decimals in token details page', () => {
const store = configureMockStore()(state);
const { getByText } = renderWithProvider(<TokenDetailsPage />, store);
expect(getByText('18')).toBeInTheDocument();
});
it('should render current network title in token details page', () => {
const store = configureMockStore()(state);
const { getByText } = renderWithProvider(<TokenDetailsPage />, store);
expect(getByText('Network:')).toBeInTheDocument();
});
it('should render current network in token details page', () => {
const store = configureMockStore()(state);
const { getByText } = renderWithProvider(<TokenDetailsPage />, store);
expect(getByText('Ethereum Mainnet')).toBeInTheDocument();
});
it('should render token list title in token details page', () => {
const store = configureMockStore()(state);
const { getByText } = renderWithProvider(<TokenDetailsPage />, store);
expect(getByText('Token lists:')).toBeInTheDocument();
});
it('should render token list for the token in token details page', () => {
const store = configureMockStore()(state);
const { getByText } = renderWithProvider(<TokenDetailsPage />, store);
expect(
getByText(
'Aave, Bancor, CMC, Crypto.com, CoinGecko, 1inch, Paraswap, PMM, Synthetix, Zapper, Zerion, 0x.',
),
).toBeInTheDocument();
});
it('should call hide token button when button is clicked in token details page', () => {
const store = configureMockStore()(state);
const { container } = renderWithProvider(<TokenDetailsPage />, store);
const hideTokenBtn = container.querySelector(
'.token-details__hide-token-button',
);
fireEvent.click(hideTokenBtn);
expect(hideTokenBtn).toBeDefined();
});
it('should render label of hide token button in token details page', () => {
const store = configureMockStore()(state);
const { getByText } = renderWithProvider(<TokenDetailsPage />, store);
expect(getByText('Hide token')).toBeInTheDocument();
});
});