import React from 'react';
import configureMockStore from 'redux-mock-store';
import { fireEvent, waitFor } from '@testing-library/react';
import { renderWithProvider } from '../../../../test/lib/render-helpers';
import CurrencyInput from '.';
describe('CurrencyInput Component', () => {
const mockStore = {
metamask: {
nativeCurrency: 'ETH',
currentCurrency: 'usd',
conversionRate: 231.06,
provider: {
chainId: '0x4',
},
preferences: {
showFiatInTestnets: true,
},
},
};
describe('rendering', () => {
it('should render properly without a suffix', () => {
const store = configureMockStore()(mockStore);
const { container } = renderWithProvider(, store);
expect(container).toMatchSnapshot();
});
it('should render properly with an ETH value', () => {
const store = configureMockStore()(mockStore);
const props = {
hexValue: 'de0b6b3a7640000',
};
const { container } = renderWithProvider(
,
store,
);
expect(container).toMatchSnapshot();
});
it('should render properly with a fiat value', () => {
const store = configureMockStore()(mockStore);
const props = {
onChange: jest.fn(),
hexValue: 'f602f2234d0ea',
featureSecondary: true,
};
const { container } = renderWithProvider(
,
store,
);
expect(container).toMatchSnapshot();
});
it('should render properly with a native value when hideSecondary is true', () => {
const hideSecondaryState = {
metamask: {
...mockStore.metamask,
preferences: {
showFiatInTestnets: false,
},
hideSecondary: true,
},
};
const store = configureMockStore()(hideSecondaryState);
const props = {
onChange: jest.fn(),
hexValue: 'f602f2234d0ea',
featureSecondary: true,
};
const { container } = renderWithProvider(
,
store,
);
expect(container).toMatchSnapshot();
});
});
describe('handling actions', () => {
it('should call onChange on input changes with the hex value for ETH', () => {
const store = configureMockStore()(mockStore);
const props = {
onChange: jest.fn(),
hexValue: 'f602f2234d0ea',
};
const { queryByTestId, queryByTitle } = renderWithProvider(
,
store,
);
const currencyInput = queryByTestId('currency-input');
fireEvent.change(currencyInput, { target: { value: 1 } });
expect(props.onChange).toHaveBeenCalledWith('de0b6b3a7640000');
expect(queryByTitle('$231.06 USD')).toBeInTheDocument();
});
it('should call onChange on input changes with the hex value for fiat', () => {
const store = configureMockStore()(mockStore);
const props = {
onChange: jest.fn(),
hexValue: 'f602f2234d0ea',
featureSecondary: true,
};
const { queryByTestId, queryByTitle } = renderWithProvider(
,
store,
);
const currencyInput = queryByTestId('currency-input');
fireEvent.change(currencyInput, { target: { value: 1 } });
expect(props.onChange).toHaveBeenCalledWith('f602f2234d0ea');
expect(queryByTitle('0.00432788 ETH')).toBeInTheDocument();
});
it('should swap selected currency when swap icon is clicked', async () => {
const store = configureMockStore()(mockStore);
const props = {
onChange: jest.fn(),
onPreferenceToggle: jest.fn(),
featureSecondary: true,
};
const { queryByTestId, queryByTitle } = renderWithProvider(
,
store,
);
const currencyInput = queryByTestId('currency-input');
fireEvent.change(currencyInput, { target: { value: 1 } });
expect(queryByTitle('0.00432788 ETH')).toBeInTheDocument();
const currencySwap = queryByTestId('currency-swap');
fireEvent.click(currencySwap);
await waitFor(() => {
expect(queryByTitle('$1.00 USD')).toBeInTheDocument();
});
});
});
});