aboutsummaryrefslogtreecommitdiffstats
path: root/ui/app/pages/send/send-content/send-amount-row/amount-max-button/tests/amount-max-button-component.test.js
blob: b04d3897f4bd3a2b01a01ea3c16bf934986ed07b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import React from 'react'
import assert from 'assert'
import { shallow } from 'enzyme'
import sinon from 'sinon'
import AmountMaxButton from '../amount-max-button.component.js'

const propsMethodSpies = {
  setAmountToMax: sinon.spy(),
  setMaxModeTo: sinon.spy(),
}

const MOCK_EVENT = { preventDefault: () => {} }

sinon.spy(AmountMaxButton.prototype, 'setMaxAmount')

describe('AmountMaxButton Component', function () {
  let wrapper
  let instance

  beforeEach(() => {
    wrapper = shallow(<AmountMaxButton
      balance={'mockBalance'}
      gasTotal={'mockGasTotal'}
      maxModeOn={false}
      selectedToken={ { address: 'mockTokenAddress' } }
      setAmountToMax={propsMethodSpies.setAmountToMax}
      setMaxModeTo={propsMethodSpies.setMaxModeTo}
      tokenBalance={'mockTokenBalance'}
    />, { context: { t: str => str + '_t' } })
    instance = wrapper.instance()
  })

  afterEach(() => {
    propsMethodSpies.setAmountToMax.resetHistory()
    propsMethodSpies.setMaxModeTo.resetHistory()
    AmountMaxButton.prototype.setMaxAmount.resetHistory()
  })

  describe('setMaxAmount', () => {

    it('should call setAmountToMax with the correct params', () => {
      assert.equal(propsMethodSpies.setAmountToMax.callCount, 0)
      instance.setMaxAmount()
      assert.equal(propsMethodSpies.setAmountToMax.callCount, 1)
      assert.deepEqual(
        propsMethodSpies.setAmountToMax.getCall(0).args,
        [{
          balance: 'mockBalance',
          gasTotal: 'mockGasTotal',
          selectedToken: { address: 'mockTokenAddress' },
          tokenBalance: 'mockTokenBalance',
        }]
      )
    })

  })

  describe('render', () => {
    it('should render an element with a send-v2__amount-max class', () => {
      assert(wrapper.exists('.send-v2__amount-max'))
    })

    it('should call setMaxModeTo and setMaxAmount when the send-v2__amount-max div is clicked', () => {
      const {
        onClick,
      } = wrapper.find('.send-v2__amount-max').props()

      assert.equal(AmountMaxButton.prototype.setMaxAmount.callCount, 0)
      assert.equal(propsMethodSpies.setMaxModeTo.callCount, 0)
      onClick(MOCK_EVENT)
      assert.equal(AmountMaxButton.prototype.setMaxAmount.callCount, 1)
      assert.equal(propsMethodSpies.setMaxModeTo.callCount, 1)
      assert.deepEqual(
        propsMethodSpies.setMaxModeTo.getCall(0).args,
        [true]
      )
    })

    it('should not render anything when maxModeOn is true', () => {
      wrapper.setProps({ maxModeOn: true })
      assert.ok(!wrapper.exists('.send-v2__amount-max'))
    })

    it('should render the expected text when maxModeOn is false', () => {
      wrapper.setProps({ maxModeOn: false })
      assert.equal(wrapper.find('.send-v2__amount-max').text(), 'max_t')
    })
  })
})