A Metamask fork with Infura removed and default networks editable
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
ciphermask/ui/app/selectors/tests/custom-gas.test.js

657 lines
18 KiB

import assert from 'assert';
import proxyquire from 'proxyquire';
const {
getCustomGasLimit,
getCustomGasPrice,
getRenderableBasicEstimateData,
getRenderableEstimateDataForSmallButtonsFromGWEI,
isCustomPriceSafe,
isCustomPriceExcessive,
} = proxyquire('../custom-gas', {});
describe('custom-gas selectors', function () {
describe('getCustomGasPrice()', function () {
it('should return gas.customData.price', function () {
const mockState = { gas: { customData: { price: 'mockPrice' } } };
assert.strictEqual(getCustomGasPrice(mockState), 'mockPrice');
});
});
describe('isCustomGasPriceSafe()', function () {
it('should return true for gas.customData.price 0x77359400', function () {
const mockState = {
gas: {
customData: { price: '0x77359400' },
basicEstimates: { safeLow: 1 },
},
};
assert.strictEqual(isCustomPriceSafe(mockState), true);
});
it('should return true for gas.customData.price null', function () {
const mockState = {
gas: {
customData: { price: null },
basicEstimates: { safeLow: 1 },
},
};
assert.strictEqual(isCustomPriceSafe(mockState), true);
});
it('should return true gas.customData.price undefined', function () {
const mockState = {
gas: {
customData: { price: undefined },
basicEstimates: { safeLow: 1 },
},
};
assert.strictEqual(isCustomPriceSafe(mockState), true);
});
it('should return false gas.basicEstimates.safeLow undefined', function () {
const mockState = {
gas: {
customData: { price: '0x77359400' },
basicEstimates: { safeLow: undefined },
},
};
assert.strictEqual(isCustomPriceSafe(mockState), false);
});
});
describe('isCustomPriceExcessive()', function () {
it('should return false for gas.customData.price null', function () {
const mockState = {
gas: {
customData: { price: null },
basicEstimates: { fast: 150 },
},
};
assert.strictEqual(isCustomPriceExcessive(mockState), false);
});
it('should return false gas.basicEstimates.fast undefined', function () {
const mockState = {
gas: {
customData: { price: '0x77359400' },
basicEstimates: { fast: undefined },
},
};
assert.strictEqual(isCustomPriceExcessive(mockState), false);
});
it('should return false gas.basicEstimates.price 0x205d0bae00 (139)', function () {
const mockState = {
gas: {
customData: { price: '0x205d0bae00' },
basicEstimates: { fast: 139 },
},
};
assert.strictEqual(isCustomPriceExcessive(mockState), false);
});
it('should return false gas.basicEstimates.price 0x1bf08eb000 (120)', function () {
const mockState = {
gas: {
customData: { price: '0x1bf08eb000' },
basicEstimates: { fast: 139 },
},
};
assert.strictEqual(isCustomPriceExcessive(mockState), false);
});
it('should return false gas.basicEstimates.price 0x28bed01600 (175)', function () {
const mockState = {
gas: {
customData: { price: '0x28bed01600' },
basicEstimates: { fast: 139 },
},
};
assert.strictEqual(isCustomPriceExcessive(mockState), false);
});
it('should return true gas.basicEstimates.price 0x30e4f9b400 (210)', function () {
const mockState = {
gas: {
customData: { price: '0x30e4f9b400' },
basicEstimates: { fast: 139 },
},
};
assert.strictEqual(isCustomPriceExcessive(mockState), true);
});
it('should return false gas.basicEstimates.price 0x28bed01600 (175) (checkSend=true)', function () {
const mockState = {
metamask: {
send: {
gasPrice: '0x28bed0160',
},
},
gas: {
customData: { price: null },
basicEstimates: { fast: 139 },
},
};
assert.strictEqual(isCustomPriceExcessive(mockState, true), false);
});
it('should return true gas.basicEstimates.price 0x30e4f9b400 (210) (checkSend=true)', function () {
const mockState = {
metamask: {
send: {
gasPrice: '0x30e4f9b400',
},
},
gas: {
customData: { price: null },
basicEstimates: { fast: 139 },
},
};
assert.strictEqual(isCustomPriceExcessive(mockState, true), true);
});
});
describe('getCustomGasLimit()', function () {
it('should return gas.customData.limit', function () {
const mockState = { gas: { customData: { limit: 'mockLimit' } } };
assert.strictEqual(getCustomGasLimit(mockState), 'mockLimit');
});
});
describe('getRenderableBasicEstimateData()', function () {
const tests = [
{
expectedResult: [
{
gasEstimateType: 'SLOW',
feeInSecondaryCurrency: '$0.01',
feeInPrimaryCurrency: '0.0000525 ETH',
priceInHexWei: '0x9502f900',
},
{
gasEstimateType: 'AVERAGE',
feeInPrimaryCurrency: '0.000084 ETH',
feeInSecondaryCurrency: '$0.02',
priceInHexWei: '0xee6b2800',
},
{
gasEstimateType: 'FAST',
feeInSecondaryCurrency: '$0.03',
feeInPrimaryCurrency: '0.000105 ETH',
priceInHexWei: '0x12a05f200',
},
],
mockState: {
metamask: {
conversionRate: 255.71,
currentCurrency: 'usd',
preferences: {
showFiatInTestnets: false,
},
provider: {
type: 'mainnet',
chainId: '0x1',
},
},
gas: {
basicEstimates: {
blockTime: 14.16326530612245,
safeLow: 2.5,
safeLowWait: 6.6,
average: 4,
avgWait: 5.3,
fast: 5,
fastWait: 3.3,
fastest: 10,
fastestWait: 0.5,
},
},
},
},
{
expectedResult: [
{
gasEstimateType: 'SLOW',
feeInSecondaryCurrency: '$0.27',
feeInPrimaryCurrency: '0.000105 ETH',
priceInHexWei: '0x12a05f200',
},
{
feeInPrimaryCurrency: '0.000147 ETH',
feeInSecondaryCurrency: '$0.38',
gasEstimateType: 'AVERAGE',
priceInHexWei: '0x1a13b8600',
},
{
gasEstimateType: 'FAST',
feeInSecondaryCurrency: '$0.54',
feeInPrimaryCurrency: '0.00021 ETH',
priceInHexWei: '0x2540be400',
},
],
mockState: {
metamask: {
conversionRate: 2557.1,
currentCurrency: 'usd',
send: {
gasLimit: '0x5208',
},
preferences: {
showFiatInTestnets: false,
},
provider: {
type: 'mainnet',
chainId: '0x1',
},
},
gas: {
basicEstimates: {
blockTime: 14.16326530612245,
safeLow: 5,
safeLowWait: 13.2,
average: 7,
avgWait: 10.1,
fast: 10,
fastWait: 6.6,
fastest: 20,
fastestWait: 1.0,
},
},
},
},
{
expectedResult: [
{
gasEstimateType: 'SLOW',
feeInSecondaryCurrency: '',
feeInPrimaryCurrency: '0.000105 ETH',
priceInHexWei: '0x12a05f200',
},
{
gasEstimateType: 'AVERAGE',
feeInPrimaryCurrency: '0.000147 ETH',
feeInSecondaryCurrency: '',
priceInHexWei: '0x1a13b8600',
},
{
gasEstimateType: 'FAST',
feeInSecondaryCurrency: '',
feeInPrimaryCurrency: '0.00021 ETH',
priceInHexWei: '0x2540be400',
},
],
mockState: {
metamask: {
conversionRate: 2557.1,
currentCurrency: 'usd',
send: {
gasLimit: '0x5208',
},
preferences: {
showFiatInTestnets: false,
},
provider: {
type: 'rinkeby',
chainId: '0x4',
},
},
gas: {
basicEstimates: {
blockTime: 14.16326530612245,
safeLow: 5,
safeLowWait: 13.2,
average: 7,
avgWait: 10.1,
fast: 10,
fastWait: 6.6,
fastest: 20,
fastestWait: 1.0,
},
},
},
},
{
expectedResult: [
{
gasEstimateType: 'SLOW',
feeInSecondaryCurrency: '$0.27',
feeInPrimaryCurrency: '0.000105 ETH',
priceInHexWei: '0x12a05f200',
},
{
gasEstimateType: 'AVERAGE',
feeInPrimaryCurrency: '0.000147 ETH',
feeInSecondaryCurrency: '$0.38',
priceInHexWei: '0x1a13b8600',
},
{
gasEstimateType: 'FAST',
feeInSecondaryCurrency: '$0.54',
feeInPrimaryCurrency: '0.00021 ETH',
priceInHexWei: '0x2540be400',
},
],
mockState: {
metamask: {
conversionRate: 2557.1,
currentCurrency: 'usd',
send: {
gasLimit: '0x5208',
},
preferences: {
showFiatInTestnets: true,
},
provider: {
type: 'rinkeby',
chainId: '0x4',
},
},
gas: {
basicEstimates: {
safeLow: 5,
average: 7,
fast: 10,
},
},
},
},
{
expectedResult: [
{
gasEstimateType: 'SLOW',
feeInSecondaryCurrency: '$0.27',
feeInPrimaryCurrency: '0.000105 ETH',
priceInHexWei: '0x12a05f200',
},
{
gasEstimateType: 'AVERAGE',
feeInPrimaryCurrency: '0.000147 ETH',
feeInSecondaryCurrency: '$0.38',
priceInHexWei: '0x1a13b8600',
},
{
gasEstimateType: 'FAST',
feeInSecondaryCurrency: '$0.54',
feeInPrimaryCurrency: '0.00021 ETH',
priceInHexWei: '0x2540be400',
},
],
mockState: {
metamask: {
conversionRate: 2557.1,
currentCurrency: 'usd',
send: {
gasLimit: '0x5208',
},
preferences: {
showFiatInTestnets: true,
},
provider: {
type: 'mainnet',
chainId: '0x1',
},
},
gas: {
basicEstimates: {
safeLow: 5,
average: 7,
fast: 10,
},
},
},
},
];
it('should return renderable data about basic estimates', function () {
tests.forEach((test) => {
assert.deepStrictEqual(
getRenderableBasicEstimateData(
test.mockState,
'0x5208',
test.useFastestButtons,
),
test.expectedResult,
);
});
});
});
describe('getRenderableEstimateDataForSmallButtonsFromGWEI()', function () {
const tests = [
{
expectedResult: [
{
feeInSecondaryCurrency: '$0.13',
feeInPrimaryCurrency: '0.00052 ETH',
gasEstimateType: 'SLOW',
priceInHexWei: '0x5d21dba00',
},
{
feeInSecondaryCurrency: '$0.16',
feeInPrimaryCurrency: '0.00063 ETH',
gasEstimateType: 'AVERAGE',
priceInHexWei: '0x6fc23ac00',
},
{
feeInSecondaryCurrency: '$0.27',
feeInPrimaryCurrency: '0.00105 ETH',
gasEstimateType: 'FAST',
priceInHexWei: '0xba43b7400',
},
],
mockState: {
metamask: {
conversionRate: 255.71,
currentCurrency: 'usd',
send: {
gasLimit: '0x5208',
},
preferences: {
showFiatInTestnets: false,
},
provider: {
type: 'mainnet',
chainId: '0x1',
},
},
gas: {
basicEstimates: {
safeLow: 25,
average: 30,
fast: 50,
},
},
},
},
{
expectedResult: [
{
feeInSecondaryCurrency: '$2.68',
feeInPrimaryCurrency: '0.00105 ETH',
gasEstimateType: 'SLOW',
priceInHexWei: '0xba43b7400',
},
{
feeInSecondaryCurrency: '$4.03',
feeInPrimaryCurrency: '0.00157 ETH',
gasEstimateType: 'AVERAGE',
priceInHexWei: '0x1176592e00',
},
{
feeInSecondaryCurrency: '$5.37',
feeInPrimaryCurrency: '0.0021 ETH',
gasEstimateType: 'FAST',
priceInHexWei: '0x174876e800',
},
],
mockState: {
metamask: {
conversionRate: 2557.1,
currentCurrency: 'usd',
send: {
gasLimit: '0x5208',
},
preferences: {
showFiatInTestnets: false,
},
provider: {
type: 'mainnet',
chainId: '0x1',
},
},
gas: {
basicEstimates: {
blockTime: 14.16326530612245,
safeLow: 50,
safeLowWait: 13.2,
average: 75,
avgWait: 9.6,
fast: 100,
fastWait: 6.6,
fastest: 200,
fastestWait: 1.0,
},
},
},
},
{
expectedResult: [
{
feeInSecondaryCurrency: '',
feeInPrimaryCurrency: '0.00105 ETH',
gasEstimateType: 'SLOW',
priceInHexWei: '0xba43b7400',
},
{
feeInSecondaryCurrency: '',
feeInPrimaryCurrency: '0.00157 ETH',
gasEstimateType: 'AVERAGE',
priceInHexWei: '0x1176592e00',
},
{
feeInSecondaryCurrency: '',
feeInPrimaryCurrency: '0.0021 ETH',
gasEstimateType: 'FAST',
priceInHexWei: '0x174876e800',
},
],
mockState: {
metamask: {
conversionRate: 2557.1,
currentCurrency: 'usd',
send: {
gasLimit: '0x5208',
},
preferences: {
showFiatInTestnets: false,
},
provider: {
type: 'rinkeby',
chainId: '0x4',
},
},
gas: {
basicEstimates: {
blockTime: 14.16326530612245,
safeLow: 50,
safeLowWait: 13.2,
average: 75,
avgWait: 9.6,
fast: 100,
fastWait: 6.6,
fastest: 200,
fastestWait: 1.0,
},
},
},
},
{
expectedResult: [
{
feeInSecondaryCurrency: '$2.68',
feeInPrimaryCurrency: '0.00105 ETH',
gasEstimateType: 'SLOW',
priceInHexWei: '0xba43b7400',
},
{
feeInSecondaryCurrency: '$4.03',
feeInPrimaryCurrency: '0.00157 ETH',
gasEstimateType: 'AVERAGE',
priceInHexWei: '0x1176592e00',
},
{
feeInSecondaryCurrency: '$5.37',
feeInPrimaryCurrency: '0.0021 ETH',
gasEstimateType: 'FAST',
priceInHexWei: '0x174876e800',
},
],
mockState: {
metamask: {
conversionRate: 2557.1,
currentCurrency: 'usd',
send: {
gasLimit: '0x5208',
},
preferences: {
showFiatInTestnets: true,
},
provider: {
type: 'rinkeby',
chainId: '0x4',
},
},
gas: {
basicEstimates: {
safeLow: 50,
average: 75,
fast: 100,
},
},
},
},
{
expectedResult: [
{
feeInSecondaryCurrency: '$2.68',
feeInPrimaryCurrency: '0.00105 ETH',
gasEstimateType: 'SLOW',
priceInHexWei: '0xba43b7400',
},
{
feeInSecondaryCurrency: '$4.03',
feeInPrimaryCurrency: '0.00157 ETH',
gasEstimateType: 'AVERAGE',
priceInHexWei: '0x1176592e00',
},
{
feeInSecondaryCurrency: '$5.37',
feeInPrimaryCurrency: '0.0021 ETH',
gasEstimateType: 'FAST',
priceInHexWei: '0x174876e800',
},
],
mockState: {
metamask: {
conversionRate: 2557.1,
currentCurrency: 'usd',
send: {
gasLimit: '0x5208',
},
preferences: {
showFiatInTestnets: true,
},
provider: {
type: 'mainnet',
chainId: '0x1',
},
},
gas: {
basicEstimates: {
safeLow: 50,
average: 75,
fast: 100,
},
},
},
},
];
it('should return renderable data about basic estimates appropriate for buttons with less info', function () {
tests.forEach((test) => {
assert.deepStrictEqual(
getRenderableEstimateDataForSmallButtonsFromGWEI(test.mockState),
test.expectedResult,
);
});
});
});
});