/* 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(, 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'); }); });