import assert from 'assert' import proxyquire from 'proxyquire' import sinon from 'sinon' let mapStateToProps let mapDispatchToProps const actionSpies = { setMaxModeTo: sinon.spy(), updateSendAmount: sinon.spy(), } const duckActionSpies = { updateSendErrors: sinon.spy(), } proxyquire('../amount-max-button.container.js', { 'react-redux': { connect: (ms, md) => { mapStateToProps = ms mapDispatchToProps = md return () => ({}) }, }, '../../../../../selectors': { getGasTotal: (s) => `mockGasTotal:${s}`, getSendToken: (s) => `mockSendToken:${s}`, getSendFromBalance: (s) => `mockBalance:${s}`, getTokenBalance: (s) => `mockTokenBalance:${s}`, getSendMaxModeState: (s) => `mockMaxModeOn:${s}`, getBasicGasEstimateLoadingStatus: (s) => `mockButtonDataLoading:${s}`, }, './amount-max-button.utils.js': { calcMaxAmount: (mockObj) => mockObj.val + 1, }, '../../../../../store/actions': actionSpies, '../../../../../ducks/send/send.duck': duckActionSpies, }) describe('amount-max-button container', function () { describe('mapStateToProps()', function () { it('should map the correct properties to props', function () { assert.deepStrictEqual(mapStateToProps('mockState'), { balance: 'mockBalance:mockState', buttonDataLoading: 'mockButtonDataLoading:mockState', gasTotal: 'mockGasTotal:mockState', maxModeOn: 'mockMaxModeOn:mockState', sendToken: 'mockSendToken:mockState', tokenBalance: 'mockTokenBalance:mockState', }) }) }) describe('mapDispatchToProps()', function () { let dispatchSpy let mapDispatchToPropsObject beforeEach(function () { dispatchSpy = sinon.spy() mapDispatchToPropsObject = mapDispatchToProps(dispatchSpy) }) describe('setAmountToMax()', function () { it('should dispatch an action', function () { mapDispatchToPropsObject.setAmountToMax({ val: 11, foo: 'bar' }) assert(dispatchSpy.calledTwice) assert(duckActionSpies.updateSendErrors.calledOnce) assert.deepStrictEqual( duckActionSpies.updateSendErrors.getCall(0).args[0], { amount: null, }, ) assert(actionSpies.updateSendAmount.calledOnce) assert.strictEqual(actionSpies.updateSendAmount.getCall(0).args[0], 12) }) }) describe('setMaxModeTo()', function () { it('should dispatch an action', function () { mapDispatchToPropsObject.setMaxModeTo('mockVal') assert(dispatchSpy.calledOnce) assert.strictEqual( actionSpies.setMaxModeTo.getCall(0).args[0], 'mockVal', ) }) }) }) })