aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorkumavis <kumavis@users.noreply.github.com>2018-04-03 01:47:24 +0800
committerGitHub <noreply@github.com>2018-04-03 01:47:24 +0800
commit6d5f1392a529c5c809d416aaebc6e3424ee55ae1 (patch)
tree7feb008f31933a579a4a9bdeb42e22c99d78597a /test
parent812a06ffcd9cea39453e8a59563bf1d12e17c065 (diff)
parent69a867b4a420acd4b4354aab2cc4051736a778cb (diff)
downloadtangerine-wallet-browser-6d5f1392a529c5c809d416aaebc6e3424ee55ae1.tar
tangerine-wallet-browser-6d5f1392a529c5c809d416aaebc6e3424ee55ae1.tar.gz
tangerine-wallet-browser-6d5f1392a529c5c809d416aaebc6e3424ee55ae1.tar.bz2
tangerine-wallet-browser-6d5f1392a529c5c809d416aaebc6e3424ee55ae1.tar.lz
tangerine-wallet-browser-6d5f1392a529c5c809d416aaebc6e3424ee55ae1.tar.xz
tangerine-wallet-browser-6d5f1392a529c5c809d416aaebc6e3424ee55ae1.tar.zst
tangerine-wallet-browser-6d5f1392a529c5c809d416aaebc6e3424ee55ae1.zip
Merge branch 'master' into i18n-helper
Diffstat (limited to 'test')
-rw-r--r--test/e2e/metamask.spec.js65
-rw-r--r--test/integration/lib/tx-list-items.js61
-rw-r--r--test/unit/nonce-tracker-test.js36
3 files changed, 138 insertions, 24 deletions
diff --git a/test/e2e/metamask.spec.js b/test/e2e/metamask.spec.js
index c73ba2b41..d2ffa041e 100644
--- a/test/e2e/metamask.spec.js
+++ b/test/e2e/metamask.spec.js
@@ -1,5 +1,8 @@
+const fs = require('fs')
+const mkdirp = require('mkdirp')
const path = require('path')
const assert = require('assert')
+const pify = require('pify')
const webdriver = require('selenium-webdriver')
const By = webdriver.By
const { delay, buildWebDriver } = require('./func')
@@ -14,12 +17,18 @@ describe('Metamask popup page', function () {
const extPath = path.resolve('dist/chrome')
driver = buildWebDriver(extPath)
await driver.get('chrome://extensions-frame')
- const elems = await driver.findElements(By.className('extension-list-item-wrapper'))
+ const elems = await driver.findElements(By.css('.extension-list-item-wrapper'))
const extensionId = await elems[1].getAttribute('id')
await driver.get(`chrome-extension://${extensionId}/popup.html`)
await delay(500)
})
+ afterEach(async function () {
+ if (this.currentTest.state === 'failed') {
+ await verboseReportOnFailure(this.currentTest)
+ }
+ })
+
after(async function () {
await driver.quit()
})
@@ -33,36 +42,31 @@ describe('Metamask popup page', function () {
it('should match title', async () => {
const title = await driver.getTitle()
- assert.equal(title, 'MetaMask Plugin', 'title matches MetaMask Plugin')
+ assert.equal(title, 'MetaMask', 'title matches MetaMask')
})
it('should show privacy notice', async () => {
- const privacy = await driver.findElement(By.className(
- 'terms-header'
- )).getText()
+ const privacy = await driver.findElement(By.css('.terms-header')).getText()
assert.equal(privacy, 'PRIVACY NOTICE', 'shows privacy notice')
- driver.findElement(By.css(
- 'button'
- )).click()
+ driver.findElement(By.css('button')).click()
+ await delay(300)
})
it('should show terms of use', async () => {
await delay(300)
- const terms = await driver.findElement(By.className(
- 'terms-header'
- )).getText()
+ const terms = await driver.findElement(By.css('.terms-header')).getText()
assert.equal(terms, 'TERMS OF USE', 'shows terms of use')
+ await delay(300)
})
it('should be unable to continue without scolling throught the terms of use', async () => {
- const button = await driver.findElement(By.css(
- 'button'
- )).isEnabled()
+ const button = await driver.findElement(By.css('button')).isEnabled()
assert.equal(button, false, 'disabled continue button')
const element = driver.findElement(By.linkText(
'Attributions'
))
await driver.executeScript('arguments[0].scrollIntoView(true)', element)
+ await delay(300)
})
it('should be able to continue when scrolled to the bottom of terms of use', async () => {
@@ -71,10 +75,10 @@ describe('Metamask popup page', function () {
await delay(500)
assert.equal(buttonEnabled, true, 'enabled continue button')
await button.click()
+ await delay(300)
})
it('should accept password with length of eight', async () => {
- await delay(300)
const passwordBox = await driver.findElement(By.id('password-box'))
const passwordBoxConfirm = await driver.findElement(By.id('password-box-confirm'))
const button = driver.findElement(By.css('button'))
@@ -87,16 +91,16 @@ describe('Metamask popup page', function () {
it('should show value was created and seed phrase', async () => {
await delay(700)
- this.seedPhase = await driver.findElement(By.className('twelve-word-phrase')).getText()
+ this.seedPhase = await driver.findElement(By.css('.twelve-word-phrase')).getText()
const continueAfterSeedPhrase = await driver.findElement(By.css('button'))
await continueAfterSeedPhrase.click()
+ await delay(300)
})
it('should show lock account', async () => {
- await delay(300)
- await driver.findElement(By.className('sandwich-expando')).click()
+ await driver.findElement(By.css('.sandwich-expando')).click()
await delay(500)
- await driver.findElement(By.xpath('//*[@id="app-content"]/div/div[3]/span/div/li[2]')).click()
+ await driver.findElement(By.css('#app-content > div > div:nth-child(3) > span > div > li:nth-child(3)')).click()
})
it('should accept account password after lock', async () => {
@@ -106,17 +110,30 @@ describe('Metamask popup page', function () {
await delay(500)
})
- it('should show QR code', async () => {
+ it('should show QR code option', async () => {
await delay(300)
- await driver.findElement(By.className('fa-ellipsis-h')).click()
- await driver.findElement(By.xpath('//*[@id="app-content"]/div/div[4]/div/div/div[1]/flex-column/div[1]/div/span/i/div/div/li[2]')).click()
+ await driver.findElement(By.css('.fa-ellipsis-h')).click()
+ await driver.findElement(By.css('#app-content > div > div.app-primary.from-right > div > div > div:nth-child(1) > flex-column > div.name-label > div > span > i > div > div > li:nth-child(3)')).click()
await delay(300)
})
it('should show the account address', async () => {
- this.accountAddress = await driver.findElement(By.className('ellip-address')).getText()
- await driver.findElement(By.className('fa-arrow-left')).click()
+ this.accountAddress = await driver.findElement(By.css('.ellip-address')).getText()
+ await driver.findElement(By.css('.fa-arrow-left')).click()
await delay(500)
})
})
+
+ async function verboseReportOnFailure(test) {
+ const artifactDir = `./test-artifacts/${test.title}`
+ const filepathBase = `${artifactDir}/test-failure`
+ await pify(mkdirp)(artifactDir)
+ // capture screenshot
+ const screenshot = await driver.takeScreenshot()
+ await pify(fs.writeFile)(`${filepathBase}-screenshot.png`, screenshot, { encoding: 'base64' })
+ // capture dom source
+ const htmlSource = await driver.getPageSource()
+ await pify(fs.writeFile)(`${filepathBase}-dom.html`, htmlSource)
+ }
+
})
diff --git a/test/integration/lib/tx-list-items.js b/test/integration/lib/tx-list-items.js
new file mode 100644
index 000000000..d0056eb94
--- /dev/null
+++ b/test/integration/lib/tx-list-items.js
@@ -0,0 +1,61 @@
+const reactTriggerChange = require('../../lib/react-trigger-change')
+const {
+ timeout,
+ queryAsync,
+ findAsync,
+} = require('../../lib/util')
+
+QUnit.module('tx list items')
+
+QUnit.test('renders list items successfully', (assert) => {
+ const done = assert.async()
+ runTxListItemsTest(assert).then(done).catch((err) => {
+ assert.notOk(err, `Error was thrown: ${err.stack}`)
+ done()
+ })
+})
+
+async function runTxListItemsTest(assert, done) {
+ console.log('*** start runTxListItemsTest')
+ const selectState = await queryAsync($, 'select')
+ selectState.val('tx list items')
+ reactTriggerChange(selectState[0])
+
+ const metamaskLogo = await queryAsync($, '.left-menu-wrapper')
+ assert.ok(metamaskLogo[0], 'metamask logo present')
+ metamaskLogo[0].click()
+
+ const txListItems = await queryAsync($, '.tx-list-item')
+ assert.equal(txListItems.length, 8, 'all tx list items are rendered')
+
+ const unapprovedTx = txListItems[0]
+ assert.equal($(unapprovedTx).hasClass('tx-list-pending-item-container'), true, 'unapprovedTx has the correct class')
+
+ const retryTx = txListItems[1]
+ const retryTxLink = await findAsync($(retryTx), '.tx-list-item-retry-link')
+ assert.equal(retryTxLink[0].textContent, 'Increase the gas price on your transaction', 'retryTx has expected link')
+
+ const approvedTx = txListItems[2]
+ const approvedTxRenderedStatus = await findAsync($(approvedTx), '.tx-list-status')
+ assert.equal(approvedTxRenderedStatus[0].textContent, 'Approved', 'approvedTx has correct label')
+
+ const unapprovedMsg = txListItems[3]
+ const unapprovedMsgDescription = await findAsync($(unapprovedMsg), '.tx-list-account')
+ assert.equal(unapprovedMsgDescription[0].textContent, 'Signature Request', 'unapprovedMsg has correct description')
+
+ const failedTx = txListItems[4]
+ const failedTxRenderedStatus = await findAsync($(failedTx), '.tx-list-status')
+ assert.equal(failedTxRenderedStatus[0].textContent, 'Failed', 'failedTx has correct label')
+
+ const shapeShiftTx = txListItems[5]
+ const shapeShiftTxStatus = await findAsync($(shapeShiftTx), '.flex-column div:eq(1)')
+ assert.equal(shapeShiftTxStatus[0].textContent, 'No deposits received', 'shapeShiftTx has correct status')
+
+ const confirmedTokenTx = txListItems[6]
+ const confirmedTokenTxAddress = await findAsync($(confirmedTokenTx), '.tx-list-account')
+ assert.equal(confirmedTokenTxAddress[0].textContent, '0xe7884118...81a9', 'confirmedTokenTx has correct address')
+
+ const rejectedTx = txListItems[7]
+ const rejectedTxRenderedStatus = await findAsync($(rejectedTx), '.tx-list-status')
+ assert.equal(rejectedTxRenderedStatus[0].textContent, 'Rejected', 'rejectedTx has correct label')
+}
diff --git a/test/unit/nonce-tracker-test.js b/test/unit/nonce-tracker-test.js
index 8970cf84d..5a27882ef 100644
--- a/test/unit/nonce-tracker-test.js
+++ b/test/unit/nonce-tracker-test.js
@@ -33,6 +33,42 @@ describe('Nonce Tracker', function () {
})
})
+ describe('sentry issue 476304902', function () {
+ beforeEach(function () {
+ const txGen = new MockTxGen()
+ pendingTxs = txGen.generate({ status: 'submitted' }, {
+ fromNonce: 3,
+ count: 29,
+ })
+ nonceTracker = generateNonceTrackerWith(pendingTxs, [], '0x3')
+ })
+
+ it('should return 9', async function () {
+ this.timeout(15000)
+ const nonceLock = await nonceTracker.getNonceLock('0x7d3517b0d011698406d6e0aed8453f0be2697926')
+ assert.equal(nonceLock.nextNonce, '32', `nonce should be 32 got ${nonceLock.nextNonce}`)
+ await nonceLock.releaseLock()
+ })
+ })
+
+ describe('issue 3670', function () {
+ beforeEach(function () {
+ const txGen = new MockTxGen()
+ pendingTxs = txGen.generate({ status: 'submitted' }, {
+ fromNonce: 6,
+ count: 3,
+ })
+ nonceTracker = generateNonceTrackerWith(pendingTxs, [], '0x6')
+ })
+
+ it('should return 9', async function () {
+ this.timeout(15000)
+ const nonceLock = await nonceTracker.getNonceLock('0x7d3517b0d011698406d6e0aed8453f0be2697926')
+ assert.equal(nonceLock.nextNonce, '9', `nonce should be 9 got ${nonceLock.nextNonce}`)
+ await nonceLock.releaseLock()
+ })
+ })
+
describe('with no previous txs', function () {
beforeEach(function () {
nonceTracker = generateNonceTrackerWith([], [])