From 48251a4189f71f1678d07dcf1227f8fe5b3294f7 Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Fri, 10 Feb 2023 07:15:54 -0800 Subject: [PATCH] Ensure simulation failure warning is shown on all networks and accounts (#17458) * Ensure simulation failure warning is shown on all networks and accounts * Add e2e test to cover failure warning behaviour on non-eip-1559 network * Fix new e2e test --- test/e2e/tests/failing-contract.spec.js | 88 +++++++++++++++++++ .../confirm-transaction-base.component.js | 4 +- 2 files changed, 89 insertions(+), 3 deletions(-) diff --git a/test/e2e/tests/failing-contract.spec.js b/test/e2e/tests/failing-contract.spec.js index babd46e72..d7cff9c5e 100644 --- a/test/e2e/tests/failing-contract.spec.js +++ b/test/e2e/tests/failing-contract.spec.js @@ -85,3 +85,91 @@ describe('Failing contract interaction ', function () { ); }); }); + +describe('Failing contract interaction on non-EIP1559 network', function () { + const smartContract = SMART_CONTRACTS.FAILING; + const ganacheOptions = { + hardfork: 'berlin', + accounts: [ + { + secretKey: + '0x7C9529A67102755B7E6102D6D950AC5D5863C98713805CEC576B945B15B71EAC', + balance: convertToHexValue(25000000000000000000), + }, + ], + }; + it('should display a warning when the contract interaction is expected to fail', async function () { + await withFixtures( + { + dapp: true, + fixtures: new FixtureBuilder() + .withPermissionControllerConnectedToTestDapp() + .build(), + ganacheOptions, + smartContract, + title: this.test.title, + }, + async ({ driver, contractRegistry }) => { + const contractAddress = await contractRegistry.getContractAddress( + smartContract, + ); + await driver.navigate(); + await driver.fill('#password', 'correct horse battery staple'); + await driver.press('#password', driver.Key.ENTER); + + await driver.openNewPage( + `http://127.0.0.1:8080/?contract=${contractAddress}`, + ); + let windowHandles = await driver.getAllWindowHandles(); + const extension = windowHandles[0]; + // waits for deployed contract and calls failing contract method + await driver.findClickableElement('#deployButton'); + + await driver.fill('#toInput', contractAddress); + await driver.fill('#amountInput', '0'); + await driver.fill('#gasInput', '100'); + + await driver.clickElement('#submitForm'); + + await driver.waitUntilXWindowHandles(3); + windowHandles = await driver.getAllWindowHandles(); + await driver.switchToWindowWithTitle( + 'MetaMask Notification', + windowHandles, + ); + + // display warning when transaction is expected to fail + const warningText = + 'We were not able to estimate gas. There might be an error in the contract and this transaction may fail.'; + const warning = await driver.findElement( + '.actionable-message__message', + ); + const confirmButton = await driver.findElement( + '[data-testid="page-container-footer-next"]', + ); + assert.equal(await warning.getText(), warningText); + assert.equal(await confirmButton.isEnabled(), false); + + // dismiss warning and confirm the transaction + await driver.clickElement({ + text: 'I want to proceed anyway', + tag: 'button', + }); + await driver.clickElement({ text: 'Confirm', tag: 'button' }); + await driver.waitUntilXWindowHandles(2); + await driver.switchToWindow(extension); + await driver.clickElement({ text: 'Activity', tag: 'button' }); + await driver.waitForSelector( + '.transaction-list__completed-transactions .transaction-list-item:nth-of-type(1)', + { timeout: 10000 }, + ); + + // display the transaction status + const transactionStatus = await driver.findElement( + '.transaction-list-item:nth-of-type(1) .transaction-status-label', + ); + assert.equal(await transactionStatus.getText(), 'Failed'); + }, + ); + }); +}); diff --git a/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js b/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js index b9a956dd0..0f38bfc77 100644 --- a/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js +++ b/ui/pages/confirm-transaction-base/confirm-transaction-base.component.js @@ -595,9 +595,7 @@ export default class ConfirmTransactionBase extends Component { : () => this.handleEditGas() } rows={[ - renderSimulationFailureWarning && - !this.supportsEIP1559 && - simulationFailureWarning(), + renderSimulationFailureWarning && simulationFailureWarning(), !renderSimulationFailureWarning && !isMultiLayerFeeNetwork && renderGasDetailsItem(),