aboutsummaryrefslogtreecommitdiffstats
path: root/ui/app/components/send_/tests
diff options
context:
space:
mode:
authorDan <danjm.com@gmail.com>2018-05-22 16:10:06 +0800
committerDan <danjm.com@gmail.com>2018-05-31 07:24:31 +0800
commit166fda58777748141859c0a674a5fce454cfc3d3 (patch)
treeb8f743c927ff55ee02be61b013d3c726711381c3 /ui/app/components/send_/tests
parent17909465f283179aad39166b1191dbaba3770bf6 (diff)
downloadtangerine-wallet-browser-166fda58777748141859c0a674a5fce454cfc3d3.tar.gz
tangerine-wallet-browser-166fda58777748141859c0a674a5fce454cfc3d3.tar.zst
tangerine-wallet-browser-166fda58777748141859c0a674a5fce454cfc3d3.zip
Simplify gas estimate actions and add local estimateGasPriceFromRecentBlocks method.
Diffstat (limited to 'ui/app/components/send_/tests')
-rw-r--r--ui/app/components/send_/tests/send-component.test.js2
-rw-r--r--ui/app/components/send_/tests/send-container.test.js9
-rw-r--r--ui/app/components/send_/tests/send-selectors-test-data.js1
-rw-r--r--ui/app/components/send_/tests/send-selectors.test.js10
-rw-r--r--ui/app/components/send_/tests/send-utils.test.js106
5 files changed, 125 insertions, 3 deletions
diff --git a/ui/app/components/send_/tests/send-component.test.js b/ui/app/components/send_/tests/send-component.test.js
index 4aa1978e4..780ee1046 100644
--- a/ui/app/components/send_/tests/send-component.test.js
+++ b/ui/app/components/send_/tests/send-component.test.js
@@ -42,6 +42,7 @@ describe.only('Send Component', function () {
history={{ mockProp: 'history-abc'}}
network={'3'}
primaryCurrency={'mockPrimaryCurrency'}
+ recentBlocks={['mockBlock']}
selectedAddress={'mockSelectedAddress'}
selectedToken={'mockSelectedToken'}
tokenBalance={'mockTokenBalance'}
@@ -211,6 +212,7 @@ describe.only('Send Component', function () {
editingTransactionId: 'mockEditingTransactionId',
gasLimit: 'mockGasLimit',
gasPrice: 'mockGasPrice',
+ recentBlocks: ['mockBlock'],
selectedAddress: 'mockSelectedAddress',
selectedToken: 'mockSelectedToken',
}
diff --git a/ui/app/components/send_/tests/send-container.test.js b/ui/app/components/send_/tests/send-container.test.js
index e589cca05..2129709c1 100644
--- a/ui/app/components/send_/tests/send-container.test.js
+++ b/ui/app/components/send_/tests/send-container.test.js
@@ -32,6 +32,7 @@ proxyquire('../send.container.js', {
getGasPrice: (s) => `mockGasPrice:${s}`,
getGasTotal: (s) => `mockGasTotal:${s}`,
getPrimaryCurrency: (s) => `mockPrimaryCurrency:${s}`,
+ getRecentBlocks: (s) => `mockRecentBlocks:${s}`,
getSelectedAddress: (s) => `mockSelectedAddress:${s}`,
getSelectedToken: (s) => `mockSelectedToken:${s}`,
getSelectedTokenContract: (s) => `mockTokenContract:${s}`,
@@ -66,6 +67,7 @@ describe('send container', () => {
gasTotal: 'mockGasTotal:mockState',
network: 'mockNetwork:mockState',
primaryCurrency: 'mockPrimaryCurrency:mockState',
+ recentBlocks: 'mockRecentBlocks:mockState',
selectedAddress: 'mockSelectedAddress:mockState',
selectedToken: 'mockSelectedToken:mockState',
tokenBalance: 'mockTokenBalance:mockState',
@@ -91,6 +93,7 @@ describe('send container', () => {
editingTransactionId: '0x2',
gasLimit: '0x3',
gasPrice: '0x4',
+ recentBlocks: ['mockBlock'],
selectedAddress: '0x4',
selectedToken: { address: '0x1' },
}
@@ -105,14 +108,14 @@ describe('send container', () => {
})
it('should dispatch an updateGasData action when editingTransactionId is falsy', () => {
- const { selectedAddress, selectedToken, data } = mockProps
+ const { selectedAddress, selectedToken, data, recentBlocks } = mockProps
mapDispatchToPropsObject.updateAndSetGasTotal(
- Object.assign(mockProps, {editingTransactionId: false})
+ Object.assign({}, mockProps, {editingTransactionId: false})
)
assert(dispatchSpy.calledOnce)
assert.deepEqual(
actionSpies.updateGasData.getCall(0).args[0],
- { selectedAddress, selectedToken, data }
+ { selectedAddress, selectedToken, data, recentBlocks }
)
})
})
diff --git a/ui/app/components/send_/tests/send-selectors-test-data.js b/ui/app/components/send_/tests/send-selectors-test-data.js
index ecfe9022f..a1423675d 100644
--- a/ui/app/components/send_/tests/send-selectors-test-data.js
+++ b/ui/app/components/send_/tests/send-selectors-test-data.js
@@ -198,6 +198,7 @@ module.exports = {
},
},
'currentLocale': 'en',
+ recentBlocks: ['mockBlock1', 'mockBlock2', 'mockBlock3'],
},
'appState': {
'menuOpen': false,
diff --git a/ui/app/components/send_/tests/send-selectors.test.js b/ui/app/components/send_/tests/send-selectors.test.js
index 977fe2a47..22e45afdb 100644
--- a/ui/app/components/send_/tests/send-selectors.test.js
+++ b/ui/app/components/send_/tests/send-selectors.test.js
@@ -17,6 +17,7 @@ const {
getGasPrice,
getGasTotal,
getPrimaryCurrency,
+ getRecentBlocks,
getSelectedAccount,
getSelectedAddress,
getSelectedIdentity,
@@ -239,6 +240,15 @@ describe('send selectors', () => {
})
})
+ describe('getRecentBlocks()', () => {
+ it('should return the recent blocks', () => {
+ assert.deepEqual(
+ getRecentBlocks(mockState),
+ ['mockBlock1', 'mockBlock2', 'mockBlock3']
+ )
+ })
+ })
+
describe('getSelectedAccount()', () => {
it('should return the currently selected account', () => {
assert.deepEqual(
diff --git a/ui/app/components/send_/tests/send-utils.test.js b/ui/app/components/send_/tests/send-utils.test.js
index 903b531e6..b5211a63d 100644
--- a/ui/app/components/send_/tests/send-utils.test.js
+++ b/ui/app/components/send_/tests/send-utils.test.js
@@ -1,6 +1,13 @@
import assert from 'assert'
import sinon from 'sinon'
import proxyquire from 'proxyquire'
+import {
+ ONE_GWEI_IN_WEI_HEX,
+} from '../send.constants'
+const {
+ addCurrencies,
+ subtractCurrencies,
+} = require('../../../conversion-util')
const {
INSUFFICIENT_FUNDS_ERROR,
@@ -31,7 +38,9 @@ const sendUtils = proxyquire('../send.utils.js', {
const {
calcGasTotal,
+ estimateGas,
doesAmountErrorRequireUpdate,
+ estimateGasPriceFromRecentBlocks,
generateTokenTransferData,
getAmountErrorObject,
getParamsForGasEstimate,
@@ -261,4 +270,101 @@ describe('send utils', () => {
})
})
+ describe('estimateGas', () => {
+ let tempEthQuery
+ beforeEach(() => {
+ tempEthQuery = global.ethQuery
+ global.ethQuery = {
+ estimateGas: sinon.stub().callsFake((data, cb) => {
+ return cb(
+ data.isMockErr ? 'mockErr' : null,
+ Object.assign(data, { estimateGasCalled: true })
+ )
+ })
+ }
+ })
+
+ afterEach(() => {
+ global.ethQuery = tempEthQuery
+ })
+
+ it('should call ethQuery.estimateGas and resolve that call\'s data', async () => {
+ const result = await estimateGas({ mockParam: 'someData' })
+ assert.equal(global.ethQuery.estimateGas.callCount, 1)
+ assert.deepEqual(
+ result,
+ { mockParam: 'someData', estimateGasCalled: true }
+ )
+ })
+
+ it('should reject with ethQuery.estimateGas error', async () => {
+ try {
+ await estimateGas({ mockParam: 'someData', isMockErr: true })
+ } catch (err) {
+ assert.equal(err, 'mockErr')
+ }
+ })
+ })
+
+ describe('estimateGasPriceFromRecentBlocks', () => {
+ const ONE_GWEI_IN_WEI_HEX_PLUS_ONE = addCurrencies(ONE_GWEI_IN_WEI_HEX, '0x1', {
+ aBase: 16,
+ bBase: 16,
+ toNumericBase: 'hex',
+ })
+ const ONE_GWEI_IN_WEI_HEX_PLUS_TWO = addCurrencies(ONE_GWEI_IN_WEI_HEX, '0x2', {
+ aBase: 16,
+ bBase: 16,
+ toNumericBase: 'hex',
+ })
+ const ONE_GWEI_IN_WEI_HEX_MINUS_ONE = subtractCurrencies(ONE_GWEI_IN_WEI_HEX, '0x1', {
+ aBase: 16,
+ bBase: 16,
+ toNumericBase: 'hex',
+ })
+
+ it(`should return ${ONE_GWEI_IN_WEI_HEX} if recentBlocks is falsy`, () => {
+ assert.equal(estimateGasPriceFromRecentBlocks(), ONE_GWEI_IN_WEI_HEX)
+ })
+
+ it(`should return ${ONE_GWEI_IN_WEI_HEX} if recentBlocks is empty`, () => {
+ assert.equal(estimateGasPriceFromRecentBlocks([]), ONE_GWEI_IN_WEI_HEX)
+ })
+
+ it(`should estimate a block's gasPrice as ${ONE_GWEI_IN_WEI_HEX} if it has no gas prices`, () => {
+ const mockRecentBlocks = [
+ { gasPrices: null },
+ { gasPrices: [ ONE_GWEI_IN_WEI_HEX_PLUS_ONE ] },
+ { gasPrices: [ ONE_GWEI_IN_WEI_HEX_MINUS_ONE ] },
+ ]
+ assert.equal(estimateGasPriceFromRecentBlocks(mockRecentBlocks), ONE_GWEI_IN_WEI_HEX)
+ })
+
+ it(`should estimate a block's gasPrice as ${ONE_GWEI_IN_WEI_HEX} if it has empty gas prices`, () => {
+ const mockRecentBlocks = [
+ { gasPrices: [] },
+ { gasPrices: [ ONE_GWEI_IN_WEI_HEX_PLUS_ONE ] },
+ { gasPrices: [ ONE_GWEI_IN_WEI_HEX_MINUS_ONE ] },
+ ]
+ assert.equal(estimateGasPriceFromRecentBlocks(mockRecentBlocks), ONE_GWEI_IN_WEI_HEX)
+ })
+
+ it(`should return the middle value of all blocks lowest prices`, () => {
+ const mockRecentBlocks = [
+ { gasPrices: [ ONE_GWEI_IN_WEI_HEX_PLUS_TWO ] },
+ { gasPrices: [ ONE_GWEI_IN_WEI_HEX_MINUS_ONE ] },
+ { gasPrices: [ ONE_GWEI_IN_WEI_HEX_PLUS_ONE ] },
+ ]
+ assert.equal(estimateGasPriceFromRecentBlocks(mockRecentBlocks), ONE_GWEI_IN_WEI_HEX_PLUS_ONE)
+ })
+
+ it(`should work if a block has multiple gas prices`, () => {
+ const mockRecentBlocks = [
+ { gasPrices: [ '0x1', '0x2', '0x3', '0x4', '0x5' ] },
+ { gasPrices: [ '0x101', '0x100', '0x103', '0x104', '0x102' ] },
+ { gasPrices: [ '0x150', '0x50', '0x100', '0x200', '0x5' ] },
+ ]
+ assert.equal(estimateGasPriceFromRecentBlocks(mockRecentBlocks), '0x5')
+ })
+ })
})