1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-29 23:58:06 +01:00
metamask-extension/test/e2e/ethereum-on.spec.js
Dan J Miller d8179ff030
Connect Screen Multi Select (#8078)
* Add UI for selecting multiple accounts on the first permissions connect screen

* Make accounts list scrollable on connect screen

* Change title wording on connect screen to 'select your accounts'

* Add select all tooltip to info circle on top of connect screen account list

* Add security info footer to the first screen of the connect flow

* Apply redesigns to page 2 of connect flow

* Display number of accounts on connect flow second screen if there are multiple to connect

* Update e2e tests for connect screen multi-select changes

* Remove unused chooseAnAcount message

* Fix styling/display of redirect elements on second page of connect flow

* Assorted small fixes in permissions connect

* Remove unnecessary tiny delays in spec files

* Remove incorrect use of bem modified in choose-account

* Remove unused locale

* Use Set for managing selected accounts in choose-acount and permissions-connect componets

* Compone!

* Move connect flow header into a reusable component, and implement new header designs

* Update locales and add missing locales

* Improve permission list item design (second screen of connect flow)

* Check box component improvements

* Fixes in variables.scss

* Simplfy code in selectAll of choose-account.component

* Hide checkboxes on first pages on connect flow when there is only one account

* Allow autofill of default new account modal text with right arrow

* Disable next button on first screen of connect flow when no accounts selected

* Improve choose-account/index.scss

* Remove metamask secure graphic

* Fix connect flow redirect screen

* Fix connectToMultiple locale

* Remove locales no longer used after connect flow multiple connect updates

* Fix size of dapp icon on redirect screen of connect flow

* Clean up choose-account code

* Stop using placeholder in new-account-modal

* Remove unused styles in permission-page-container/index.scss

* Pass origin instead of site name to PermissionsConnectHeader in connect flow

* Make iconName a required prop in permissions-connect-header

* Show checkbox in cases where there is one account in the choose-account list

* Do not render select all checkbox when only 1 list item, instead of just hiding it

* Small cleanup in choose-account/index.scss
2020-04-02 06:39:53 -02:30

173 lines
6.0 KiB
JavaScript

const assert = require('assert')
const webdriver = require('selenium-webdriver')
const { By, until } = webdriver
const {
regularDelayMs,
largeDelayMs,
} = require('./helpers')
const { buildWebDriver } = require('./webdriver')
const Ganache = require('./ganache')
const enLocaleMessages = require('../../app/_locales/en/messages.json')
const ganacheServer = new Ganache()
describe('MetaMask', function () {
let driver
let publicAddress
this.timeout(0)
this.bail(true)
before(async function () {
await ganacheServer.start({
accounts: [
{
secretKey: '0x53CB0AB5226EEBF4D872113D98332C1555DC304443BEE1CF759D15798D3C55A9',
balance: 25000000000000000000,
},
],
})
const result = await buildWebDriver()
driver = result.driver
})
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(driver, this.currentTest)
}
})
after(async function () {
await ganacheServer.quit()
await driver.quit()
})
describe('Going through the first time flow, but skipping the seed phrase challenge', function () {
it('clicks the continue button on the welcome screen', async function () {
await driver.findElement(By.css('.welcome-page__header'))
await driver.clickElement(By.xpath(`//button[contains(text(), '${enLocaleMessages.getStarted.message}')]`))
await driver.delay(largeDelayMs)
})
it('clicks the "Create New Wallet" option', async function () {
await driver.clickElement(By.xpath(`//button[contains(text(), 'Create a Wallet')]`))
await driver.delay(largeDelayMs)
})
it('clicks the "No thanks" option on the metametrics opt-in screen', async function () {
await driver.clickElement(By.css('.btn-default'))
await driver.delay(largeDelayMs)
})
it('accepts a secure password', async function () {
const passwordBox = await driver.findElement(By.css('.first-time-flow__form #create-password'))
const passwordBoxConfirm = await driver.findElement(By.css('.first-time-flow__form #confirm-password'))
await passwordBox.sendKeys('correct horse battery staple')
await passwordBoxConfirm.sendKeys('correct horse battery staple')
await driver.clickElement(By.css('.first-time-flow__checkbox'))
await driver.clickElement(By.css('.first-time-flow__form button'))
await driver.delay(largeDelayMs)
})
it('skips the seed phrase challenge', async function () {
await driver.clickElement(By.xpath(`//button[contains(text(), '${enLocaleMessages.remindMeLater.message}')]`))
await driver.delay(regularDelayMs)
await driver.clickElement(By.css('.account-details__details-button'))
await driver.delay(regularDelayMs)
})
it('gets the current accounts address', async function () {
const addressInput = await driver.findElement(By.css('.qr-ellip-address'))
publicAddress = 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)
})
})
describe('provider listening for events', function () {
let extension
let popup
let dapp
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)
const 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.css('.permissions-connect-choose-account__account'))
await driver.clickElement(By.xpath(`//button[contains(text(), 'Next')]`))
await driver.clickElement(By.xpath(`//button[contains(text(), 'Submit')]`))
await driver.waitUntilXWindowHandles(2)
await driver.switchToWindow(dapp)
await driver.delay(regularDelayMs)
})
it('has the ganache network id within the dapp', async function () {
const networkDiv = await driver.findElement(By.css('#network'))
await driver.delay(regularDelayMs)
assert.equal(await networkDiv.getText(), '5777')
})
it('changes the network', async function () {
await driver.switchToWindow(extension)
await driver.clickElement(By.css('.network-name'))
await driver.delay(regularDelayMs)
await driver.clickElement(By.xpath(`//span[contains(text(), 'Ropsten')]`))
await driver.delay(largeDelayMs)
})
it('sets the network div within the dapp', async function () {
await driver.switchToWindow(dapp)
const networkDiv = await driver.findElement(By.css('#network'))
assert.equal(await networkDiv.getText(), '3')
})
it('sets the chainId div within the dapp', async function () {
await driver.switchToWindow(dapp)
const chainIdDiv = await driver.findElement(By.css('#chainId'))
assert.equal(await chainIdDiv.getText(), '0x3')
})
it('sets the account div within the dapp', async function () {
await driver.switchToWindow(dapp)
const accountsDiv = await driver.findElement(By.css('#accounts'))
assert.equal(await accountsDiv.getText(), publicAddress.toLowerCase())
})
})
})