1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-04 23:14:56 +01:00
metamask-extension/ui/components/app/account-menu/account-menu.test.js
2023-02-02 16:00:05 -06:00

184 lines
5.5 KiB
JavaScript

import React from 'react';
import sinon from 'sinon';
import configureMockStore from 'redux-mock-store';
import { fireEvent, screen } from '@testing-library/react';
import { renderWithProvider } from '../../../../test/lib/render-helpers';
import { HardwareKeyringTypes } from '../../../../shared/constants/hardware-wallets';
import AccountMenu from '.';
describe('Account Menu', () => {
const mockStore = {
metamask: {
provider: {
type: 'test',
},
preferences: {
useNativeCurrencyAsPrimaryCurrency: true,
},
},
};
const store = configureMockStore()(mockStore);
const props = {
isAccountMenuOpen: true,
addressConnectedSubjectMap: {},
accounts: [
{
address: '0x00',
name: 'Account 1',
balance: '0x0',
},
{
address: '0x1',
name: 'Imported Account 1',
balance: '0x0',
},
],
keyrings: [
{
type: HardwareKeyringTypes.hdKeyTree,
accounts: ['0xAdress'],
},
{
type: HardwareKeyringTypes.imported,
accounts: ['0x1'],
},
],
prevIsAccountMenuOpen: false,
lockMetamask: sinon.spy(),
setSelectedAccount: sinon.spy(),
showRemoveAccountConfirmationModal: sinon.spy(),
toggleAccountMenu: sinon.spy(),
history: {
push: sinon.spy(),
},
};
beforeEach(() => {
renderWithProvider(<AccountMenu.WrappedComponent {...props} />, store);
});
afterEach(() => {
props.toggleAccountMenu.resetHistory();
props.history.push.resetHistory();
});
describe('Render Content', () => {
it('returns account name from identities', () => {
const accountName = screen.queryAllByTestId('account-menu__account');
expect(accountName).toHaveLength(2);
});
it('renders user preference currency display balance from account balance', () => {
const accountBalance = screen.queryAllByTestId('account-menu__balance');
expect(accountBalance).toHaveLength(2);
});
it('simulate click', () => {
const click = screen.getAllByTestId('account-menu__account');
fireEvent.click(click[0]);
expect(props.setSelectedAccount.calledOnce).toStrictEqual(true);
expect(props.setSelectedAccount.getCall(0).args[0]).toStrictEqual('0x00');
});
it('render imported account label', () => {
const importedAccount = screen.getByText('Imported');
expect(importedAccount).toBeInTheDocument();
});
});
describe('Log Out', () => {
it('logout', () => {
const logout = screen.getByText('Lock');
expect(logout).toBeInTheDocument();
});
it('simulate click', () => {
const logout = screen.getByText('Lock');
fireEvent.click(logout);
expect(props.lockMetamask.calledOnce).toStrictEqual(true);
expect(props.history.push.getCall(0).args[0]).toStrictEqual('/');
});
});
describe('Create Account', () => {
it('renders create account item', () => {
const createAccount = screen.getByText('Create account');
expect(createAccount).toBeInTheDocument();
});
it('calls toggle menu and push new-account route to history', () => {
const createAccount = screen.getByText('Create account');
fireEvent.click(createAccount);
expect(props.toggleAccountMenu.calledOnce).toStrictEqual(true);
expect(props.history.push.getCall(0).args[0]).toStrictEqual(
'/new-account',
);
});
});
describe('Import Account', () => {
it('renders import account item', () => {
const importAccount = screen.getByText('Import account');
expect(importAccount).toBeInTheDocument();
});
it('calls toggle menu and push /new-account/import route to history', () => {
const importAccount = screen.getByText('Import account');
fireEvent.click(importAccount);
expect(props.toggleAccountMenu.calledOnce).toStrictEqual(true);
expect(props.history.push.getCall(0).args[0]).toStrictEqual(
'/new-account/import',
);
});
});
describe('Connect hardware wallet', () => {
it('renders import account item', () => {
const connectHardwareWallet = screen.getByText('Connect hardware wallet');
expect(connectHardwareWallet).toBeInTheDocument();
});
it('calls toggle menu and push /new-account/connect route to history', () => {
const connectHardwareWallet = screen.getByText('Connect hardware wallet');
fireEvent.click(connectHardwareWallet);
expect(props.toggleAccountMenu.calledOnce).toStrictEqual(true);
expect(props.history.push.getCall(0).args[0]).toStrictEqual(
'/new-account/connect',
);
});
});
describe('Support', () => {
global.platform = { openTab: sinon.spy() };
it('renders import account item', () => {
const support = screen.getByText('Submit a ticket');
expect(support).toBeInTheDocument();
});
it('opens support link when clicked', () => {
const support = screen.getByText('Submit a ticket');
fireEvent.click(support);
expect(global.platform.openTab.calledOnce).toStrictEqual(true);
});
});
describe('Settings', () => {
it('renders import account item', () => {
const settings = screen.getByText('Settings');
expect(settings).toBeInTheDocument();
});
it('calls toggle menu and push /new-account/connect route to history', () => {
const settings = screen.getByText('Settings');
fireEvent.click(settings);
expect(props.toggleAccountMenu.calledOnce).toStrictEqual(true);
expect(props.history.push.getCall(0).args[0]).toStrictEqual('/settings');
});
});
});