import React from 'react';
import configureMockState from 'redux-mock-store';
import { fireEvent } from '@testing-library/react';
import thunk from 'redux-thunk';
import { renderWithProvider } from '../../../../../test/lib/render-helpers';
import mockState from '../../../../../test/data/mock-state.json';
import {
etherscanViewOn,
exportPrivateKey,
} from '../../../../../app/_locales/en/messages.json';
import AccountDetailsModal from '.';
const mockShowModal = jest.fn();
jest.mock('../../../../store/actions.ts', () => {
return {
showModal: () => mockShowModal,
};
});
describe('Account Details Modal', () => {
const mockStore = configureMockState([thunk])(mockState);
global.platform = { openTab: jest.fn() };
it('should set account label when changing default account label', () => {
const { queryByTestId, getByPlaceholderText } = renderWithProvider(
,
mockStore,
);
const editButton = queryByTestId('editable-label-button');
expect(queryByTestId('editable-input')).not.toBeInTheDocument();
fireEvent.click(editButton);
expect(queryByTestId('editable-input')).toBeInTheDocument();
const editableInput = getByPlaceholderText('Account name');
const newAccountLabel = 'New Label';
fireEvent.change(editableInput, {
target: { value: newAccountLabel },
});
expect(editableInput).toHaveAttribute('value', newAccountLabel);
});
it('opens new tab when view block explorer is clicked', () => {
const { queryByText } = renderWithProvider(
,
mockStore,
);
const viewOnEtherscan = queryByText(etherscanViewOn.message);
fireEvent.click(viewOnEtherscan);
expect(global.platform.openTab).toHaveBeenCalled();
});
it('shows export private key modal when clicked', () => {
const { queryByText } = renderWithProvider(
,
mockStore,
);
const exportPrivButton = queryByText(exportPrivateKey.message);
fireEvent.click(exportPrivButton);
expect(mockShowModal).toHaveBeenCalled();
});
it('sets blockexplorerview text when block explorer url in rpcPrefs exists', () => {
const blockExplorerUrl = 'https://block.explorer';
const customProviderMockState = {
...mockState,
metamask: {
...mockState.metamask,
networkConfigurations: {
networkConfigurationId: {
chainId: '0x99',
rpcPrefs: {
blockExplorerUrl,
},
},
},
providerConfig: {
chainId: '0x99',
},
},
};
const customProviderMockStore = configureMockState([thunk])(
customProviderMockState,
);
const { queryByText } = renderWithProvider(
,
customProviderMockStore,
);
expect(queryByText(/block.explorer/u)).toBeInTheDocument();
});
it('does not display export private key if the keyring is snaps', () => {
const mockStateWithSnapKeyring = {
appState: {
networkDropdownOpen: false,
gasIsLoading: false,
isLoading: false,
modal: {
open: false,
modalState: {
name: null,
props: {},
},
previousModalState: {
name: null,
},
},
warning: null,
customTokenAmount: '10',
},
history: {
mostRecentOverviewPage: '/mostRecentOverviewPage',
},
metamask: {
providerConfig: {
type: 'rpc',
chainId: '0x5',
ticker: 'ETH',
id: 'testNetworkConfigurationId',
},
keyrings: [
{
type: 'Snap Keyring',
accounts: [
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
'0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b',
],
},
{
type: 'Ledger Hardware',
accounts: ['0xc42edfcc21ed14dda456aa0756c153f7985d8813'],
},
{
type: 'Simple Key Pair',
accounts: ['0xeb9e64b93097bc15f01f13eae97015c57ab64823'],
},
],
identities: {
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': {
address: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
name: 'Test Account',
},
'0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b': {
address: '0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b',
name: 'Test Account 2',
},
'0xc42edfcc21ed14dda456aa0756c153f7985d8813': {
address: '0xc42edfcc21ed14dda456aa0756c153f7985d8813',
name: 'Test Ledger 1',
},
'0xeb9e64b93097bc15f01f13eae97015c57ab64823': {
name: 'Test Account 3',
address: '0xeb9e64b93097bc15f01f13eae97015c57ab64823',
},
},
networkDetails: {
EIPS: {
1559: true,
},
},
frequentRpcListDetail: [],
subjectMetadata: {
'npm:@metamask/test-snap-bip44': {
name: '@metamask/test-snap-bip44',
version: '1.2.3',
subjectType: 'snap',
},
},
notifications: {
test: {
id: 'test',
origin: 'local:http://localhost:8086/',
createdDate: 1652967897732,
readDate: null,
message: 'Hello, http://localhost:8086!',
},
test2: {
id: 'test2',
origin: 'local:http://localhost:8086/',
createdDate: 1652967897732,
readDate: 1652967897732,
message: 'Hello, http://localhost:8086!',
},
},
cachedBalances: {},
incomingTransactions: {},
selectedAddress: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
accounts: {
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': {
balance: '0x346ba7725f412cbfdb',
address: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc',
},
'0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b': {
address: '0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b',
balance: '0x0',
},
'0xc42edfcc21ed14dda456aa0756c153f7985d8813': {
address: '0xc42edfcc21ed14dda456aa0756c153f7985d8813',
balance: '0x0',
},
'0xeb9e64b93097bc15f01f13eae97015c57ab64823': {
address: '0xeb9e64b93097bc15f01f13eae97015c57ab64823',
balance: '0x0',
},
},
},
};
const mockStoreWithSnapKeyring = configureMockState([thunk])(
mockStateWithSnapKeyring,
);
const { queryByText } = renderWithProvider(
,
mockStoreWithSnapKeyring,
);
const exportPrivateKeyButton = queryByText(exportPrivateKey.message);
expect(exportPrivateKeyButton).not.toBeInTheDocument();
});
});