mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
115 lines
3.8 KiB
JavaScript
115 lines
3.8 KiB
JavaScript
import * as reactRedux from 'react-redux';
|
|
import { renderHook } from '@testing-library/react-hooks';
|
|
import sinon from 'sinon';
|
|
import transactions from '../../test/data/transaction-data.json';
|
|
import { getConversionRate, getSelectedAccount } from '../selectors';
|
|
import { increaseLastGasPrice } from '../helpers/utils/confirm-tx.util';
|
|
import { useCancelTransaction } from './useCancelTransaction';
|
|
|
|
jest.mock('../store/actions', () => ({
|
|
disconnectGasFeeEstimatePoller: jest.fn(),
|
|
getGasFeeEstimatesAndStartPolling: jest
|
|
.fn()
|
|
.mockImplementation(() => Promise.resolve()),
|
|
addPollingTokenToAppState: jest.fn(),
|
|
}));
|
|
|
|
describe('useCancelTransaction', function () {
|
|
let useSelector;
|
|
const dispatch = sinon.spy();
|
|
|
|
beforeAll(function () {
|
|
sinon.stub(reactRedux, 'useDispatch').returns(dispatch);
|
|
});
|
|
|
|
afterEach(function () {
|
|
dispatch.resetHistory();
|
|
});
|
|
|
|
afterAll(function () {
|
|
sinon.restore();
|
|
});
|
|
|
|
describe('when account has insufficient balance to cover gas', function () {
|
|
beforeAll(function () {
|
|
useSelector = sinon.stub(reactRedux, 'useSelector');
|
|
useSelector.callsFake((selector) => {
|
|
if (selector === getConversionRate) {
|
|
return 280.46;
|
|
} else if (selector === getSelectedAccount) {
|
|
return {
|
|
balance: '0x3',
|
|
};
|
|
}
|
|
return undefined;
|
|
});
|
|
});
|
|
afterAll(function () {
|
|
useSelector.restore();
|
|
});
|
|
transactions.forEach((transactionGroup) => {
|
|
const originalGasPrice =
|
|
transactionGroup.primaryTransaction.txParams?.gasPrice;
|
|
const gasPrice =
|
|
originalGasPrice && increaseLastGasPrice(originalGasPrice);
|
|
const transactionId = transactionGroup.initialTransaction.id;
|
|
it(`should indicate account has insufficient funds to cover ${gasPrice} gas price`, function () {
|
|
const { result } = renderHook(() =>
|
|
useCancelTransaction(transactionGroup),
|
|
);
|
|
expect(result.current.hasEnoughCancelGas).toStrictEqual(false);
|
|
});
|
|
it(`should return a function that opens the gas sidebar onsubmit kicks off cancellation for id ${transactionId}`, function () {
|
|
const { result } = renderHook(() =>
|
|
useCancelTransaction(transactionGroup),
|
|
);
|
|
expect(typeof result.current.cancelTransaction).toStrictEqual(
|
|
'function',
|
|
);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('when account has sufficient balance to cover gas', function () {
|
|
beforeAll(function () {
|
|
useSelector = sinon.stub(reactRedux, 'useSelector');
|
|
useSelector.callsFake((selector) => {
|
|
if (selector === getConversionRate) {
|
|
return 280.46;
|
|
} else if (selector === getSelectedAccount) {
|
|
return {
|
|
balance: '0x9C2007651B2500000',
|
|
};
|
|
}
|
|
return undefined;
|
|
});
|
|
});
|
|
|
|
afterAll(function () {
|
|
useSelector.restore();
|
|
});
|
|
|
|
transactions.forEach((transactionGroup) => {
|
|
const originalGasPrice =
|
|
transactionGroup.primaryTransaction.txParams?.gasPrice;
|
|
const gasPrice =
|
|
originalGasPrice && increaseLastGasPrice(originalGasPrice);
|
|
const transactionId = transactionGroup.initialTransaction.id;
|
|
it(`should indicate account has funds to cover ${gasPrice} gas price`, function () {
|
|
const { result } = renderHook(() =>
|
|
useCancelTransaction(transactionGroup),
|
|
);
|
|
expect(result.current.hasEnoughCancelGas).toStrictEqual(true);
|
|
});
|
|
it(`should return a function that opens the gas popover onsubmit kicks off cancellation for id ${transactionId}`, function () {
|
|
const { result } = renderHook(() =>
|
|
useCancelTransaction(transactionGroup),
|
|
);
|
|
expect(typeof result.current.cancelTransaction).toStrictEqual(
|
|
'function',
|
|
);
|
|
});
|
|
});
|
|
});
|
|
});
|