aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkumavis <kumavis@users.noreply.github.com>2016-12-02 02:30:31 +0800
committerGitHub <noreply@github.com>2016-12-02 02:30:31 +0800
commiteb7cf2bf310419246b59044e80c88a2bcabb9c34 (patch)
treef1f3bff45a4e6951bb073aa6684791908901afb3
parent5af41573638e438f4af496afe18d9a01f89c7733 (diff)
parentc43178360203b4571d9e00880b5bf2806908c179 (diff)
downloadtangerine-wallet-browser-eb7cf2bf310419246b59044e80c88a2bcabb9c34.tar.gz
tangerine-wallet-browser-eb7cf2bf310419246b59044e80c88a2bcabb9c34.tar.zst
tangerine-wallet-browser-eb7cf2bf310419246b59044e80c88a2bcabb9c34.zip
Merge pull request #904 from MetaMask/BetterIntegrationTest
Made integration test suite better, added a step to story
-rw-r--r--app/scripts/keyring-controller.js13
-rw-r--r--app/scripts/lib/config-manager.js5
-rw-r--r--development/test.html31
-rw-r--r--test/integration/helpers.js4
-rw-r--r--test/integration/index.html2
-rw-r--r--test/integration/lib/encryptor-test.js4
-rw-r--r--test/integration/lib/first-time.js75
-rw-r--r--ui/app/actions.js31
-rw-r--r--ui/app/reducers/app.js14
9 files changed, 161 insertions, 18 deletions
diff --git a/app/scripts/keyring-controller.js b/app/scripts/keyring-controller.js
index ac9409dbb..40c9695dd 100644
--- a/app/scripts/keyring-controller.js
+++ b/app/scripts/keyring-controller.js
@@ -167,7 +167,7 @@ module.exports = class KeyringController extends EventEmitter {
this.configManager.setSelectedAccount(hexAccount)
return this.setupAccounts(accounts)
})
- .then(this.persistAllKeyrings.bind(this))
+ .then(this.persistAllKeyrings.bind(this, password))
.then(this.fullUpdate.bind(this))
}
@@ -226,9 +226,8 @@ module.exports = class KeyringController extends EventEmitter {
})
.then((keyrings) => {
this.keyrings = keyrings
- return this.setupAccounts()
+ return this.fullUpdate()
})
- .then(this.fullUpdate.bind(this))
}
// Add New Keyring
@@ -250,6 +249,7 @@ module.exports = class KeyringController extends EventEmitter {
this.keyrings.push(keyring)
return this.setupAccounts(accounts)
})
+ .then(() => { return this.password })
.then(this.persistAllKeyrings.bind(this))
.then(() => {
return keyring
@@ -692,6 +692,9 @@ module.exports = class KeyringController extends EventEmitter {
// Takes an account address and an iterator representing
// the current number of named accounts.
getBalanceAndNickname (account) {
+ if (!account) {
+ throw new Error('Problem loading account.')
+ }
const address = normalize(account)
this.ethStore.addAccount(address)
return this.createNickname(address)
@@ -725,7 +728,9 @@ module.exports = class KeyringController extends EventEmitter {
// encrypts that array with the provided `password`,
// and persists that encrypted string to storage.
persistAllKeyrings (password = this.password) {
- this.password = password
+ if (typeof password === 'string') {
+ this.password = password
+ }
return Promise.all(this.keyrings.map((keyring) => {
return Promise.all([keyring.type, keyring.serialize()])
.then((serializedKeyringArray) => {
diff --git a/app/scripts/lib/config-manager.js b/app/scripts/lib/config-manager.js
index 8e63265d2..59cc2b63c 100644
--- a/app/scripts/lib/config-manager.js
+++ b/app/scripts/lib/config-manager.js
@@ -3,6 +3,7 @@ const MetamaskConfig = require('../config.js')
const migrations = require('./migrations')
const rp = require('request-promise')
const ethUtil = require('ethereumjs-util')
+const normalize = require('./sig-util').normalize
const TESTNET_RPC = MetamaskConfig.network.testnet
const MAINNET_RPC = MetamaskConfig.network.mainnet
@@ -273,13 +274,13 @@ ConfigManager.prototype.getWalletNicknames = function () {
}
ConfigManager.prototype.nicknameForWallet = function (account) {
- const address = ethUtil.addHexPrefix(account.toLowerCase())
+ const address = normalize(account)
const nicknames = this.getWalletNicknames()
return nicknames[address]
}
ConfigManager.prototype.setNicknameForWallet = function (account, nickname) {
- const address = ethUtil.addHexPrefix(account.toLowerCase())
+ const address = normalize(account)
const nicknames = this.getWalletNicknames()
nicknames[address] = nickname
var data = this.getData()
diff --git a/development/test.html b/development/test.html
new file mode 100644
index 000000000..702be7fa0
--- /dev/null
+++ b/development/test.html
@@ -0,0 +1,31 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>MetaMask</title>
+
+ <script>
+ window.METAMASK_DEBUG = true
+ window.TEST_MODE = true
+ </script>
+ </head>
+ <body>
+
+ <!-- app content -->
+ <div id="app-content" style="height: 100%"></div>
+ <script src="./bundle.js" type="text/javascript" charset="utf-8"></script>
+
+ </body>
+
+<style>
+html, body, #app-content, .super-dev-container {
+ height: 100%;
+ width: 100%;
+ position: relative;
+ background: white;
+}
+.mock-app-root {
+ background: #F7F7F7;
+}
+</style>
+</html>
diff --git a/test/integration/helpers.js b/test/integration/helpers.js
index 95c36017a..40f78d701 100644
--- a/test/integration/helpers.js
+++ b/test/integration/helpers.js
@@ -1,7 +1,7 @@
-function wait() {
+function wait(time) {
return new Promise(function(resolve, reject) {
setTimeout(function() {
resolve()
- }, 500)
+ }, time || 500)
})
}
diff --git a/test/integration/index.html b/test/integration/index.html
index ad4b4eb14..8a54cb829 100644
--- a/test/integration/index.html
+++ b/test/integration/index.html
@@ -15,7 +15,7 @@
<script src="bundle.js"></script>
<script src="/testem.js"></script>
- <iframe src="/development/index.html" height="500px" width="360px">
+ <iframe src="/development/test.html" height="500px" width="360px">
<p>Your browser does not support iframes</p>
</iframe>
</body>
diff --git a/test/integration/lib/encryptor-test.js b/test/integration/lib/encryptor-test.js
index d42608152..897d22740 100644
--- a/test/integration/lib/encryptor-test.js
+++ b/test/integration/lib/encryptor-test.js
@@ -1,5 +1,7 @@
var encryptor = require('../../../app/scripts/lib/encryptor')
+QUnit.module('encryptor')
+
QUnit.test('encryptor:serializeBufferForStorage', function (assert) {
assert.expect(1)
var buf = new Buffer(2)
@@ -65,3 +67,5 @@ QUnit.test('encryptor:encrypt & decrypt with wrong password', function(assert) {
done()
})
})
+
+
diff --git a/test/integration/lib/first-time.js b/test/integration/lib/first-time.js
index a73b0cba3..12c573db1 100644
--- a/test/integration/lib/first-time.js
+++ b/test/integration/lib/first-time.js
@@ -1,3 +1,7 @@
+const PASSWORD = 'password123'
+
+QUnit.module('first time usage')
+
QUnit.test('agree to terms', function (assert) {
var done = assert.async()
let app
@@ -6,10 +10,81 @@ QUnit.test('agree to terms', function (assert) {
app = $('iframe').contents().find('#app-content .mock-app-root')
app.find('.markdown').prop('scrollTop', 100000000)
return wait()
+
}).then(function() {
+
var title = app.find('h1').text()
assert.equal(title, 'MetaMask', 'title screen')
+ var pwBox = app.find('#password-box')[0]
+ var confBox = app.find('#password-box-confirm')[0]
+
+ pwBox.value = PASSWORD
+ confBox.value = PASSWORD
+ return wait()
+
+ }).then(function() {
+
+ var createButton = app.find('button.primary')[0]
+ createButton.click()
+
+ return wait(1500)
+ }).then(function() {
+
+ var terms = app.find('h3.terms-header')[0]
+ assert.equal(terms.textContent, 'MetaMask Terms & Conditions', 'Showing TOS')
+
+ // Scroll through terms
+ var scrollable = app.find('.markdown')[0]
+ scrollable.scrollTop = scrollable.scrollHeight
+
+ return wait(10)
+ }).then(function() {
+
+ var button = app.find('button')[0] // Agree button
+ button.click()
+
+ return wait(1000)
+ }).then(function() {
+
+ var created = app.find('h3')[0]
+ assert.equal(created.textContent, 'Vault Created', 'Vault created screen')
+
+ var button = app.find('button')[0] // Agree button
+ button.click()
+
+ return wait(1000)
+ }).then(function() {
+
+ var detail = app.find('.account-detail-section')[0]
+ assert.ok(detail, 'Account detail section loaded.')
+
+ var sandwich = app.find('.sandwich-expando')[0]
+ sandwich.click()
+
+ return wait()
+ }).then(function() {
+
+ var sandwich = app.find('.menu-droppo')[0]
+ var lock = sandwich.children[2]
+ assert.ok(lock, 'Lock menu item found')
+ lock.click()
+
+ return wait(1000)
+ }).then(function() {
+
+ var pwBox = app.find('#password-box')[0]
+ pwBox.value = PASSWORD
+
+ var createButton = app.find('button.primary')[0]
+ createButton.click()
+
+ return wait(1500)
+ }).then(function() {
+
+ var detail = app.find('.account-detail-section')[0]
+ assert.ok(detail, 'Account detail section loaded again.')
+
done()
})
})
diff --git a/ui/app/actions.js b/ui/app/actions.js
index 8f37b2e4c..41be1004c 100644
--- a/ui/app/actions.js
+++ b/ui/app/actions.js
@@ -5,7 +5,11 @@ var actions = {
goHome: goHome,
// menu state
getNetworkStatus: 'getNetworkStatus',
-
+ // transition state
+ TRANSITION_FORWARD: 'TRANSITION_FORWARD',
+ TRANSITION_BACKWARD: 'TRANSITION_BACKWARD',
+ transitionForward,
+ transitionBackward,
// remote state
UPDATE_METAMASK_STATE: 'UPDATE_METAMASK_STATE',
updateMetamaskState: updateMetamaskState,
@@ -166,16 +170,25 @@ function tryUnlockMetamask (password) {
if (err) {
dispatch(actions.unlockFailed(err.message))
} else {
- let selectedAccount
- try {
- selectedAccount = newState.metamask.selectedAccount
- } catch (e) {}
- dispatch(actions.unlockMetamask(selectedAccount))
+ dispatch(actions.transitionForward())
+ dispatch(actions.updateMetamaskState(newState))
}
})
}
}
+function transitionForward() {
+ return {
+ type: this.TRANSITION_FORWARD,
+ }
+}
+
+function transitionBackward() {
+ return {
+ type: this.TRANSITION_BACKWARD,
+ }
+}
+
function confirmSeedWords () {
return (dispatch) => {
dispatch(actions.showLoadingIndication())
@@ -204,10 +217,11 @@ function createNewVaultAndRestore (password, seed) {
function createNewVaultAndKeychain (password) {
return (dispatch) => {
- background.createNewVaultAndKeychain(password, (err) => {
+ background.createNewVaultAndKeychain(password, (err, newState) => {
if (err) {
return dispatch(actions.showWarning(err.message))
}
+ dispatch(actions.updateMetamaskState(newState))
})
}
}
@@ -446,11 +460,12 @@ function updateMetamaskState (newState) {
function lockMetamask () {
return (dispatch) => {
- background.setLocked((err) => {
+ background.setLocked((err, newState) => {
dispatch(actions.hideLoadingIndication())
if (err) {
return dispatch(actions.displayWarning(err.message))
}
+ dispatch(actions.updateMetamaskState(newState))
})
}
}
diff --git a/ui/app/reducers/app.js b/ui/app/reducers/app.js
index 1f40e90b3..67a926948 100644
--- a/ui/app/reducers/app.js
+++ b/ui/app/reducers/app.js
@@ -43,7 +43,19 @@ function reduceApp (state, action) {
switch (action.type) {
- // intialize
+ // transition methods
+
+ case actions.TRANSITION_FORWARD:
+ return extend(appState, {
+ transForward: true,
+ })
+
+ case actions.TRANSITION_BACKWARD:
+ return extend(appState, {
+ transForward: false,
+ })
+
+ // intialize
case actions.SHOW_CREATE_VAULT:
return extend(appState, {