import assert from 'assert'; import proxyquire from 'proxyquire'; import sinon from 'sinon'; let mapDispatchToProps; const actionSpies = { addToAddressBook: sinon.spy(), clearSend: sinon.spy(), signTokenTx: sinon.spy(), signTx: sinon.spy(), updateTransaction: sinon.spy(), }; const utilsStubs = { addressIsNew: sinon.stub().returns(true), constructTxParams: sinon.stub().returns({ value: 'mockAmount', }), constructUpdatedTx: sinon.stub().returns('mockConstructedUpdatedTxParams'), }; proxyquire('../send-footer.container.js', { 'react-redux': { connect: (_, md) => { mapDispatchToProps = md; return () => ({}); }, }, '../../../store/actions': actionSpies, '../../../selectors': { 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}`, getRenderableEstimateDataForSmallButtonsFromGWEI: (s) => [ { gasEstimateType: `mockGasEstimateType:${s}` }, ], getDefaultActiveButtonIndex: () => 0, }, './send-footer.utils': utilsStubs, }); describe('send-footer container', function () { describe('mapDispatchToProps()', function () { let dispatchSpy; let mapDispatchToPropsObject; beforeEach(function () { dispatchSpy = sinon.spy(); mapDispatchToPropsObject = mapDispatchToProps(dispatchSpy); }); describe('clearSend()', function () { it('should dispatch an action', function () { mapDispatchToPropsObject.clearSend(); assert(dispatchSpy.calledOnce); assert(actionSpies.clearSend.calledOnce); }); }); describe('sign()', function () { it('should dispatch a signTokenTx action if sendToken is defined', function () { mapDispatchToPropsObject.sign({ sendToken: { address: '0xabc', }, to: 'mockTo', amount: 'mockAmount', from: 'mockFrom', gas: 'mockGas', gasPrice: 'mockGasPrice', }); assert(dispatchSpy.calledOnce); assert.deepStrictEqual( utilsStubs.constructTxParams.getCall(0).args[0], { data: undefined, sendToken: { address: '0xabc', }, to: 'mockTo', amount: 'mockAmount', from: 'mockFrom', gas: 'mockGas', gasPrice: 'mockGasPrice', }, ); assert.deepStrictEqual(actionSpies.signTokenTx.getCall(0).args, [ '0xabc', 'mockTo', 'mockAmount', { value: 'mockAmount' }, ]); }); it('should dispatch a sign action if sendToken is not defined', function () { utilsStubs.constructTxParams.resetHistory(); mapDispatchToPropsObject.sign({ to: 'mockTo', amount: 'mockAmount', from: 'mockFrom', gas: 'mockGas', gasPrice: 'mockGasPrice', }); assert(dispatchSpy.calledOnce); assert.deepStrictEqual( utilsStubs.constructTxParams.getCall(0).args[0], { data: undefined, sendToken: undefined, to: 'mockTo', amount: 'mockAmount', from: 'mockFrom', gas: 'mockGas', gasPrice: 'mockGasPrice', }, ); assert.deepStrictEqual(actionSpies.signTx.getCall(0).args, [ { value: 'mockAmount' }, ]); }); }); describe('update()', function () { it('should dispatch an updateTransaction action', function () { mapDispatchToPropsObject.update({ to: 'mockTo', amount: 'mockAmount', from: 'mockFrom', gas: 'mockGas', gasPrice: 'mockGasPrice', editingTransactionId: 'mockEditingTransactionId', sendToken: { address: 'mockAddress' }, unapprovedTxs: 'mockUnapprovedTxs', }); assert(dispatchSpy.calledOnce); assert.deepStrictEqual( utilsStubs.constructUpdatedTx.getCall(0).args[0], { data: undefined, to: 'mockTo', amount: 'mockAmount', from: 'mockFrom', gas: 'mockGas', gasPrice: 'mockGasPrice', editingTransactionId: 'mockEditingTransactionId', sendToken: { address: 'mockAddress' }, unapprovedTxs: 'mockUnapprovedTxs', }, ); assert.strictEqual( actionSpies.updateTransaction.getCall(0).args[0], 'mockConstructedUpdatedTxParams', ); }); }); describe('addToAddressBookIfNew()', function () { it('should dispatch an action', function () { mapDispatchToPropsObject.addToAddressBookIfNew( 'mockNewAddress', 'mockToAccounts', 'mockNickname', ); assert(dispatchSpy.calledOnce); assert.strictEqual( utilsStubs.addressIsNew.getCall(0).args[0], 'mockToAccounts', ); assert.deepStrictEqual(actionSpies.addToAddressBook.getCall(0).args, [ '0xmockNewAddress', 'mockNickname', ]); }); }); }); });