diff --git a/test/e2e/tests/contract-interactions.spec.js b/test/e2e/tests/contract-interactions.spec.js index 1e4ddecfa..e8edd9107 100644 --- a/test/e2e/tests/contract-interactions.spec.js +++ b/test/e2e/tests/contract-interactions.spec.js @@ -6,10 +6,6 @@ const { } = require('../helpers'); describe('Deploy contract and call contract methods', function () { - let windowHandles; - let extension; - let popup; - let dapp; const ganacheOptions = { accounts: [ { @@ -37,13 +33,13 @@ describe('Deploy contract and call contract methods', function () { await driver.clickElement({ text: 'Connect', tag: 'button' }); await driver.waitUntilXWindowHandles(3); await driver.delay(5000); - windowHandles = await driver.getAllWindowHandles(); - extension = windowHandles[0]; - dapp = await driver.switchToWindowWithTitle( + let windowHandles = await driver.getAllWindowHandles(); + const extension = windowHandles[0]; + const dapp = await driver.switchToWindowWithTitle( 'E2E Test Dapp', windowHandles, ); - popup = windowHandles.find( + const popup = windowHandles.find( (handle) => handle !== extension && handle !== dapp, ); await driver.switchToWindow(popup); diff --git a/test/e2e/tests/failing-contract.spec.js b/test/e2e/tests/failing-contract.spec.js new file mode 100644 index 000000000..f95fba9e4 --- /dev/null +++ b/test/e2e/tests/failing-contract.spec.js @@ -0,0 +1,107 @@ +const { strict: assert } = require('assert'); +const { convertToHexValue, withFixtures } = require('../helpers'); + +describe('Failing contract interaction ', function () { + const ganacheOptions = { + hardfork: 'london', + 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: 'imported-account', + ganacheOptions, + title: this.test.title, + }, + async ({ driver }) => { + await driver.navigate(); + await driver.fill('#password', 'correct horse battery staple'); + await driver.press('#password', driver.Key.ENTER); + + // connects the dapp + await driver.openNewPage('http://127.0.0.1:8080/'); + await driver.clickElement({ text: 'Connect', tag: 'button' }); + await driver.waitUntilXWindowHandles(3); + let windowHandles = await driver.getAllWindowHandles(); + const extension = windowHandles[0]; + const dapp = await driver.switchToWindowWithTitle( + 'E2E Test Dapp', + windowHandles, + ); + const popup = windowHandles.find( + (handle) => handle !== extension && handle !== dapp, + ); + await driver.switchToWindow(popup); + await driver.clickElement({ text: 'Next', tag: 'button' }); + await driver.clickElement({ text: 'Connect', tag: 'button' }); + await driver.waitUntilXWindowHandles(2); + + // deploy contract + await driver.switchToWindow(dapp); + await driver.clickElement('#deployFailingButton'); + await driver.waitUntilXWindowHandles(3); + windowHandles = await driver.getAllWindowHandles(); + await driver.switchToWindowWithTitle( + 'MetaMask Notification', + windowHandles, + ); + await driver.clickElement({ text: 'Confirm', tag: 'button' }); + await driver.waitUntilXWindowHandles(2); + await driver.switchToWindow(extension); + await driver.clickElement('[data-testid="home__activity-tab"]'); + await driver.waitForSelector( + '.transaction-list__completed-transactions .transaction-list-item:nth-of-type(1)', + { timeout: 10000 }, + ); + const completedTx = await driver.findElement('.list-item__title'); + const completedTxText = await completedTx.getText(); + assert.equal(completedTxText, 'Contract Deployment'); + + // calls failing contract method + await driver.switchToWindow(dapp); + await driver.clickElement('#sendFailingButton'); + await driver.waitUntilXWindowHandles(3); + windowHandles = await driver.getAllWindowHandles(); + await driver.switchToWindowWithTitle( + 'MetaMask Notification', + windowHandles, + ); + + // display warning when transaction is expected to fail + const warningText = + 'This transaction is expected to fail. Trying to execute it is expected to be expensive but fail, and is not recommended.'; + 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 will try anyway', tag: 'button' }); + await driver.clickElement({ text: 'Confirm', tag: 'button' }); + await driver.waitUntilXWindowHandles(2); + await driver.switchToWindow(extension); + await driver.waitForSelector( + '.transaction-list__completed-transactions .transaction-list-item:nth-of-type(2)', + { timeout: 10000 }, + ); + + // display the transaction status + const transactionStatus = await driver.findElement( + '.transaction-list-item:nth-of-type(1) .transaction-status', + ); + assert.equal(await transactionStatus.getText(), 'Failed'); + }, + ); + }); +});