1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

Improve data management and tests for gas-modal-page-container price estimates.

This commit is contained in:
Dan Miller 2018-10-24 01:52:22 -02:30
parent d0619b024f
commit d14af8346a
4 changed files with 68 additions and 21 deletions

View File

@ -24,13 +24,16 @@ import {
getSelectedToken,
} from '../../../selectors.js'
import {
getCustomGasPrice,
getCustomGasLimit,
getRenderableBasicEstimateData,
getBasicGasEstimateLoadingStatus,
getAveragePriceEstimateInHexWEI,
getDefaultActiveButtonIndex,
formatTimeEstimate,
getAveragePriceEstimateInHexWEI,
getBasicGasEstimateLoadingStatus,
getCustomGasLimit,
getCustomGasPrice,
getDefaultActiveButtonIndex,
getEstimatedGasPrices,
getEstimatedGasTimes,
getPriceAndTimeEstimates,
getRenderableBasicEstimateData,
} from '../../../selectors/custom-gas'
import {
formatCurrency,
@ -69,9 +72,8 @@ const mapStateToProps = state => {
const customGasPrice = calcCustomGasPrice(customModalGasPriceInHex)
const priceAndTimeEstimates = state.gas.priceAndTimeEstimates
const gasPrices = priceAndTimeEstimates.map(({ gasprice }) => gasprice)
const estimatedTimes = priceAndTimeEstimates.map(({ expectedTime }) => expectedTime)
const gasPrices = getEstimatedGasPrices(state)
const estimatedTimes = getEstimatedGasTimes(state)
return {
hideBasic,
@ -81,7 +83,7 @@ const mapStateToProps = state => {
customGasPrice,
customGasLimit: calcCustomGasLimit(customModalGasLimitInHex),
newTotalFiat,
currentTimeEstimate: getRenderableTimeEstimate(customGasPrice, priceAndTimeEstimates),
currentTimeEstimate: getRenderableTimeEstimate(customGasPrice, getPriceAndTimeEstimates(state)),
gasPriceButtonGroupProps: {
buttonDataLoading,
defaultActiveButtonIndex: getDefaultActiveButtonIndex(gasButtonInfo, customModalGasPriceInHex),

View File

@ -104,12 +104,10 @@ describe('gas-modal-page-container container', () => {
customModalGasPriceInHex: 'ffffffff',
gasChartProps: {
'currentPrice': 4.294967295,
priceAndTimeEstimates: [
{ gasprice: 3, expectedTime: '31' },
{ gasprice: 4, expectedTime: '62' },
{ gasprice: 5, expectedTime: '93' },
{ gasprice: 6, expectedTime: '124' },
],
estimatedTimes: ['31', '62', '93', '124'],
estimatedTimesMax: '31',
gasPrices: [3, 4, 5, 6],
gasPricesMax: 7,
},
gasPriceButtonGroupProps: {
buttonDataLoading: 'mockBasicGasEstimateLoadingStatus:4',

View File

@ -21,17 +21,20 @@ import {
import { addHexPrefix } from 'ethereumjs-util'
const selectors = {
formatTimeEstimate,
getAveragePriceEstimateInHexWEI,
getBasicGasEstimateLoadingStatus,
getCustomGasErrors,
getCustomGasLimit,
getCustomGasPrice,
getCustomGasTotal,
getRenderableEstimateDataForSmallButtons,
getRenderableBasicEstimateData,
getBasicGasEstimateLoadingStatus,
getAveragePriceEstimateInHexWEI,
getDefaultActiveButtonIndex,
getEstimatedGasPrices,
getEstimatedGasTimes,
getPriceAndTimeEstimates,
getRenderableBasicEstimateData,
getRenderableEstimateDataForSmallButtons,
priceEstimateToWei,
formatTimeEstimate,
}
module.exports = selectors
@ -58,6 +61,18 @@ function getBasicGasEstimateLoadingStatus (state) {
return state.gas.basicEstimateIsLoading
}
function getPriceAndTimeEstimates (state) {
return state.gas.priceAndTimeEstimates
}
function getEstimatedGasPrices (state) {
return getPriceAndTimeEstimates(state).map(({ gasprice }) => gasprice)
}
function getEstimatedGasTimes (state) {
return getPriceAndTimeEstimates(state).map(({ expectedTime }) => expectedTime)
}
function getAveragePriceEstimateInHexWEI (state) {
const averagePriceEstimate = state.gas.basicEstimates.average
return getGasPriceInHexWei(averagePriceEstimate || '0x0')

View File

@ -6,6 +6,9 @@ const {
getCustomGasLimit,
getCustomGasPrice,
getCustomGasTotal,
getEstimatedGasPrices,
getEstimatedGasTimes,
getPriceAndTimeEstimates,
getRenderableBasicEstimateData,
getRenderableEstimateDataForSmallButtons,
} = proxyquire('../custom-gas', {})
@ -40,6 +43,35 @@ describe('custom-gas selectors', () => {
})
})
describe('getPriceAndTimeEstimates', () => {
it('should return price and time estimates', () => {
const mockState = { gas: { priceAndTimeEstimates: 'mockPriceAndTimeEstimates' } }
assert.equal(getPriceAndTimeEstimates(mockState), 'mockPriceAndTimeEstimates')
})
})
describe('getEstimatedGasPrices', () => {
it('should return price and time estimates', () => {
const mockState = { gas: { priceAndTimeEstimates: [
{ gasprice: 12, somethingElse: 20 },
{ gasprice: 22, expectedTime: 30 },
{ gasprice: 32, somethingElse: 40 },
] } }
assert.deepEqual(getEstimatedGasPrices(mockState), [12, 22, 32])
})
})
describe('getEstimatedGasTimes', () => {
it('should return price and time estimates', () => {
const mockState = { gas: { priceAndTimeEstimates: [
{ somethingElse: 12, expectedTime: 20 },
{ gasPrice: 22, expectedTime: 30 },
{ somethingElse: 32, expectedTime: 40 },
] } }
assert.deepEqual(getEstimatedGasTimes(mockState), [20, 30, 40])
})
})
describe('getRenderableBasicEstimateData()', () => {
const tests = [
{