1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00
metamask-extension/ui/components/multichain/account-list-item/account-list-item.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.1 KiB
JavaScript

/* eslint-disable jest/require-top-level-describe */
import React from 'react';
import { screen, fireEvent } from '@testing-library/react';
import { renderWithProvider } from '../../../../test/jest';
import configureStore from '../../../store/store';
import mockState from '../../../../test/data/mock-state.json';
import { shortenAddress } from '../../../helpers/utils/util';
import { AccountListItem } from '.';
const identity = {
...mockState.metamask.identities[
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc'
],
balance: '0x152387ad22c3f0',
};
const DEFAULT_PROPS = {
identity,
onClick: jest.fn(),
};
const render = (props = {}) => {
const store = configureStore({
metamask: {
...mockState.metamask,
},
});
const allProps = { ...DEFAULT_PROPS, ...props };
return renderWithProvider(<AccountListItem {...allProps} />, store);
};
describe('AccountListItem', () => {
it('renders AccountListItem component and shows account name, address, and balance', () => {
const { container } = render();
expect(screen.getByText(identity.name)).toBeInTheDocument();
expect(
screen.getByText(shortenAddress(identity.address)),
).toBeInTheDocument();
expect(document.querySelector('[title="0.006 ETH"]')).toBeInTheDocument();
expect(container).toMatchSnapshot();
});
it('renders selected block when account is selected', () => {
render({ selected: true });
expect(
document.querySelector('.multichain-account-list-item--selected'),
).toBeInTheDocument();
});
it('renders the account name tooltip for long names', () => {
render({
selected: true,
identity: {
...identity,
name: 'This is a super long name that requires tooltip',
},
});
expect(
document.querySelector('.multichain-account-list-item__tooltip'),
).toBeInTheDocument();
});
it('renders the tree-dot menu to lauch the details menu', () => {
render();
const optionsButton = document.querySelector(
'[aria-label="Test Account Options"]',
);
expect(optionsButton).toBeInTheDocument();
fireEvent.click(optionsButton);
expect(document.querySelector('.menu__background')).toBeInTheDocument();
});
it('executes the action when the item is clicked', () => {
const onClick = jest.fn();
render({ onClick });
const item = document.querySelector('.multichain-account-list-item');
fireEvent.click(item);
expect(onClick).toHaveBeenCalled();
});
it('clicking the three-dot menu opens up options', () => {
const onClick = jest.fn();
render({ onClick });
const item = document.querySelector(
'[data-testid="account-list-item-menu-button"]',
);
fireEvent.click(item);
expect(
document.querySelector('[data-testid="account-list-menu-open-explorer"]'),
).toBeInTheDocument();
});
it('renders connected site icon', () => {
const connectedAvatarName = 'Uniswap';
const { getByAltText } = render({
connectedAvatar: 'https://uniswap.org/favicon.ico',
connectedAvatarName,
});
expect(getByAltText(`${connectedAvatarName} logo`)).toBeInTheDocument();
});
});