Refactor tests for AdvancedGasInputs (#12445)
* Upgrade style from Enzyme to React Testing Library * Use real i18n provider instead of a fake one so that we can look for English text instead of just i18n strings, improving readabilityfeature/default_network_editable
parent
a41e3b1925
commit
ca3aa7b08d
@ -1,122 +0,0 @@ |
|||||||
import React from 'react'; |
|
||||||
import sinon from 'sinon'; |
|
||||||
import { mount } from 'enzyme'; |
|
||||||
import AdvancedTabContent from './advanced-gas-inputs.container'; |
|
||||||
|
|
||||||
describe('Advanced Gas Inputs', () => { |
|
||||||
let wrapper, clock; |
|
||||||
|
|
||||||
const props = { |
|
||||||
updateCustomGasPrice: sinon.spy(), |
|
||||||
updateCustomGasLimit: sinon.spy(), |
|
||||||
showGasPriceInfoModal: sinon.spy(), |
|
||||||
showGasLimitInfoModal: sinon.spy(), |
|
||||||
customGasPrice: 0, |
|
||||||
customGasLimit: 0, |
|
||||||
insufficientBalance: false, |
|
||||||
customPriceIsSafe: true, |
|
||||||
isSpeedUp: false, |
|
||||||
minimumGasLimit: 21000, |
|
||||||
}; |
|
||||||
|
|
||||||
beforeEach(() => { |
|
||||||
clock = sinon.useFakeTimers(); |
|
||||||
|
|
||||||
wrapper = mount(<AdvancedTabContent.WrappedComponent {...props} />, { |
|
||||||
context: { |
|
||||||
t: (str) => str, |
|
||||||
}, |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
afterEach(() => { |
|
||||||
clock.restore(); |
|
||||||
}); |
|
||||||
|
|
||||||
it('wont update gasPrice in props before debounce', () => { |
|
||||||
const event = { target: { value: 1 } }; |
|
||||||
|
|
||||||
wrapper.find('input').at(0).simulate('change', event); |
|
||||||
clock.tick(499); |
|
||||||
|
|
||||||
expect(props.updateCustomGasPrice.callCount).toStrictEqual(0); |
|
||||||
}); |
|
||||||
|
|
||||||
it('simulates onChange on gas price after debounce', () => { |
|
||||||
const event = { target: { value: 1 } }; |
|
||||||
|
|
||||||
wrapper.find('input').at(0).simulate('change', event); |
|
||||||
clock.tick(500); |
|
||||||
|
|
||||||
expect(props.updateCustomGasPrice.calledOnce).toStrictEqual(true); |
|
||||||
expect(props.updateCustomGasPrice.calledWith(1)).toStrictEqual(true); |
|
||||||
}); |
|
||||||
|
|
||||||
it('wont update gasLimit in props before debounce', () => { |
|
||||||
const event = { target: { value: 21000 } }; |
|
||||||
|
|
||||||
wrapper.find('input').at(1).simulate('change', event); |
|
||||||
clock.tick(499); |
|
||||||
|
|
||||||
expect(props.updateCustomGasLimit.callCount).toStrictEqual(0); |
|
||||||
}); |
|
||||||
|
|
||||||
it('simulates onChange on gas limit after debounce', () => { |
|
||||||
const event = { target: { value: 21000 } }; |
|
||||||
|
|
||||||
wrapper.find('input').at(1).simulate('change', event); |
|
||||||
clock.tick(500); |
|
||||||
|
|
||||||
expect(props.updateCustomGasLimit.calledOnce).toStrictEqual(true); |
|
||||||
expect(props.updateCustomGasLimit.calledWith(21000)).toStrictEqual(true); |
|
||||||
}); |
|
||||||
|
|
||||||
it('errors when insufficientBalance under gas price and gas limit', () => { |
|
||||||
wrapper.setProps({ insufficientBalance: true }); |
|
||||||
const renderError = wrapper.find( |
|
||||||
'.advanced-gas-inputs__gas-edit-row__error-text', |
|
||||||
); |
|
||||||
expect(renderError).toHaveLength(2); |
|
||||||
|
|
||||||
expect(renderError.at(0).text()).toStrictEqual('insufficientBalance'); |
|
||||||
expect(renderError.at(1).text()).toStrictEqual('insufficientBalance'); |
|
||||||
}); |
|
||||||
|
|
||||||
it('errors zero gas price / speed up', () => { |
|
||||||
wrapper.setProps({ isSpeedUp: true }); |
|
||||||
|
|
||||||
const renderError = wrapper.find( |
|
||||||
'.advanced-gas-inputs__gas-edit-row__error-text', |
|
||||||
); |
|
||||||
expect(renderError).toHaveLength(2); |
|
||||||
|
|
||||||
expect(renderError.at(0).text()).toStrictEqual( |
|
||||||
'zeroGasPriceOnSpeedUpError', |
|
||||||
); |
|
||||||
expect(renderError.at(1).text()).toStrictEqual( |
|
||||||
'gasLimitTooLowWithDynamicFee', |
|
||||||
); |
|
||||||
}); |
|
||||||
|
|
||||||
it('warns when custom gas price is too low', () => { |
|
||||||
wrapper.setProps({ customPriceIsSafe: false }); |
|
||||||
|
|
||||||
const renderWarning = wrapper.find( |
|
||||||
'.advanced-gas-inputs__gas-edit-row__warning-text', |
|
||||||
); |
|
||||||
expect(renderWarning).toHaveLength(1); |
|
||||||
|
|
||||||
expect(renderWarning.text()).toStrictEqual('gasPriceExtremelyLow'); |
|
||||||
}); |
|
||||||
|
|
||||||
it('errors when custom gas price is too excessive', () => { |
|
||||||
wrapper.setProps({ customPriceIsExcessive: true }); |
|
||||||
|
|
||||||
const renderError = wrapper.find( |
|
||||||
'.advanced-gas-inputs__gas-edit-row__error-text', |
|
||||||
); |
|
||||||
|
|
||||||
expect(renderError).toHaveLength(2); |
|
||||||
expect(renderError.at(0).text()).toStrictEqual('gasPriceExcessiveInput'); |
|
||||||
}); |
|
||||||
}); |
|
@ -0,0 +1,119 @@ |
|||||||
|
import React from 'react'; |
||||||
|
import sinon from 'sinon'; |
||||||
|
import { renderWithProvider, fireEvent } from '../../../../../test/jest'; |
||||||
|
import configureStore from '../../../../store/store'; |
||||||
|
import AdvancedGasInputs from '.'; |
||||||
|
|
||||||
|
describe('AdvancedGasInputs', () => { |
||||||
|
let clock; |
||||||
|
|
||||||
|
const props = { |
||||||
|
updateCustomGasPrice: jest.fn(), |
||||||
|
updateCustomGasLimit: jest.fn(), |
||||||
|
showGasPriceInfoModal: jest.fn(), |
||||||
|
showGasLimitInfoModal: jest.fn(), |
||||||
|
customGasPrice: 0, |
||||||
|
customGasLimit: 0, |
||||||
|
insufficientBalance: false, |
||||||
|
customPriceIsSafe: true, |
||||||
|
isSpeedUp: false, |
||||||
|
minimumGasLimit: 21000, |
||||||
|
}; |
||||||
|
|
||||||
|
const store = configureStore({}); |
||||||
|
|
||||||
|
beforeEach(() => { |
||||||
|
clock = sinon.useFakeTimers(); |
||||||
|
}); |
||||||
|
|
||||||
|
afterEach(() => { |
||||||
|
clock.restore(); |
||||||
|
}); |
||||||
|
|
||||||
|
it("won't update gasPrice in props before debounce", () => { |
||||||
|
const { getByTestId } = renderWithProvider( |
||||||
|
<AdvancedGasInputs {...props} />, |
||||||
|
store, |
||||||
|
); |
||||||
|
|
||||||
|
fireEvent.change(getByTestId('gas-price'), { target: { value: '10' } }); |
||||||
|
clock.tick(499); |
||||||
|
|
||||||
|
expect(props.updateCustomGasPrice).toHaveBeenCalledTimes(0); |
||||||
|
}); |
||||||
|
|
||||||
|
it('simulates onChange on gas price after debounce', () => { |
||||||
|
const { getByTestId } = renderWithProvider( |
||||||
|
<AdvancedGasInputs {...props} />, |
||||||
|
store, |
||||||
|
); |
||||||
|
|
||||||
|
fireEvent.change(getByTestId('gas-price'), { target: { value: '10' } }); |
||||||
|
clock.tick(500); |
||||||
|
|
||||||
|
expect(props.updateCustomGasPrice).toHaveBeenCalledTimes(1); |
||||||
|
expect(props.updateCustomGasPrice).toHaveBeenCalledWith('2540be400'); |
||||||
|
}); |
||||||
|
|
||||||
|
it('wont update gasLimit in props before debounce', () => { |
||||||
|
const { getByTestId } = renderWithProvider( |
||||||
|
<AdvancedGasInputs {...props} />, |
||||||
|
store, |
||||||
|
); |
||||||
|
|
||||||
|
fireEvent.change(getByTestId('gas-limit'), { target: { value: '21000' } }); |
||||||
|
clock.tick(499); |
||||||
|
|
||||||
|
expect(props.updateCustomGasLimit).toHaveBeenCalledTimes(0); |
||||||
|
}); |
||||||
|
|
||||||
|
it('simulates onChange on gas limit after debounce', () => { |
||||||
|
const { getByTestId } = renderWithProvider( |
||||||
|
<AdvancedGasInputs {...props} />, |
||||||
|
store, |
||||||
|
); |
||||||
|
|
||||||
|
fireEvent.change(getByTestId('gas-limit'), { target: { value: '21000' } }); |
||||||
|
clock.tick(500); |
||||||
|
|
||||||
|
expect(props.updateCustomGasLimit).toHaveBeenCalledTimes(1); |
||||||
|
expect(props.updateCustomGasLimit).toHaveBeenCalledWith('5208'); |
||||||
|
}); |
||||||
|
|
||||||
|
it('errors when insufficientBalance under gas price and gas limit', () => { |
||||||
|
const { getAllByText } = renderWithProvider( |
||||||
|
<AdvancedGasInputs {...props} insufficientBalance />, |
||||||
|
store, |
||||||
|
); |
||||||
|
|
||||||
|
expect(getAllByText('Insufficient balance.')).toHaveLength(2); |
||||||
|
}); |
||||||
|
|
||||||
|
it('errors zero gas price / speed up', () => { |
||||||
|
const { queryByText } = renderWithProvider( |
||||||
|
<AdvancedGasInputs {...props} isSpeedUp />, |
||||||
|
store, |
||||||
|
); |
||||||
|
|
||||||
|
expect(queryByText('Zero gas price on speed up')).toBeInTheDocument(); |
||||||
|
expect(queryByText('Gas limit must be at least 21000')).toBeInTheDocument(); |
||||||
|
}); |
||||||
|
|
||||||
|
it('warns when custom gas price is too low', () => { |
||||||
|
const { queryByText } = renderWithProvider( |
||||||
|
<AdvancedGasInputs {...props} customPriceIsSafe={false} />, |
||||||
|
store, |
||||||
|
); |
||||||
|
|
||||||
|
expect(queryByText('Gas Price Extremely Low')).toBeInTheDocument(); |
||||||
|
}); |
||||||
|
|
||||||
|
it('errors when custom gas price is too excessive', () => { |
||||||
|
const { queryByText } = renderWithProvider( |
||||||
|
<AdvancedGasInputs {...props} customPriceIsExcessive />, |
||||||
|
store, |
||||||
|
); |
||||||
|
|
||||||
|
expect(queryByText('Gas Price Is Excessive')).toBeInTheDocument(); |
||||||
|
}); |
||||||
|
}); |
Loading…
Reference in new issue