import React from 'react'; import configureMockStore from 'redux-mock-store'; import thunk from 'redux-thunk'; import { screen } from '@testing-library/react'; import { renderWithProvider } from '../../../../test/lib/render-helpers'; import { LOCALHOST_RPC_URL } from '../../../../shared/constants/network'; import NetworkDropdown from './network-dropdown'; describe('Network Dropdown', () => { const createMockStore = configureMockStore([thunk]); describe('NetworkDropdown in appState in false', () => { const mockState = { metamask: { network: '1', provider: { type: 'test', }, showTestnetMessageInDropdown: false, preferences: { showTestNetworks: true, }, }, appState: { networkDropdownOpen: false, }, }; const store = createMockStore(mockState); beforeEach(() => { renderWithProvider(, store); }); it('should not render menu dropdown when network dropdown is in false state', () => { const menuDropdown = screen.queryByTestId('menu-dropdown'); expect(menuDropdown).not.toBeInTheDocument(); }); it('checks for network droppo class', () => { const networkDropdown = screen.queryByTestId('network-droppo'); expect(networkDropdown).toBeInTheDocument(); }); }); describe('NetworkDropdown in appState is true and show test networks is true', () => { const mockState = { metamask: { network: '1', provider: { type: 'test', }, showTestnetMessageInDropdown: false, preferences: { showTestNetworks: true, }, frequentRpcListDetail: [ { chainId: '0x1a', rpcUrl: 'http://localhost:7545' }, { rpcUrl: 'http://localhost:7546' }, { rpcUrl: LOCALHOST_RPC_URL, nickname: 'localhost' }, ], }, appState: { networkDropdownOpen: true, }, }; global.platform = { openExtensionInBrowser: jest.fn(), }; const store = createMockStore(mockState); beforeEach(() => { renderWithProvider(, store); }); it('checks background color for first ColorIndicator', () => { const mainnetColorIndicator = screen.queryByTestId('color-icon-mainnet'); expect(mainnetColorIndicator).toBeInTheDocument(); }); it('checks background color for second ColorIndicator', () => { // find where test networks start in case there are custom RPCs const ropstenColorIndicator = screen.queryByTestId('color-icon-ropsten'); expect(ropstenColorIndicator).toBeInTheDocument(); }); it('checks background color for third ColorIndicator', () => { const kovanColorIndicator = screen.queryByTestId('color-icon-kovan'); expect(kovanColorIndicator).toBeInTheDocument(); }); it('checks background color for fourth ColorIndicator', () => { const rinkebyColorIndicator = screen.queryByTestId('color-icon-rinkeby'); expect(rinkebyColorIndicator).toBeInTheDocument(); }); it('checks background color for fifth ColorIndicator', () => { const goerliColorIndicator = screen.queryByTestId('color-icon-goerli'); expect(goerliColorIndicator).toBeInTheDocument(); }); it('checks background color for sixth ColorIndicator', () => { const localhostColorIndicator = screen.queryByTestId( 'color-icon-localhost', ); expect(localhostColorIndicator).toBeInTheDocument(); }); it('checks that Add Network button is rendered', () => { const addNetworkButton = screen.queryByText('Add network'); expect(addNetworkButton).toBeInTheDocument(); }); it('shows test networks in the dropdown', () => { const networkItems = screen.queryAllByTestId(/network-item/u); expect(networkItems).toHaveLength(8); }); }); describe('NetworkDropdown in appState is true and show test networks is false', () => { const mockState = { metamask: { network: '1', provider: { type: 'test', }, showTestnetMessageInDropdown: false, preferences: { showTestNetworks: false, }, frequentRpcListDetail: [ { chainId: '0x1a', rpcUrl: 'http://localhost:7545' }, { rpcUrl: 'http://localhost:7546' }, ], }, appState: { networkDropdownOpen: true, }, }; global.platform = { openExtensionInBrowser: jest.fn(), }; const store = createMockStore(mockState); beforeEach(() => { renderWithProvider(, store); }); it('checks background color for first ColorIndicator', () => { const mainnetColorIndicator = screen.queryByTestId('color-icon-mainnet'); expect(mainnetColorIndicator).toBeInTheDocument(); }); it('checks that Add Network button is rendered', () => { const addNetworkButton = screen.queryByText('Add network'); expect(addNetworkButton).toBeInTheDocument(); }); it('does not show test networks in the dropdown', () => { const networkItems = screen.queryAllByTestId(/network-item/u); expect(networkItems).toHaveLength(3); }); }); });