Refactoring incremental-security.spec.js to use fixtures (#10917)
parent
f080c10cbc
commit
d97a9e8acc
@ -1,237 +0,0 @@ |
||||
const assert = require('assert'); |
||||
|
||||
const enLocaleMessages = require('../../app/_locales/en/messages.json'); |
||||
const { tinyDelayMs, regularDelayMs, largeDelayMs } = require('./helpers'); |
||||
const { buildWebDriver } = require('./webdriver'); |
||||
const Ganache = require('./ganache'); |
||||
|
||||
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: |
||||
'0x250F458997A364988956409A164BA4E16F0F99F916ACDD73ADCD3A1DE30CF8D1', |
||||
balance: 0, |
||||
}, |
||||
{ |
||||
secretKey: |
||||
'0x53CB0AB5226EEBF4D872113D98332C1555DC304443BEE1CF759D15798D3C55A9', |
||||
balance: 25000000000000000000, |
||||
}, |
||||
], |
||||
}); |
||||
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 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('.welcome-page__header'); |
||||
await driver.clickElement({ |
||||
text: enLocaleMessages.getStarted.message, |
||||
tag: 'button', |
||||
}); |
||||
await driver.delay(largeDelayMs); |
||||
}); |
||||
|
||||
it('clicks the "Create New Wallet" option', async function () { |
||||
await driver.clickElement({ text: 'Create a Wallet', tag: 'button' }); |
||||
await driver.delay(largeDelayMs); |
||||
}); |
||||
|
||||
it('clicks the "No thanks" option on the metametrics opt-in screen', async function () { |
||||
await driver.clickElement('.btn-default'); |
||||
await driver.delay(largeDelayMs); |
||||
}); |
||||
|
||||
it('accepts a secure password', async function () { |
||||
await driver.fill( |
||||
'.first-time-flow__form #create-password', |
||||
'correct horse battery staple', |
||||
); |
||||
await driver.fill( |
||||
'.first-time-flow__form #confirm-password', |
||||
'correct horse battery staple', |
||||
); |
||||
|
||||
await driver.clickElement('.first-time-flow__checkbox'); |
||||
|
||||
await driver.clickElement('.first-time-flow__form button'); |
||||
await driver.delay(regularDelayMs); |
||||
}); |
||||
|
||||
it('renders the seed phrase intro screen', async function () { |
||||
await driver.clickElement('.seed-phrase-intro__left button'); |
||||
await driver.delay(regularDelayMs); |
||||
}); |
||||
|
||||
it('skips the seed phrase challenge', async function () { |
||||
await driver.clickElement({ |
||||
text: enLocaleMessages.remindMeLater.message, |
||||
tag: 'button', |
||||
}); |
||||
await driver.delay(regularDelayMs); |
||||
|
||||
await driver.clickElement('[data-testid="account-options-menu-button"]'); |
||||
await driver.clickElement( |
||||
'[data-testid="account-options-menu__account-details"]', |
||||
); |
||||
}); |
||||
|
||||
it('gets the current accounts address', async function () { |
||||
const addressInput = await driver.findElement('.readonly-input__input'); |
||||
publicAddress = await addressInput.getAttribute('value'); |
||||
|
||||
// wait for account modal to be visible
|
||||
const accountModal = await driver.findVisibleElement('span .modal'); |
||||
|
||||
await driver.clickElement('.account-modal__close'); |
||||
|
||||
// wait for account modal to be removed from DOM
|
||||
await accountModal.waitForElementState('hidden'); |
||||
await driver.delay(regularDelayMs); |
||||
}); |
||||
}); |
||||
|
||||
describe('send to current account from dapp with different provider', function () { |
||||
let extension; |
||||
|
||||
it('switches to dapp screen', async function () { |
||||
const windowHandles = await driver.getAllWindowHandles(); |
||||
extension = windowHandles[0]; |
||||
|
||||
await driver.openNewPage('http://127.0.0.1:8080/'); |
||||
await driver.delay(regularDelayMs); |
||||
}); |
||||
|
||||
it('sends eth to the current account', async function () { |
||||
await driver.fill('#address', publicAddress); |
||||
await driver.delay(regularDelayMs); |
||||
await driver.clickElement('#send'); |
||||
|
||||
await driver.waitForSelector( |
||||
{ css: '#success', text: 'Success' }, |
||||
{ timeout: 15000 }, |
||||
); |
||||
}); |
||||
|
||||
it('switches back to MetaMask', async function () { |
||||
await driver.switchToWindow(extension); |
||||
}); |
||||
|
||||
it('should have the correct amount of eth', async function () { |
||||
const currencyDisplay = await driver.waitForSelector({ |
||||
css: '.currency-display-component__text', |
||||
text: '1', |
||||
}); |
||||
const balance = await currencyDisplay.getText(); |
||||
|
||||
assert.strictEqual(balance, '1'); |
||||
}); |
||||
}); |
||||
|
||||
describe('backs up the seed phrase', function () { |
||||
it('should show a backup reminder', async function () { |
||||
const backupReminder = await driver.findElements({ |
||||
xpath: |
||||
"//div[contains(@class, 'home-notification__text') and contains(text(), 'Backup your Secret Recovery code to keep your wallet and funds secure')]", |
||||
}); |
||||
assert.equal(backupReminder.length, 1); |
||||
}); |
||||
|
||||
it('should take the user to the seedphrase backup screen', async function () { |
||||
await driver.clickElement('.home-notification__accept-button'); |
||||
await driver.delay(regularDelayMs); |
||||
}); |
||||
|
||||
let seedPhrase; |
||||
|
||||
it('reveals the seed phrase', async function () { |
||||
await driver.clickElement( |
||||
'.reveal-seed-phrase__secret-blocker .reveal-seed-phrase__reveal-button', |
||||
); |
||||
await driver.delay(regularDelayMs); |
||||
|
||||
const revealedSeedPhrase = await driver.findElement( |
||||
'.reveal-seed-phrase__secret-words', |
||||
); |
||||
seedPhrase = await revealedSeedPhrase.getText(); |
||||
assert.equal(seedPhrase.split(' ').length, 12); |
||||
await driver.delay(regularDelayMs); |
||||
|
||||
await driver.clickElement({ |
||||
text: enLocaleMessages.next.message, |
||||
tag: 'button', |
||||
}); |
||||
await driver.delay(regularDelayMs); |
||||
}); |
||||
|
||||
async function clickWordAndWait(word) { |
||||
await driver.clickElement( |
||||
`[data-testid="seed-phrase-sorted"] [data-testid="draggable-seed-${word}"]`, |
||||
); |
||||
await driver.delay(tinyDelayMs); |
||||
} |
||||
|
||||
it('can retype the seed phrase', async function () { |
||||
const words = seedPhrase.split(' '); |
||||
|
||||
for (const word of words) { |
||||
await clickWordAndWait(word); |
||||
} |
||||
|
||||
await driver.clickElement({ text: 'Confirm', tag: 'button' }); |
||||
await driver.delay(regularDelayMs); |
||||
}); |
||||
|
||||
it('can click through the success screen', async function () { |
||||
await driver.clickElement({ text: 'All Done', tag: 'button' }); |
||||
await driver.delay(regularDelayMs); |
||||
}); |
||||
|
||||
it('should have the correct amount of eth', async function () { |
||||
const currencyDisplay = await driver.waitForSelector({ |
||||
css: '.currency-display-component__text', |
||||
text: '1', |
||||
}); |
||||
const balance = await currencyDisplay.getText(); |
||||
|
||||
assert.strictEqual(balance, '1'); |
||||
}); |
||||
|
||||
it('should not show a backup reminder', async function () { |
||||
await driver.assertElementNotPresent('.backup-notification'); |
||||
}); |
||||
}); |
||||
}); |
@ -0,0 +1,175 @@ |
||||
const { strict: assert } = require('assert'); |
||||
const { withFixtures, tinyDelayMs } = require('../helpers'); |
||||
const enLocaleMessages = require('../../../app/_locales/en/messages.json'); |
||||
|
||||
describe('Incremental Security', function () { |
||||
const ganacheOptions = { |
||||
accounts: [ |
||||
{ |
||||
secretKey: |
||||
'0x250F458997A364988956409A164BA4E16F0F99F916ACDD73ADCD3A1DE30CF8D1', |
||||
balance: 0, |
||||
}, |
||||
{ |
||||
secretKey: |
||||
'0x53CB0AB5226EEBF4D872113D98332C1555DC304443BEE1CF759D15798D3C55A9', |
||||
balance: 25000000000000000000, |
||||
}, |
||||
], |
||||
}; |
||||
it('Back up seed phrase from backup reminder', async function () { |
||||
await withFixtures( |
||||
{ |
||||
dapp: true, |
||||
fixtures: 'onboarding', |
||||
ganacheOptions, |
||||
title: this.test.title, |
||||
failOnConsoleError: false, |
||||
dappPath: 'send-eth-with-private-key-test', |
||||
}, |
||||
async ({ driver }) => { |
||||
await driver.navigate(); |
||||
await driver.delay(tinyDelayMs); |
||||
|
||||
// clicks the continue button on the welcome screen
|
||||
await driver.findElement('.welcome-page__header'); |
||||
await driver.clickElement({ |
||||
text: enLocaleMessages.getStarted.message, |
||||
tag: 'button', |
||||
}); |
||||
|
||||
// clicks the "Create New Wallet" option
|
||||
await driver.clickElement({ text: 'Create a Wallet', tag: 'button' }); |
||||
|
||||
// clicks the "No thanks" option on the metametrics opt-in screen
|
||||
await driver.clickElement('.btn-default'); |
||||
|
||||
// accepts a secure password
|
||||
await driver.fill( |
||||
'.first-time-flow__form #create-password', |
||||
'correct horse battery staple', |
||||
); |
||||
await driver.fill( |
||||
'.first-time-flow__form #confirm-password', |
||||
'correct horse battery staple', |
||||
); |
||||
await driver.clickElement('.first-time-flow__checkbox'); |
||||
await driver.clickElement('.first-time-flow__form button'); |
||||
|
||||
// renders the seed phrase intro screen'
|
||||
await driver.clickElement('.seed-phrase-intro__left button'); |
||||
|
||||
// skips the seed phrase challenge
|
||||
await driver.clickElement({ |
||||
text: enLocaleMessages.remindMeLater.message, |
||||
tag: 'button', |
||||
}); |
||||
|
||||
await driver.clickElement( |
||||
'[data-testid="account-options-menu-button"]', |
||||
); |
||||
await driver.clickElement( |
||||
'[data-testid="account-options-menu__account-details"]', |
||||
); |
||||
|
||||
// gets the current accounts address
|
||||
const addressInput = await driver.findElement('.readonly-input__input'); |
||||
const publicAddress = await addressInput.getAttribute('value'); |
||||
|
||||
// wait for account modal to be visible
|
||||
const accountModal = await driver.findVisibleElement('span .modal'); |
||||
|
||||
await driver.clickElement('.account-modal__close'); |
||||
|
||||
// wait for account modal to be removed from DOM
|
||||
await accountModal.waitForElementState('hidden'); |
||||
|
||||
// send to current account from dapp with different provider
|
||||
const windowHandles = await driver.getAllWindowHandles(); |
||||
const extension = windowHandles[0]; |
||||
|
||||
// switched to Dapp
|
||||
await driver.openNewPage('http://127.0.0.1:8080/'); |
||||
|
||||
// sends eth to the current account
|
||||
await driver.fill('#address', publicAddress); |
||||
await driver.clickElement('#send'); |
||||
|
||||
await driver.waitForSelector( |
||||
{ css: '#success', text: 'Success' }, |
||||
{ timeout: 15000 }, |
||||
); |
||||
|
||||
// switch to extension
|
||||
await driver.switchToWindow(extension); |
||||
|
||||
// should have the correct amount of eth
|
||||
let currencyDisplay = await driver.waitForSelector({ |
||||
css: '.currency-display-component__text', |
||||
text: '1', |
||||
}); |
||||
let balance = await currencyDisplay.getText(); |
||||
assert.strictEqual(balance, '1'); |
||||
|
||||
// backs up the seed phrase
|
||||
// should show a backup reminder
|
||||
const backupReminder = await driver.findElements({ |
||||
xpath: |
||||
"//div[contains(@class, 'home-notification__text') and contains(text(), 'Backup your Secret Recovery code to keep your wallet and funds secure')]", |
||||
}); |
||||
assert.equal(backupReminder.length, 1); |
||||
|
||||
// should take the user to the seedphrase backup screen
|
||||
await driver.clickElement('.home-notification__accept-button'); |
||||
|
||||
// reveals the seed phrase
|
||||
await driver.clickElement( |
||||
'.reveal-seed-phrase__secret-blocker .reveal-seed-phrase__reveal-button', |
||||
); |
||||
|
||||
const revealedSeedPhrase = await driver.findElement( |
||||
'.reveal-seed-phrase__secret-words', |
||||
); |
||||
const seedPhrase = await revealedSeedPhrase.getText(); |
||||
assert.equal(seedPhrase.split(' ').length, 12); |
||||
|
||||
await driver.clickElement({ |
||||
text: enLocaleMessages.next.message, |
||||
tag: 'button', |
||||
}); |
||||
|
||||
// selecting the words from seedphrase
|
||||
async function clickWordAndWait(word) { |
||||
await driver.clickElement( |
||||
`[data-testid="seed-phrase-sorted"] [data-testid="draggable-seed-${word}"]`, |
||||
); |
||||
await driver.delay(tinyDelayMs); |
||||
} |
||||
|
||||
// can retype the seed phrase
|
||||
const words = seedPhrase.split(' '); |
||||
|
||||
for (const word of words) { |
||||
await clickWordAndWait(word); |
||||
} |
||||
|
||||
await driver.clickElement({ text: 'Confirm', tag: 'button' }); |
||||
|
||||
// can click through the success screen
|
||||
await driver.clickElement({ text: 'All Done', tag: 'button' }); |
||||
|
||||
// should have the correct amount of eth
|
||||
currencyDisplay = await driver.waitForSelector({ |
||||
css: '.currency-display-component__text', |
||||
text: '1', |
||||
}); |
||||
balance = await currencyDisplay.getText(); |
||||
|
||||
assert.strictEqual(balance, '1'); |
||||
|
||||
// should not show a backup reminder
|
||||
await driver.assertElementNotPresent('.backup-notification'); |
||||
}, |
||||
); |
||||
}); |
||||
}); |
Loading…
Reference in new issue