mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
653 lines
18 KiB
JavaScript
653 lines
18 KiB
JavaScript
import {
|
|
getCustomGasLimit,
|
|
getCustomGasPrice,
|
|
getRenderableBasicEstimateData,
|
|
getRenderableEstimateDataForSmallButtonsFromGWEI,
|
|
isCustomPriceSafe,
|
|
isCustomPriceExcessive,
|
|
} from './custom-gas';
|
|
|
|
describe('custom-gas selectors', () => {
|
|
describe('getCustomGasPrice()', () => {
|
|
it('should return gas.customData.price', () => {
|
|
const mockState = { gas: { customData: { price: 'mockPrice' } } };
|
|
expect(getCustomGasPrice(mockState)).toStrictEqual('mockPrice');
|
|
});
|
|
});
|
|
describe('isCustomGasPriceSafe()', () => {
|
|
it('should return true for gas.customData.price 0x77359400', () => {
|
|
const mockState = {
|
|
gas: {
|
|
customData: { price: '0x77359400' },
|
|
basicEstimates: { safeLow: 1 },
|
|
},
|
|
};
|
|
expect(isCustomPriceSafe(mockState)).toStrictEqual(true);
|
|
});
|
|
it('should return true for gas.customData.price null', () => {
|
|
const mockState = {
|
|
gas: {
|
|
customData: { price: null },
|
|
basicEstimates: { safeLow: 1 },
|
|
},
|
|
};
|
|
expect(isCustomPriceSafe(mockState)).toStrictEqual(true);
|
|
});
|
|
it('should return true gas.customData.price undefined', () => {
|
|
const mockState = {
|
|
gas: {
|
|
customData: { price: undefined },
|
|
basicEstimates: { safeLow: 1 },
|
|
},
|
|
};
|
|
expect(isCustomPriceSafe(mockState)).toStrictEqual(true);
|
|
});
|
|
it('should return false gas.basicEstimates.safeLow undefined', () => {
|
|
const mockState = {
|
|
gas: {
|
|
customData: { price: '0x77359400' },
|
|
basicEstimates: { safeLow: undefined },
|
|
},
|
|
};
|
|
expect(isCustomPriceSafe(mockState)).toStrictEqual(false);
|
|
});
|
|
});
|
|
|
|
describe('isCustomPriceExcessive()', () => {
|
|
it('should return false for gas.customData.price null', () => {
|
|
const mockState = {
|
|
gas: {
|
|
customData: { price: null },
|
|
basicEstimates: { fast: 150 },
|
|
},
|
|
};
|
|
expect(isCustomPriceExcessive(mockState)).toStrictEqual(false);
|
|
});
|
|
it('should return false gas.basicEstimates.fast undefined', () => {
|
|
const mockState = {
|
|
gas: {
|
|
customData: { price: '0x77359400' },
|
|
basicEstimates: { fast: undefined },
|
|
},
|
|
};
|
|
expect(isCustomPriceExcessive(mockState)).toStrictEqual(false);
|
|
});
|
|
it('should return false gas.basicEstimates.price 0x205d0bae00 (139)', () => {
|
|
const mockState = {
|
|
gas: {
|
|
customData: { price: '0x205d0bae00' },
|
|
basicEstimates: { fast: 139 },
|
|
},
|
|
};
|
|
expect(isCustomPriceExcessive(mockState)).toStrictEqual(false);
|
|
});
|
|
it('should return false gas.basicEstimates.price 0x1bf08eb000 (120)', () => {
|
|
const mockState = {
|
|
gas: {
|
|
customData: { price: '0x1bf08eb000' },
|
|
basicEstimates: { fast: 139 },
|
|
},
|
|
};
|
|
expect(isCustomPriceExcessive(mockState)).toStrictEqual(false);
|
|
});
|
|
it('should return false gas.basicEstimates.price 0x28bed01600 (175)', () => {
|
|
const mockState = {
|
|
gas: {
|
|
customData: { price: '0x28bed01600' },
|
|
basicEstimates: { fast: 139 },
|
|
},
|
|
};
|
|
expect(isCustomPriceExcessive(mockState)).toStrictEqual(false);
|
|
});
|
|
it('should return true gas.basicEstimates.price 0x30e4f9b400 (210)', () => {
|
|
const mockState = {
|
|
gas: {
|
|
customData: { price: '0x30e4f9b400' },
|
|
basicEstimates: { fast: 139 },
|
|
},
|
|
};
|
|
expect(isCustomPriceExcessive(mockState)).toStrictEqual(true);
|
|
});
|
|
it('should return false gas.basicEstimates.price 0x28bed01600 (175) (checkSend=true)', () => {
|
|
const mockState = {
|
|
metamask: {
|
|
send: {
|
|
gasPrice: '0x28bed0160',
|
|
},
|
|
},
|
|
gas: {
|
|
customData: { price: null },
|
|
basicEstimates: { fast: 139 },
|
|
},
|
|
};
|
|
expect(isCustomPriceExcessive(mockState, true)).toStrictEqual(false);
|
|
});
|
|
it('should return true gas.basicEstimates.price 0x30e4f9b400 (210) (checkSend=true)', () => {
|
|
const mockState = {
|
|
metamask: {
|
|
send: {
|
|
gasPrice: '0x30e4f9b400',
|
|
},
|
|
},
|
|
gas: {
|
|
customData: { price: null },
|
|
basicEstimates: { fast: 139 },
|
|
},
|
|
};
|
|
expect(isCustomPriceExcessive(mockState, true)).toStrictEqual(true);
|
|
});
|
|
});
|
|
|
|
describe('getCustomGasLimit()', () => {
|
|
it('should return gas.customData.limit', () => {
|
|
const mockState = { gas: { customData: { limit: 'mockLimit' } } };
|
|
expect(getCustomGasLimit(mockState)).toStrictEqual('mockLimit');
|
|
});
|
|
});
|
|
|
|
describe('getRenderableBasicEstimateData()', () => {
|
|
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', () => {
|
|
tests.forEach((test) => {
|
|
expect(
|
|
getRenderableBasicEstimateData(
|
|
test.mockState,
|
|
'0x5208',
|
|
test.useFastestButtons,
|
|
),
|
|
).toStrictEqual(test.expectedResult);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('getRenderableEstimateDataForSmallButtonsFromGWEI()', () => {
|
|
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', () => {
|
|
tests.forEach((test) => {
|
|
expect(
|
|
getRenderableEstimateDataForSmallButtonsFromGWEI(test.mockState),
|
|
).toStrictEqual(test.expectedResult);
|
|
});
|
|
});
|
|
});
|
|
});
|