mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-29 15:50:28 +01:00
104 lines
3.2 KiB
JavaScript
104 lines
3.2 KiB
JavaScript
|
/* eslint-disable jest/require-top-level-describe */
|
||
|
import React from 'react';
|
||
|
import reactRouterDom from 'react-router-dom';
|
||
|
import { fireEvent, renderWithProvider } from '../../../../test/jest';
|
||
|
import configureStore from '../../../store/store';
|
||
|
import mockState from '../../../../test/data/mock-state.json';
|
||
|
import {
|
||
|
NEW_ACCOUNT_ROUTE,
|
||
|
IMPORT_ACCOUNT_ROUTE,
|
||
|
CONNECT_HARDWARE_ROUTE,
|
||
|
} from '../../../helpers/constants/routes';
|
||
|
import { AccountListMenu } from '.';
|
||
|
|
||
|
const render = (props = { onClose: () => jest.fn() }) => {
|
||
|
const store = configureStore({
|
||
|
activeTab: {
|
||
|
id: 113,
|
||
|
title: 'E2E Test Dapp',
|
||
|
origin: 'https://metamask.github.io',
|
||
|
protocol: 'https:',
|
||
|
url: 'https://metamask.github.io/test-dapp/',
|
||
|
},
|
||
|
metamask: {
|
||
|
...mockState.metamask,
|
||
|
},
|
||
|
});
|
||
|
return renderWithProvider(<AccountListMenu {...props} />, store);
|
||
|
};
|
||
|
|
||
|
describe('AccountListMenu', () => {
|
||
|
const historyPushMock = jest.fn();
|
||
|
|
||
|
jest
|
||
|
.spyOn(reactRouterDom, 'useHistory')
|
||
|
.mockImplementation()
|
||
|
.mockReturnValue({ push: historyPushMock });
|
||
|
|
||
|
afterEach(() => {
|
||
|
jest.clearAllMocks();
|
||
|
});
|
||
|
|
||
|
it('displays important controls', () => {
|
||
|
const { getByPlaceholderText, getByText } = render();
|
||
|
|
||
|
expect(getByPlaceholderText('Search accounts')).toBeInTheDocument();
|
||
|
expect(getByText('Add account')).toBeInTheDocument();
|
||
|
expect(getByText('Import account')).toBeInTheDocument();
|
||
|
expect(getByText('Hardware wallet')).toBeInTheDocument();
|
||
|
});
|
||
|
|
||
|
it('navigates to new account screen when clicked', () => {
|
||
|
const { getByText } = render();
|
||
|
fireEvent.click(getByText('Add account'));
|
||
|
expect(historyPushMock).toHaveBeenCalledWith(NEW_ACCOUNT_ROUTE);
|
||
|
});
|
||
|
|
||
|
it('navigates to import account screen when clicked', () => {
|
||
|
const { getByText } = render();
|
||
|
fireEvent.click(getByText('Import account'));
|
||
|
expect(historyPushMock).toHaveBeenCalledWith(IMPORT_ACCOUNT_ROUTE);
|
||
|
});
|
||
|
|
||
|
it('navigates to hardware wallet connection screen when clicked', () => {
|
||
|
const { getByText } = render();
|
||
|
fireEvent.click(getByText('Hardware wallet'));
|
||
|
expect(historyPushMock).toHaveBeenCalledWith(CONNECT_HARDWARE_ROUTE);
|
||
|
});
|
||
|
|
||
|
it('displays accounts for list and filters by search', () => {
|
||
|
render();
|
||
|
const listItems = document.querySelectorAll(
|
||
|
'.multichain-account-list-item',
|
||
|
);
|
||
|
expect(listItems).toHaveLength(4);
|
||
|
|
||
|
const searchBox = document.querySelector('input[type=search]');
|
||
|
fireEvent.change(searchBox, {
|
||
|
target: { value: 'Le' },
|
||
|
});
|
||
|
|
||
|
const filteredListItems = document.querySelectorAll(
|
||
|
'.multichain-account-list-item',
|
||
|
);
|
||
|
expect(filteredListItems).toHaveLength(1);
|
||
|
});
|
||
|
|
||
|
it('displays the "no accounts" message when search finds nothing', () => {
|
||
|
const { getByTestId } = render();
|
||
|
|
||
|
const searchBox = document.querySelector('input[type=search]');
|
||
|
fireEvent.change(searchBox, {
|
||
|
target: { value: 'adslfkjlx' },
|
||
|
});
|
||
|
|
||
|
const filteredListItems = document.querySelectorAll(
|
||
|
'.multichain-account-list-item',
|
||
|
);
|
||
|
expect(filteredListItems).toHaveLength(0);
|
||
|
expect(
|
||
|
getByTestId('multichain-account-menu-no-results'),
|
||
|
).toBeInTheDocument();
|
||
|
});
|
||
|
});
|