1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-25 03:20:23 +01:00
metamask-extension/ui/app/pages/send/send-content/send-amount-row/tests/send-amount-row-component.test.js
2020-02-15 17:04:21 -03:30

188 lines
6.0 KiB
JavaScript

import React from 'react'
import assert from 'assert'
import { shallow } from 'enzyme'
import sinon from 'sinon'
import SendAmountRow from '../send-amount-row.component.js'
import SendRowWrapper from '../../send-row-wrapper/send-row-wrapper.component'
import AmountMaxButton from '../amount-max-button/amount-max-button.container'
import UserPreferencedTokenInput from '../../../../../components/app/user-preferenced-token-input'
describe('SendAmountRow Component', function () {
describe('validateAmount', function () {
it('should call updateSendAmountError with the correct params', function () {
const { instance, propsMethodSpies: { updateSendAmountError } } = shallowRenderSendAmountRow()
assert.equal(updateSendAmountError.callCount, 0)
instance.validateAmount('someAmount')
assert.ok(updateSendAmountError.calledOnceWithExactly({
amount: 'someAmount',
amountConversionRate: 'mockAmountConversionRate',
balance: 'mockBalance',
conversionRate: 7,
gasTotal: 'mockGasTotal',
primaryCurrency: 'mockPrimaryCurrency',
selectedToken: { address: 'mockTokenAddress' },
tokenBalance: 'mockTokenBalance',
}))
})
it('should call updateGasFeeError if selectedToken is truthy', function () {
const { instance, propsMethodSpies: { updateGasFeeError } } = shallowRenderSendAmountRow()
assert.equal(updateGasFeeError.callCount, 0)
instance.validateAmount('someAmount')
assert.ok(updateGasFeeError.calledOnceWithExactly({
amountConversionRate: 'mockAmountConversionRate',
balance: 'mockBalance',
conversionRate: 7,
gasTotal: 'mockGasTotal',
primaryCurrency: 'mockPrimaryCurrency',
selectedToken: { address: 'mockTokenAddress' },
tokenBalance: 'mockTokenBalance',
}))
})
it('should call not updateGasFeeError if selectedToken is falsey', function () {
const { wrapper, instance, propsMethodSpies: { updateGasFeeError } } = shallowRenderSendAmountRow()
wrapper.setProps({ selectedToken: null })
assert.equal(updateGasFeeError.callCount, 0)
instance.validateAmount('someAmount')
assert.equal(updateGasFeeError.callCount, 0)
})
})
describe('updateAmount', function () {
it('should call setMaxModeTo', function () {
const { instance, propsMethodSpies: { setMaxModeTo } } = shallowRenderSendAmountRow()
assert.equal(setMaxModeTo.callCount, 0)
instance.updateAmount('someAmount')
assert.ok(setMaxModeTo.calledOnceWithExactly(false))
})
it('should call updateSendAmount', function () {
const { instance, propsMethodSpies: { updateSendAmount } } = shallowRenderSendAmountRow()
assert.equal(updateSendAmount.callCount, 0)
instance.updateAmount('someAmount')
assert.ok(updateSendAmount.calledOnceWithExactly('someAmount'))
})
})
describe('render', function () {
it('should render a SendRowWrapper component', function () {
const { wrapper } = shallowRenderSendAmountRow()
assert.equal(wrapper.find(SendRowWrapper).length, 1)
})
it('should pass the correct props to SendRowWrapper', function () {
const { wrapper } = shallowRenderSendAmountRow()
const {
errorType,
label,
showError,
} = wrapper.find(SendRowWrapper).props()
assert.equal(errorType, 'amount')
assert.equal(label, 'amount_t:')
assert.equal(showError, false)
})
it('should render an AmountMaxButton as the first child of the SendRowWrapper', function () {
const { wrapper } = shallowRenderSendAmountRow()
assert(wrapper.find(SendRowWrapper).childAt(0).is(AmountMaxButton))
})
it('should render a UserPreferencedTokenInput as the second child of the SendRowWrapper', function () {
const { wrapper } = shallowRenderSendAmountRow()
assert(wrapper.find(SendRowWrapper).childAt(1).is(UserPreferencedTokenInput))
})
it('should render the UserPreferencedTokenInput with the correct props', function () {
const { wrapper, instanceSpies: { updateGas, updateAmount, validateAmount } } = shallowRenderSendAmountRow()
const {
onChange,
error,
value,
} = wrapper.find(SendRowWrapper).childAt(1).props()
assert.equal(error, false)
assert.equal(value, 'mockAmount')
assert.equal(updateGas.callCount, 0)
assert.equal(updateAmount.callCount, 0)
assert.equal(validateAmount.callCount, 0)
onChange('mockNewAmount')
assert.ok(updateGas.calledOnceWithExactly('mockNewAmount'))
assert.ok(updateAmount.calledOnceWithExactly('mockNewAmount'))
assert.ok(validateAmount.calledOnceWithExactly('mockNewAmount'))
})
})
})
function shallowRenderSendAmountRow () {
const setMaxModeTo = sinon.spy()
const updateGasFeeError = sinon.spy()
const updateSendAmount = sinon.spy()
const updateSendAmountError = sinon.spy()
const wrapper = shallow((
<SendAmountRow
amount="mockAmount"
amountConversionRate="mockAmountConversionRate"
balance="mockBalance"
conversionRate={7}
convertedCurrency="mockConvertedCurrency"
gasTotal="mockGasTotal"
inError={false}
primaryCurrency="mockPrimaryCurrency"
selectedToken={ { address: 'mockTokenAddress' } }
setMaxModeTo={setMaxModeTo}
tokenBalance="mockTokenBalance"
updateGasFeeError={updateGasFeeError}
updateSendAmount={updateSendAmount}
updateSendAmountError={updateSendAmountError}
updateGas={() => {}}
/>
), { context: { t: (str) => str + '_t' } })
const instance = wrapper.instance()
const updateAmount = sinon.spy(instance, 'updateAmount')
const updateGas = sinon.spy(instance, 'updateGas')
const validateAmount = sinon.spy(instance, 'validateAmount')
return {
instance,
wrapper,
propsMethodSpies: {
setMaxModeTo,
updateGasFeeError,
updateSendAmount,
updateSendAmountError,
},
instanceSpies: {
updateAmount,
updateGas,
validateAmount,
},
}
}