Increase friction to bypass estimated revert (#12576)
* If a transaction would revert/fail, 1. hide the gas estimate info. 2. Disable the confirm button. 3. All user to enable the confirm button anyways. 4. Do not show the default Transaction error message Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Always return a value for hasSimulationError Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Use primary button of action message Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Remove hasSimulationError from getErrorKey Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Lint fixes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Move confirm anyways logic to base component. Change message Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Disable edit if there's simulation error Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * hide confirm anyways button once clicked. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Move Actionable Primary Action to flex-end Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Fix unit tests Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Fix nested ternary lint issues Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * add !confirmAnyways to conditions to show GasDetails. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * ConfirmAnyways should be read from state Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Rename tryAnywayOption Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Lint fixes Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Remove await tick Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Lint issue fix Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Lint fixes after rebase Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * description should show that it's content being tested. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * If a transaction would revert/fail, 1. hide the gas estimate info. 2. Disable the confirm button. 3. All user to enable the confirm button anyways. 4. Do not show the default Transaction error message Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Always return a value for hasSimulationError Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Use primary button of action message Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Remove hasSimulationError from getErrorKey Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Lint fixes. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Move confirm anyways logic to base component. Change message Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Disable edit if there's simulation error Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * hide confirm anyways button once clicked. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Move Actionable Primary Action to flex-end Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Fix unit tests Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Fix nested ternary lint issues Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * add !confirmAnyways to conditions to show GasDetails. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * ConfirmAnyways should be read from state Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Rename tryAnywayOption Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Lint fixes Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Remove await tick Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Lint issue fix Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Lint fixes after rebase Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * description should show that it's content being tested. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * Move simulation fails message inline with gas details component (#12705) * Move simulation fails message inline with gas details component * Remove old unit tests Co-authored-by: Dan Miller <danjm.com@gmail.com> * lint fix * use an XOR operation. Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> * The changes in this file are no longer needed because we hide the edit button now Signed-off-by: Akintayo A. Olusegun <akintayo.segun@gmail.com> Co-authored-by: Dan Miller <danjm.com@gmail.com>feature/default_network_editable
parent
6838a3d074
commit
143a5c4a53
@ -0,0 +1,124 @@ |
||||
import { fireEvent } from '@testing-library/react'; |
||||
import React from 'react'; |
||||
import configureMockStore from 'redux-mock-store'; |
||||
import { renderWithProvider } from '../../../../../test/lib/render-helpers'; |
||||
import { TRANSACTION_ERROR_KEY } from '../../../../helpers/constants/error-keys'; |
||||
import ConfirmPageContainerContent from './confirm-page-container-content.component'; |
||||
|
||||
describe('Confirm Page Container Content', () => { |
||||
const mockStore = { |
||||
metamask: { |
||||
provider: { |
||||
type: 'test', |
||||
}, |
||||
}, |
||||
}; |
||||
|
||||
const store = configureMockStore()(mockStore); |
||||
|
||||
let props = {}; |
||||
|
||||
beforeEach(() => { |
||||
const mockOnCancel = jest.fn(); |
||||
const mockOnCancelAll = jest.fn(); |
||||
const mockOnSubmit = jest.fn(); |
||||
const mockOnConfirmAnyways = jest.fn(); |
||||
props = { |
||||
action: ' Withdraw Stake', |
||||
errorMessage: null, |
||||
errorKey: null, |
||||
hasSimulationError: true, |
||||
onCancelAll: mockOnCancelAll, |
||||
onCancel: mockOnCancel, |
||||
cancelText: 'Reject', |
||||
onSubmit: mockOnSubmit, |
||||
onConfirmAnyways: mockOnConfirmAnyways, |
||||
submitText: 'Confirm', |
||||
disabled: true, |
||||
origin: 'http://localhost:4200', |
||||
hideTitle: false, |
||||
}; |
||||
}); |
||||
|
||||
it('render ConfirmPageContainer component with simulation error', async () => { |
||||
const { queryByText, getByText } = renderWithProvider( |
||||
<ConfirmPageContainerContent {...props} />, |
||||
store, |
||||
); |
||||
|
||||
expect( |
||||
queryByText('Transaction Error. Exception thrown in contract code.'), |
||||
).not.toBeInTheDocument(); |
||||
expect( |
||||
queryByText( |
||||
'This transaction is expected to fail. Trying to execute it is expected to be expensive but fail, and is not recommended.', |
||||
), |
||||
).toBeInTheDocument(); |
||||
expect(queryByText('I will try anyway')).toBeInTheDocument(); |
||||
|
||||
const confirmButton = getByText('Confirm'); |
||||
expect(getByText('Confirm').closest('button')).toBeDisabled(); |
||||
fireEvent.click(confirmButton); |
||||
expect(props.onSubmit).toHaveBeenCalledTimes(0); |
||||
|
||||
const iWillTryButton = getByText('I will try anyway'); |
||||
fireEvent.click(iWillTryButton); |
||||
expect(props.onConfirmAnyways).toHaveBeenCalledTimes(1); |
||||
|
||||
const cancelButton = getByText('Reject'); |
||||
fireEvent.click(cancelButton); |
||||
expect(props.onCancel).toHaveBeenCalledTimes(1); |
||||
}); |
||||
|
||||
it('render ConfirmPageContainer component with another error', async () => { |
||||
props.hasSimulationError = false; |
||||
props.disabled = true; |
||||
props.errorKey = TRANSACTION_ERROR_KEY; |
||||
const { queryByText, getByText } = renderWithProvider( |
||||
<ConfirmPageContainerContent {...props} />, |
||||
store, |
||||
); |
||||
|
||||
expect( |
||||
queryByText( |
||||
'This transaction is expected to fail. Trying to execute it is expected to be expensive but fail, and is not recommended.', |
||||
), |
||||
).not.toBeInTheDocument(); |
||||
expect(queryByText('I will try anyway')).not.toBeInTheDocument(); |
||||
expect(getByText('Confirm').closest('button')).toBeDisabled(); |
||||
expect( |
||||
getByText('Transaction Error. Exception thrown in contract code.'), |
||||
).toBeInTheDocument(); |
||||
|
||||
const cancelButton = getByText('Reject'); |
||||
fireEvent.click(cancelButton); |
||||
expect(props.onCancel).toHaveBeenCalledTimes(1); |
||||
}); |
||||
|
||||
it('render ConfirmPageContainer component with no errors', async () => { |
||||
props.hasSimulationError = false; |
||||
props.disabled = false; |
||||
const { queryByText, getByText } = renderWithProvider( |
||||
<ConfirmPageContainerContent {...props} />, |
||||
store, |
||||
); |
||||
|
||||
expect( |
||||
queryByText( |
||||
'This transaction is expected to fail. Trying to execute it is expected to be expensive but fail, and is not recommended.', |
||||
), |
||||
).not.toBeInTheDocument(); |
||||
expect( |
||||
queryByText('Transaction Error. Exception thrown in contract code.'), |
||||
).not.toBeInTheDocument(); |
||||
expect(queryByText('I will try anyway')).not.toBeInTheDocument(); |
||||
|
||||
const confirmButton = getByText('Confirm'); |
||||
fireEvent.click(confirmButton); |
||||
expect(props.onSubmit).toHaveBeenCalledTimes(1); |
||||
|
||||
const cancelButton = getByText('Reject'); |
||||
fireEvent.click(cancelButton); |
||||
expect(props.onCancel).toHaveBeenCalledTimes(1); |
||||
}); |
||||
}); |
Loading…
Reference in new issue