|
|
|
import sinon from 'sinon';
|
|
|
|
import { clearSend } from '../../../ducks/send/send.duck';
|
|
|
|
|
|
|
|
import { signTx, signTokenTx, addToAddressBook } from '../../../store/actions';
|
|
|
|
import {
|
|
|
|
addressIsNew,
|
|
|
|
constructTxParams,
|
|
|
|
constructUpdatedTx,
|
|
|
|
} from './send-footer.utils';
|
|
|
|
|
|
|
|
let mapDispatchToProps;
|
|
|
|
|
|
|
|
jest.mock('react-redux', () => ({
|
|
|
|
connect: (_, md) => {
|
|
|
|
mapDispatchToProps = md;
|
|
|
|
return () => ({});
|
|
|
|
},
|
|
|
|
}));
|
|
|
|
|
|
|
|
jest.mock('../../../store/actions.js', () => ({
|
|
|
|
addToAddressBook: jest.fn(),
|
|
|
|
signTokenTx: jest.fn(),
|
|
|
|
signTx: jest.fn(),
|
|
|
|
updateTransaction: jest.fn(),
|
|
|
|
}));
|
|
|
|
|
|
|
|
jest.mock('../../../ducks/send/send.duck.js', () => ({
|
|
|
|
clearSend: jest.fn(),
|
|
|
|
}));
|
|
|
|
|
|
|
|
jest.mock('../../../selectors/send.js', () => ({
|
|
|
|
getGasLimit: (s) => `mockGasLimit:${s}`,
|
|
|
|
getGasPrice: (s) => `mockGasPrice:${s}`,
|
|
|
|
getGasTotal: (s) => `mockGasTotal:${s}`,
|
|
|
|
getSendToken: (s) => `mockSendToken:${s}`,
|
|
|
|
getSendAmount: (s) => `mockAmount:${s}`,
|
|
|
|
getSendEditingTransactionId: (s) => `mockEditingTransactionId:${s}`,
|
|
|
|
getSendFromObject: (s) => `mockFromObject:${s}`,
|
|
|
|
getSendTo: (s) => `mockTo:${s}`,
|
|
|
|
getSendToNickname: (s) => `mockToNickname:${s}`,
|
|
|
|
getSendToAccounts: (s) => `mockToAccounts:${s}`,
|
|
|
|
getTokenBalance: (s) => `mockTokenBalance:${s}`,
|
|
|
|
getSendHexData: (s) => `mockHexData:${s}`,
|
|
|
|
getUnapprovedTxs: (s) => `mockUnapprovedTxs:${s}`,
|
|
|
|
getSendErrors: (s) => `mockSendErrors:${s}`,
|
|
|
|
isSendFormInError: (s) => `mockInError:${s}`,
|
|
|
|
getDefaultActiveButtonIndex: () => 0,
|
|
|
|
}));
|
|
|
|
|
|
|
|
jest.mock('../../../selectors/custom-gas.js', () => ({
|
|
|
|
getRenderableEstimateDataForSmallButtonsFromGWEI: (s) => [
|
|
|
|
{ gasEstimateType: `mockGasEstimateType:${s}` },
|
|
|
|
],
|
|
|
|
}));
|
|
|
|
|
|
|
|
jest.mock('./send-footer.utils', () => ({
|
|
|
|
addressIsNew: jest.fn().mockReturnValue(true),
|
|
|
|
constructTxParams: jest.fn().mockReturnValue({ value: 'mockAmount' }),
|
|
|
|
constructUpdatedTx: jest
|
|
|
|
.fn()
|
|
|
|
.mockReturnValue('mockConstructedUpdatedTxParams'),
|
|
|
|
}));
|
|
|
|
|
|
|
|
require('./send-footer.container.js');
|
|
|
|
|
|
|
|
describe('send-footer container', () => {
|
|
|
|
describe('mapDispatchToProps()', () => {
|
|
|
|
let dispatchSpy;
|
|
|
|
let mapDispatchToPropsObject;
|
|
|
|
|
|
|
|
beforeEach(() => {
|
|
|
|
dispatchSpy = sinon.spy();
|
|
|
|
mapDispatchToPropsObject = mapDispatchToProps(dispatchSpy);
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('clearSend()', () => {
|
|
|
|
it('should dispatch an action', () => {
|
|
|
|
mapDispatchToPropsObject.clearSend();
|
|
|
|
expect(dispatchSpy.calledOnce).toStrictEqual(true);
|
|
|
|
expect(clearSend).toHaveBeenCalled();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('sign()', () => {
|
|
|
|
it('should dispatch a signTokenTx action if sendToken is defined', () => {
|
|
|
|
mapDispatchToPropsObject.sign({
|
|
|
|
sendToken: {
|
|
|
|
address: '0xabc',
|
|
|
|
},
|
|
|
|
to: 'mockTo',
|
|
|
|
amount: 'mockAmount',
|
|
|
|
from: 'mockFrom',
|
|
|
|
gas: 'mockGas',
|
|
|
|
gasPrice: 'mockGasPrice',
|
|
|
|
});
|
|
|
|
expect(dispatchSpy.calledOnce).toStrictEqual(true);
|
|
|
|
expect(constructTxParams).toHaveBeenCalledWith({
|
|
|
|
data: undefined,
|
|
|
|
sendToken: {
|
|
|
|
address: '0xabc',
|
|
|
|
},
|
|
|
|
to: 'mockTo',
|
|
|
|
amount: 'mockAmount',
|
|
|
|
from: 'mockFrom',
|
|
|
|
gas: 'mockGas',
|
|
|
|
gasPrice: 'mockGasPrice',
|
|
|
|
});
|
|
|
|
expect(signTokenTx).toHaveBeenCalledWith(
|
|
|
|
'0xabc',
|
|
|
|
'mockTo',
|
|
|
|
'mockAmount',
|
|
|
|
{ value: 'mockAmount' },
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should dispatch a sign action if sendToken is not defined', () => {
|
|
|
|
mapDispatchToPropsObject.sign({
|
|
|
|
to: 'mockTo',
|
|
|
|
amount: 'mockAmount',
|
|
|
|
from: 'mockFrom',
|
|
|
|
gas: 'mockGas',
|
|
|
|
gasPrice: 'mockGasPrice',
|
|
|
|
});
|
|
|
|
expect(dispatchSpy.calledOnce).toStrictEqual(true);
|
|
|
|
expect(constructTxParams).toHaveBeenCalledWith({
|
|
|
|
data: undefined,
|
|
|
|
sendToken: undefined,
|
|
|
|
to: 'mockTo',
|
|
|
|
amount: 'mockAmount',
|
|
|
|
from: 'mockFrom',
|
|
|
|
gas: 'mockGas',
|
|
|
|
gasPrice: 'mockGasPrice',
|
|
|
|
});
|
|
|
|
expect(signTx).toHaveBeenCalledWith({
|
|
|
|
value: 'mockAmount',
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('update()', () => {
|
|
|
|
it('should dispatch an updateTransaction action', () => {
|
|
|
|
mapDispatchToPropsObject.update({
|
|
|
|
to: 'mockTo',
|
|
|
|
amount: 'mockAmount',
|
|
|
|
from: 'mockFrom',
|
|
|
|
gas: 'mockGas',
|
|
|
|
gasPrice: 'mockGasPrice',
|
|
|
|
editingTransactionId: 'mockEditingTransactionId',
|
|
|
|
sendToken: { address: 'mockAddress' },
|
|
|
|
unapprovedTxs: 'mockUnapprovedTxs',
|
|
|
|
});
|
|
|
|
expect(dispatchSpy.calledOnce).toStrictEqual(true);
|
|
|
|
expect(constructUpdatedTx).toHaveBeenCalledWith({
|
|
|
|
data: undefined,
|
|
|
|
to: 'mockTo',
|
|
|
|
amount: 'mockAmount',
|
|
|
|
from: 'mockFrom',
|
|
|
|
gas: 'mockGas',
|
|
|
|
gasPrice: 'mockGasPrice',
|
|
|
|
editingTransactionId: 'mockEditingTransactionId',
|
|
|
|
sendToken: { address: 'mockAddress' },
|
|
|
|
unapprovedTxs: 'mockUnapprovedTxs',
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('addToAddressBookIfNew()', () => {
|
|
|
|
it('should dispatch an action', () => {
|
|
|
|
mapDispatchToPropsObject.addToAddressBookIfNew(
|
|
|
|
'mockNewAddress',
|
|
|
|
'mockToAccounts',
|
|
|
|
'mockNickname',
|
|
|
|
);
|
|
|
|
expect(dispatchSpy.calledOnce).toStrictEqual(true);
|
|
|
|
expect(addressIsNew).toHaveBeenCalledWith(
|
|
|
|
'mockToAccounts',
|
|
|
|
'0xmockNewAddress',
|
|
|
|
);
|
|
|
|
expect(addToAddressBook).toHaveBeenCalledWith(
|
|
|
|
'0xmockNewAddress',
|
|
|
|
'mockNickname',
|
|
|
|
);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|