1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-22 18:00:18 +01:00
metamask-extension/ui/components/multichain/network-list-menu/network-list-menu.test.js

103 lines
3.2 KiB
JavaScript

/* eslint-disable jest/require-top-level-describe */
import React from 'react';
import { fireEvent, renderWithProvider } from '../../../../test/jest';
import configureStore from '../../../store/store';
import mockState from '../../../../test/data/mock-state.json';
import {
CHAIN_IDS,
MAINNET_DISPLAY_NAME,
SEPOLIA_DISPLAY_NAME,
} from '../../../../shared/constants/network';
import { NetworkListMenu } from '.';
const mockSetShowTestNetworks = jest.fn();
const mockSetProviderType = jest.fn();
const mockToggleNetworkMenu = jest.fn();
jest.mock('../../../store/actions.ts', () => ({
setShowTestNetworks: () => mockSetShowTestNetworks,
setProviderType: () => mockSetProviderType,
toggleNetworkMenu: () => mockToggleNetworkMenu,
}));
const render = (
showTestNetworks = false,
currentChainId = '0x5',
providerConfigId = 'chain5',
) => {
const state = {
metamask: {
...mockState.metamask,
providerConfig: {
...mockState.metamask.providerConfig,
chainId: currentChainId,
id: providerConfigId,
},
preferences: {
showTestNetworks,
},
},
};
const store = configureStore(state);
return renderWithProvider(<NetworkListMenu onClose={jest.fn()} />, store);
};
describe('NetworkListMenu', () => {
it('displays important controls', () => {
const { getByText } = render();
expect(getByText('Add network')).toBeInTheDocument();
expect(getByText('Show test networks')).toBeInTheDocument();
});
it('renders mainnet item', () => {
const { getByText } = render();
expect(getByText(MAINNET_DISPLAY_NAME)).toBeInTheDocument();
});
it('renders test networks when it should', () => {
const { getByText } = render(true);
expect(getByText(SEPOLIA_DISPLAY_NAME)).toBeInTheDocument();
});
it('toggles showTestNetworks when toggle is clicked', () => {
const { queryAllByRole } = render();
const [testNetworkToggle] = queryAllByRole('checkbox');
fireEvent.click(testNetworkToggle);
expect(mockSetShowTestNetworks).toHaveBeenCalled();
});
it('disables toggle when on test network', () => {
render(false, CHAIN_IDS.GOERLI);
expect(document.querySelector('.toggle-button--disabled')).toBeDefined();
});
it('switches networks when an item is clicked', () => {
const { getByText } = render();
fireEvent.click(getByText(MAINNET_DISPLAY_NAME));
expect(mockToggleNetworkMenu).toHaveBeenCalled();
expect(mockSetProviderType).toHaveBeenCalled();
});
it('shows the correct selected network when networks share the same chain ID', () => {
// Mainnet and Custom Mainnet RPC both use chain ID 0x1
render(false, '0x1', 'testNetworkConfigurationId');
// Contains Mainnet and the two custom networks
const networkItems = document.querySelectorAll(
'.multichain-network-list-item',
);
expect(networkItems).toHaveLength(3);
const selectedNodes = document.querySelectorAll(
'.multichain-network-list-item--selected',
);
expect(selectedNodes).toHaveLength(1);
const selectedNodeText = selectedNodes[0].querySelector(
'.multichain-network-list-item__network-name',
).textContent;
expect(selectedNodeText).toStrictEqual('Custom Mainnet RPC');
});
});