import React from 'react';
import configureStore from 'redux-mock-store';
import { fireEvent } from '@testing-library/react';
import { renderWithProvider } from '../../../../test/lib/render-helpers';
import mockState from '../../../../test/data/mock-state.json';
import AccountListItem from './account-list-item';
jest.mock('../../../../shared/modules/hexstring-utils', () => ({
...jest.requireActual('../../../../shared/modules/hexstring-utils'),
toChecksumHexAddress: jest.fn(() => 'mockCheckSumAddress'),
}));
describe('AccountListItem Component', () => {
const store = configureStore()(mockState);
describe('render', () => {
const props = {
account: {
address: 'mockAddress',
name: 'mockName',
balance: 'mockBalance',
},
className: 'mockClassName',
displayAddress: false,
icon: ,
handleClick: jest.fn(),
};
it('should match snapshot', () => {
const { container } = renderWithProvider(
,
store,
);
expect(container).toMatchSnapshot();
});
it('should call handleClick with the expected props when the root div is clicked', () => {
const { getByTestId } = renderWithProvider(
,
store,
);
const accountListItem = getByTestId('account-list-item');
fireEvent.click(accountListItem);
expect(props.handleClick).toHaveBeenCalledWith({
address: 'mockAddress',
name: 'mockName',
balance: 'mockBalance',
});
});
it('should show the account name if it exists', () => {
const { queryByText } = renderWithProvider(
,
store,
);
expect(queryByText('mockName')).toBeInTheDocument();
});
it('should show the account address if there is no name', () => {
const noAccountNameProps = {
...props,
account: {
address: 'addressButNoName',
},
};
const { queryByText } = renderWithProvider(
,
store,
);
expect(queryByText('addressButNoName')).toBeInTheDocument();
});
it('should not render an icon if none is passed', () => {
const noIconProps = {
...props,
icon: null,
};
const { queryByTestId } = renderWithProvider(
,
store,
);
const accountListItemIcon = queryByTestId('account-list-item-icon');
expect(accountListItemIcon).not.toBeInTheDocument();
});
it('should render the account address as a checksumAddress if displayAddress is true and name is provided', () => {
const { queryByText, rerender } = renderWithProvider(
,
store,
);
expect(queryByText('mockCheckSumAddress')).not.toBeInTheDocument();
const displayAddressProps = {
...props,
displayAddress: true,
};
rerender();
expect(queryByText('mockCheckSumAddress')).toBeInTheDocument();
});
});
});