1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-22 19:26:13 +02:00
metamask-extension/ui/components/multichain/account-list-menu/account-list-menu.test.js
David Walsh c079c4320e
UX: Multichain: Account Menu List (#17947)
* UX: Multichain: Account Menu List

* Move to using stylesheet

* Add hover state

* Implement George's suggestions

* Add connected site avatar

* Add hardware tag

* Create story for selected hardware item

* Progress on the AccountListItemMenu

* Add story for AccountListItemMenu

* Better position the account menu

* Fix AvatarFavicon missing name prop

* Update menu options label to be account specific

* Update text of 'View on Explorer'

* Add AccountListMenu component

* Move all items to multichain directory

* Fix paths

* Fix linting, use AvatarIcon

* Add title and close button to account menu

* Center the popover title

* Add search functionality

* Implementation WIP

* Add MULTICHAIN feature flag

* Add MULTICHAIN feature flag, add actions for menu items

* Properly dispatch events

* Fix search box padding

* Fix sizing of menu item text

* Fix isRequired

* Fix alignment of the popover

* Update label for hardware wallet items, add text for no search results

* Update keyring retreival to remove account and add label

* Fix storybook

* Fix double link click issue, prevent wrapping of values

* Use labelProps for tag variant

* Restructure item menu story

* Empower storybooks for all new components

* Allow only 3 decimals for currencies

* Avoid inline styles

* Prefix classes with multichain, fix account-list-menu storybook

* Close the accounts menu when account details is clicked

* Restore tag.js

* Create global file for multichain css

* Add index file for multichain js

* Update file paths

* Ensure the block domain is present in menu

* Add AccountListItem test

* Add AccountListItemMenu tests

* Show account connect to current dapp

* Improve tests

* Make avatar smaller

* Add tooltip for account menu

* Align icon better

* Update snapshot

* Rename files to DS standard

* Add index files for export

* Export all multichain components

* Update snapshot

* Remove embedded style in popover

* Add comments for props, cleanup storybook

* Improve test coverage

* Improve test code quality

* Remove border form avatar

* Switch to using the ButtonLink iconName prop

* Only show tooltip if character limit is reached

* Restore prior search settings

* Add test for tooltip
2023-03-22 15:30:08 +05:30

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();
});
});