From d1d7622c93acfaef44cb041df926af33543b8f96 Mon Sep 17 00:00:00 2001 From: Niranjana Binoy <43930900+NiranjanaBinoy@users.noreply.github.com> Date: Wed, 7 Apr 2021 10:18:20 -0400 Subject: [PATCH] Refactoring signature-request.spec.js to use fixtures (#10820) --- test/e2e/run-all.sh | 7 - test/e2e/signature-request.spec.js | 172 ----------------------- test/e2e/tests/signature-request.spec.js | 79 +++++++++++ 3 files changed, 79 insertions(+), 179 deletions(-) delete mode 100644 test/e2e/signature-request.spec.js create mode 100644 test/e2e/tests/signature-request.spec.js diff --git a/test/e2e/run-all.sh b/test/e2e/run-all.sh index 4ce2aba79..c78f90b72 100755 --- a/test/e2e/run-all.sh +++ b/test/e2e/run-all.sh @@ -42,13 +42,6 @@ retry concurrently --kill-others \ 'yarn dapp' \ 'mocha test/e2e/metamask-responsive-ui.spec' -retry concurrently --kill-others \ - --names 'dapp,e2e' \ - --prefix '[{time}][{name}]' \ - --success first \ - 'yarn dapp' \ - 'mocha test/e2e/signature-request.spec' - retry concurrently --kill-others \ --names 'e2e' \ --prefix '[{time}][{name}]' \ diff --git a/test/e2e/signature-request.spec.js b/test/e2e/signature-request.spec.js deleted file mode 100644 index da05aa00d..000000000 --- a/test/e2e/signature-request.spec.js +++ /dev/null @@ -1,172 +0,0 @@ -const assert = require('assert'); -const path = require('path'); -const webdriver = require('selenium-webdriver'); - -const { By, Key, until } = webdriver; -const { regularDelayMs, largeDelayMs } = require('./helpers'); -const { buildWebDriver } = require('./webdriver'); -const Ganache = require('./ganache'); -const FixtureServer = require('./fixture-server'); - -const fixtureServer = new FixtureServer(); - -const ganacheServer = new Ganache(); - -describe('MetaMask', function () { - let driver; - let publicAddress; - - this.timeout(0); - this.bail(true); - - before(async function () { - await ganacheServer.start(); - await fixtureServer.start(); - await fixtureServer.loadState( - path.join(__dirname, 'fixtures', 'imported-account'), - ); - publicAddress = '0x5cfe73b6021e818b776b421b1c4db2474086a7e1'; - const result = await buildWebDriver(); - driver = result.driver; - await driver.navigate(); - }); - - afterEach(async function () { - if (process.env.SELENIUM_BROWSER === 'chrome') { - const errors = await driver.checkBrowserForConsoleErrors(driver); - if (errors.length) { - const errorReports = errors.map((err) => err.message); - const errorMessage = `Errors found in browser console:\n${errorReports.join( - '\n', - )}`; - console.error(new Error(errorMessage)); - } - } - if (this.currentTest.state === 'failed') { - await driver.verboseReportOnFailure(this.currentTest.title); - } - }); - - after(async function () { - await ganacheServer.quit(); - await fixtureServer.stop(); - await driver.quit(); - }); - - describe('successfully signs typed data', function () { - let extension; - let popup; - let dapp; - let windowHandles; - - it('accepts the account password after lock', async function () { - await driver.delay(1000); - const passwordField = await driver.findElement(By.id('password')); - await passwordField.sendKeys('correct horse battery staple'); - await passwordField.sendKeys(Key.ENTER); - await driver.delay(largeDelayMs * 4); - }); - - it('connects to the dapp', async function () { - await driver.openNewPage('http://127.0.0.1:8080/'); - await driver.delay(regularDelayMs); - - await driver.clickElement( - By.xpath(`//button[contains(text(), 'Connect')]`), - ); - - await driver.delay(regularDelayMs); - - await driver.waitUntilXWindowHandles(3); - windowHandles = await driver.getAllWindowHandles(); - - extension = windowHandles[0]; - dapp = await driver.switchToWindowWithTitle( - 'E2E Test Dapp', - windowHandles, - ); - popup = windowHandles.find( - (handle) => handle !== extension && handle !== dapp, - ); - - await driver.switchToWindow(popup); - - await driver.delay(regularDelayMs); - - await driver.clickElement(By.xpath(`//button[contains(text(), 'Next')]`)); - await driver.clickElement( - By.xpath(`//button[contains(text(), 'Connect')]`), - ); - - await driver.waitUntilXWindowHandles(2); - await driver.switchToWindow(dapp); - }); - - it('creates a sign typed data signature request', async function () { - await driver.clickElement(By.id('signTypedDataV4'), 10000); - await driver.delay(largeDelayMs); - - await driver.delay(regularDelayMs); - windowHandles = await driver.getAllWindowHandles(); - await driver.switchToWindowWithTitle( - 'MetaMask Notification', - windowHandles, - ); - await driver.delay(regularDelayMs); - - const title = await driver.findElement( - By.css('.signature-request-content__title'), - ); - const name = await driver.findElement( - By.css('.signature-request-content__info--bolded'), - ); - const content = await driver.findElements( - By.css('.signature-request-content__info'), - ); - const origin = content[0]; - const address = content[1]; - assert.equal(await title.getText(), 'Signature Request'); - assert.equal(await name.getText(), 'Ether Mail'); - assert.equal(await origin.getText(), 'http://127.0.0.1:8080'); - assert.equal( - await address.getText(), - `${publicAddress.slice(0, 8)}...${publicAddress.slice( - publicAddress.length - 8, - )}`, - ); - }); - - it('signs the transaction', async function () { - await driver.clickElement( - By.xpath(`//button[contains(text(), 'Sign')]`), - 10000, - ); - await driver.delay(regularDelayMs); - - extension = windowHandles[0]; - await driver.switchToWindow(extension); - }); - - it('gets the current accounts address', async function () { - await driver.clickElement( - By.css('[data-testid="account-options-menu-button"]'), - ); - await driver.clickElement( - By.css('[data-testid="account-options-menu__account-details"]'), - ); - await driver.delay(regularDelayMs); - - const addressInput = await driver.findElement( - By.css('.readonly-input__input'), - ); - const newPublicAddress = await addressInput.getAttribute('value'); - const accountModal = await driver.findElement(By.css('span .modal')); - - await driver.clickElement(By.css('.account-modal__close')); - - await driver.wait(until.stalenessOf(accountModal)); - await driver.delay(regularDelayMs); - assert.equal(newPublicAddress.toLowerCase(), publicAddress); - }); - }); -}); diff --git a/test/e2e/tests/signature-request.spec.js b/test/e2e/tests/signature-request.spec.js new file mode 100644 index 000000000..29e186750 --- /dev/null +++ b/test/e2e/tests/signature-request.spec.js @@ -0,0 +1,79 @@ +const { strict: assert } = require('assert'); +const { By, Key } = require('selenium-webdriver'); +const { withFixtures } = require('../helpers'); + +describe('Signature Request', function () { + it('can initiate and confirm a Signature Request', async function () { + const ganacheOptions = { + accounts: [ + { + secretKey: + '0x7C9529A67102755B7E6102D6D950AC5D5863C98713805CEC576B945B15B71EAC', + balance: 25000000000000000000, + }, + ], + }; + const publicAddress = '0x5cfe73b6021e818b776b421b1c4db2474086a7e1'; + await withFixtures( + { + dapp: true, + fixtures: 'connected-state', + ganacheOptions, + title: this.test.title, + }, + async ({ driver }) => { + await driver.navigate(); + const passwordField = await driver.findElement(By.css('#password')); + await passwordField.sendKeys('correct horse battery staple'); + await passwordField.sendKeys(Key.ENTER); + + await driver.openNewPage('http://127.0.0.1:8080/'); + + // creates a sign typed data signature request + await driver.clickElement(By.id('signTypedDataV4'), 10000); + + await driver.waitUntilXWindowHandles(3); + const windowHandles = await driver.getAllWindowHandles(); + await driver.switchToWindowWithTitle( + 'MetaMask Notification', + windowHandles, + ); + + const title = await driver.findElement( + By.css('.signature-request-content__title'), + ); + const name = await driver.findElement( + By.css('.signature-request-content__info--bolded'), + ); + const content = await driver.findElements( + By.css('.signature-request-content__info'), + ); + const origin = content[0]; + const address = content[1]; + assert.equal(await title.getText(), 'Signature Request'); + assert.equal(await name.getText(), 'Ether Mail'); + assert.equal(await origin.getText(), 'http://127.0.0.1:8080'); + assert.equal( + await address.getText(), + `${publicAddress.slice(0, 8)}...${publicAddress.slice( + publicAddress.length - 8, + )}`, + ); + + // Approve signing typed data + await driver.clickElement( + By.xpath(`//button[contains(text(), 'Sign')]`), + 10000, + ); + + // switch to the Dapp and verify the signed addressed + await driver.switchToWindowWithTitle('E2E Test Dapp', windowHandles); + await driver.clickElement(By.id('signTypedDataV4Verify'), 10000); + const recoveredAddress = await driver.findElement( + By.id('signTypedDataV4VerifyResult'), + ); + assert.equal(await recoveredAddress.getText(), publicAddress); + }, + ); + }); +});