mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-25 11:28:51 +01:00
c1a7f46e8f
* UX: Show Checksum Addresses in Account Menu * Checksum the account details -> export private key address copy button * Update tests
102 lines
3.4 KiB
JavaScript
102 lines
3.4 KiB
JavaScript
import React from 'react';
|
|
import { screen, fireEvent } from '@testing-library/react';
|
|
import userEvent from '@testing-library/user-event';
|
|
import { toChecksumHexAddress } from '@metamask/controller-utils';
|
|
import { renderWithProvider } from '../../../../test/jest';
|
|
import configureStore from '../../../store/store';
|
|
import mockState from '../../../../test/data/mock-state.json';
|
|
import { showPrivateKey } from '../../../../app/_locales/en/messages.json';
|
|
import {
|
|
setAccountDetailsAddress,
|
|
exportAccount,
|
|
hideWarning,
|
|
} from '../../../store/actions';
|
|
import { shortenAddress } from '../../../helpers/utils/util';
|
|
import { AccountDetails } from '.';
|
|
|
|
jest.mock('../../../store/actions.ts');
|
|
|
|
describe('AccountDetails', () => {
|
|
const address = '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc';
|
|
const mockSetAccountDetailsAddress = jest.fn();
|
|
const mockExportAccount = jest.fn().mockResolvedValue(true);
|
|
const mockHideWarning = jest.fn();
|
|
|
|
beforeEach(() => {
|
|
setAccountDetailsAddress.mockReturnValue(mockSetAccountDetailsAddress);
|
|
exportAccount.mockReturnValue(mockExportAccount);
|
|
hideWarning.mockReturnValue(mockHideWarning);
|
|
});
|
|
|
|
afterEach(() => jest.clearAllMocks());
|
|
|
|
function render(props = {}, storeModifications = {}) {
|
|
const store = configureStore({
|
|
metamask: {
|
|
...mockState.metamask,
|
|
},
|
|
...storeModifications,
|
|
});
|
|
const allProps = { address, ...props };
|
|
return renderWithProvider(<AccountDetails {...allProps} />, store);
|
|
}
|
|
|
|
it('should set account label when changing default account label', () => {
|
|
render();
|
|
|
|
const editButton = screen.getByTestId('editable-label-button');
|
|
fireEvent.click(editButton);
|
|
|
|
const editableInput = screen.getByPlaceholderText('Account name');
|
|
const newAccountLabel = 'New Label';
|
|
|
|
fireEvent.change(editableInput, { target: { value: newAccountLabel } });
|
|
|
|
expect(editableInput).toHaveAttribute('value', newAccountLabel);
|
|
});
|
|
|
|
it('shows export private key contents and password field when clicked', () => {
|
|
const { queryByText, queryByPlaceholderText } = render();
|
|
const exportPrivateKeyButton = queryByText(showPrivateKey.message);
|
|
fireEvent.click(exportPrivateKeyButton);
|
|
|
|
expect(
|
|
queryByText(shortenAddress(toChecksumHexAddress(address))),
|
|
).toBeInTheDocument();
|
|
|
|
expect(queryByText('Show private key')).toBeInTheDocument();
|
|
expect(queryByPlaceholderText('Password')).toBeInTheDocument();
|
|
});
|
|
|
|
it('attempts to validate password when submitted', async () => {
|
|
const password = 'password';
|
|
|
|
const { queryByPlaceholderText, queryByText } = render();
|
|
const exportPrivateKeyButton = queryByText(showPrivateKey.message);
|
|
fireEvent.click(exportPrivateKeyButton);
|
|
|
|
queryByPlaceholderText('Password').focus();
|
|
await userEvent.keyboard(password);
|
|
fireEvent.click(queryByText('Confirm'));
|
|
|
|
expect(exportAccount).toHaveBeenCalledWith(password, address);
|
|
});
|
|
|
|
it('displays the private key when exposed in state', () => {
|
|
const samplePrivateKey = '8675309';
|
|
const { queryByText } = render(
|
|
{},
|
|
{ appState: { accountDetail: { privateKey: samplePrivateKey } } },
|
|
);
|
|
|
|
const exportPrivateKeyButton = queryByText(showPrivateKey.message);
|
|
fireEvent.click(exportPrivateKeyButton);
|
|
|
|
expect(
|
|
queryByText(shortenAddress(toChecksumHexAddress(address))),
|
|
).toBeInTheDocument();
|
|
|
|
expect(queryByText(samplePrivateKey)).toBeInTheDocument();
|
|
});
|
|
});
|