mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-12-23 09:52:26 +01:00
Merge pull request #904 from MetaMask/BetterIntegrationTest
Made integration test suite better, added a step to story
This commit is contained in:
commit
eb7cf2bf31
@ -167,7 +167,7 @@ module.exports = class KeyringController extends EventEmitter {
|
|||||||
this.configManager.setSelectedAccount(hexAccount)
|
this.configManager.setSelectedAccount(hexAccount)
|
||||||
return this.setupAccounts(accounts)
|
return this.setupAccounts(accounts)
|
||||||
})
|
})
|
||||||
.then(this.persistAllKeyrings.bind(this))
|
.then(this.persistAllKeyrings.bind(this, password))
|
||||||
.then(this.fullUpdate.bind(this))
|
.then(this.fullUpdate.bind(this))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -226,9 +226,8 @@ module.exports = class KeyringController extends EventEmitter {
|
|||||||
})
|
})
|
||||||
.then((keyrings) => {
|
.then((keyrings) => {
|
||||||
this.keyrings = keyrings
|
this.keyrings = keyrings
|
||||||
return this.setupAccounts()
|
return this.fullUpdate()
|
||||||
})
|
})
|
||||||
.then(this.fullUpdate.bind(this))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add New Keyring
|
// Add New Keyring
|
||||||
@ -250,6 +249,7 @@ module.exports = class KeyringController extends EventEmitter {
|
|||||||
this.keyrings.push(keyring)
|
this.keyrings.push(keyring)
|
||||||
return this.setupAccounts(accounts)
|
return this.setupAccounts(accounts)
|
||||||
})
|
})
|
||||||
|
.then(() => { return this.password })
|
||||||
.then(this.persistAllKeyrings.bind(this))
|
.then(this.persistAllKeyrings.bind(this))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
return keyring
|
return keyring
|
||||||
@ -692,6 +692,9 @@ module.exports = class KeyringController extends EventEmitter {
|
|||||||
// Takes an account address and an iterator representing
|
// Takes an account address and an iterator representing
|
||||||
// the current number of named accounts.
|
// the current number of named accounts.
|
||||||
getBalanceAndNickname (account) {
|
getBalanceAndNickname (account) {
|
||||||
|
if (!account) {
|
||||||
|
throw new Error('Problem loading account.')
|
||||||
|
}
|
||||||
const address = normalize(account)
|
const address = normalize(account)
|
||||||
this.ethStore.addAccount(address)
|
this.ethStore.addAccount(address)
|
||||||
return this.createNickname(address)
|
return this.createNickname(address)
|
||||||
@ -725,7 +728,9 @@ module.exports = class KeyringController extends EventEmitter {
|
|||||||
// encrypts that array with the provided `password`,
|
// encrypts that array with the provided `password`,
|
||||||
// and persists that encrypted string to storage.
|
// and persists that encrypted string to storage.
|
||||||
persistAllKeyrings (password = this.password) {
|
persistAllKeyrings (password = this.password) {
|
||||||
this.password = password
|
if (typeof password === 'string') {
|
||||||
|
this.password = password
|
||||||
|
}
|
||||||
return Promise.all(this.keyrings.map((keyring) => {
|
return Promise.all(this.keyrings.map((keyring) => {
|
||||||
return Promise.all([keyring.type, keyring.serialize()])
|
return Promise.all([keyring.type, keyring.serialize()])
|
||||||
.then((serializedKeyringArray) => {
|
.then((serializedKeyringArray) => {
|
||||||
|
@ -3,6 +3,7 @@ const MetamaskConfig = require('../config.js')
|
|||||||
const migrations = require('./migrations')
|
const migrations = require('./migrations')
|
||||||
const rp = require('request-promise')
|
const rp = require('request-promise')
|
||||||
const ethUtil = require('ethereumjs-util')
|
const ethUtil = require('ethereumjs-util')
|
||||||
|
const normalize = require('./sig-util').normalize
|
||||||
|
|
||||||
const TESTNET_RPC = MetamaskConfig.network.testnet
|
const TESTNET_RPC = MetamaskConfig.network.testnet
|
||||||
const MAINNET_RPC = MetamaskConfig.network.mainnet
|
const MAINNET_RPC = MetamaskConfig.network.mainnet
|
||||||
@ -273,13 +274,13 @@ ConfigManager.prototype.getWalletNicknames = function () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ConfigManager.prototype.nicknameForWallet = function (account) {
|
ConfigManager.prototype.nicknameForWallet = function (account) {
|
||||||
const address = ethUtil.addHexPrefix(account.toLowerCase())
|
const address = normalize(account)
|
||||||
const nicknames = this.getWalletNicknames()
|
const nicknames = this.getWalletNicknames()
|
||||||
return nicknames[address]
|
return nicknames[address]
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigManager.prototype.setNicknameForWallet = function (account, nickname) {
|
ConfigManager.prototype.setNicknameForWallet = function (account, nickname) {
|
||||||
const address = ethUtil.addHexPrefix(account.toLowerCase())
|
const address = normalize(account)
|
||||||
const nicknames = this.getWalletNicknames()
|
const nicknames = this.getWalletNicknames()
|
||||||
nicknames[address] = nickname
|
nicknames[address] = nickname
|
||||||
var data = this.getData()
|
var data = this.getData()
|
||||||
|
31
development/test.html
Normal file
31
development/test.html
Normal file
@ -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>
|
@ -1,7 +1,7 @@
|
|||||||
function wait() {
|
function wait(time) {
|
||||||
return new Promise(function(resolve, reject) {
|
return new Promise(function(resolve, reject) {
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
resolve()
|
resolve()
|
||||||
}, 500)
|
}, time || 500)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
<script src="bundle.js"></script>
|
<script src="bundle.js"></script>
|
||||||
<script src="/testem.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>
|
<p>Your browser does not support iframes</p>
|
||||||
</iframe>
|
</iframe>
|
||||||
</body>
|
</body>
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
var encryptor = require('../../../app/scripts/lib/encryptor')
|
var encryptor = require('../../../app/scripts/lib/encryptor')
|
||||||
|
|
||||||
|
QUnit.module('encryptor')
|
||||||
|
|
||||||
QUnit.test('encryptor:serializeBufferForStorage', function (assert) {
|
QUnit.test('encryptor:serializeBufferForStorage', function (assert) {
|
||||||
assert.expect(1)
|
assert.expect(1)
|
||||||
var buf = new Buffer(2)
|
var buf = new Buffer(2)
|
||||||
@ -65,3 +67,5 @@ QUnit.test('encryptor:encrypt & decrypt with wrong password', function(assert) {
|
|||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
const PASSWORD = 'password123'
|
||||||
|
|
||||||
|
QUnit.module('first time usage')
|
||||||
|
|
||||||
QUnit.test('agree to terms', function (assert) {
|
QUnit.test('agree to terms', function (assert) {
|
||||||
var done = assert.async()
|
var done = assert.async()
|
||||||
let app
|
let app
|
||||||
@ -6,10 +10,81 @@ QUnit.test('agree to terms', function (assert) {
|
|||||||
app = $('iframe').contents().find('#app-content .mock-app-root')
|
app = $('iframe').contents().find('#app-content .mock-app-root')
|
||||||
app.find('.markdown').prop('scrollTop', 100000000)
|
app.find('.markdown').prop('scrollTop', 100000000)
|
||||||
return wait()
|
return wait()
|
||||||
|
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
|
|
||||||
var title = app.find('h1').text()
|
var title = app.find('h1').text()
|
||||||
assert.equal(title, 'MetaMask', 'title screen')
|
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()
|
done()
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -5,7 +5,11 @@ var actions = {
|
|||||||
goHome: goHome,
|
goHome: goHome,
|
||||||
// menu state
|
// menu state
|
||||||
getNetworkStatus: 'getNetworkStatus',
|
getNetworkStatus: 'getNetworkStatus',
|
||||||
|
// transition state
|
||||||
|
TRANSITION_FORWARD: 'TRANSITION_FORWARD',
|
||||||
|
TRANSITION_BACKWARD: 'TRANSITION_BACKWARD',
|
||||||
|
transitionForward,
|
||||||
|
transitionBackward,
|
||||||
// remote state
|
// remote state
|
||||||
UPDATE_METAMASK_STATE: 'UPDATE_METAMASK_STATE',
|
UPDATE_METAMASK_STATE: 'UPDATE_METAMASK_STATE',
|
||||||
updateMetamaskState: updateMetamaskState,
|
updateMetamaskState: updateMetamaskState,
|
||||||
@ -166,16 +170,25 @@ function tryUnlockMetamask (password) {
|
|||||||
if (err) {
|
if (err) {
|
||||||
dispatch(actions.unlockFailed(err.message))
|
dispatch(actions.unlockFailed(err.message))
|
||||||
} else {
|
} else {
|
||||||
let selectedAccount
|
dispatch(actions.transitionForward())
|
||||||
try {
|
dispatch(actions.updateMetamaskState(newState))
|
||||||
selectedAccount = newState.metamask.selectedAccount
|
|
||||||
} catch (e) {}
|
|
||||||
dispatch(actions.unlockMetamask(selectedAccount))
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function transitionForward() {
|
||||||
|
return {
|
||||||
|
type: this.TRANSITION_FORWARD,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function transitionBackward() {
|
||||||
|
return {
|
||||||
|
type: this.TRANSITION_BACKWARD,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function confirmSeedWords () {
|
function confirmSeedWords () {
|
||||||
return (dispatch) => {
|
return (dispatch) => {
|
||||||
dispatch(actions.showLoadingIndication())
|
dispatch(actions.showLoadingIndication())
|
||||||
@ -204,10 +217,11 @@ function createNewVaultAndRestore (password, seed) {
|
|||||||
|
|
||||||
function createNewVaultAndKeychain (password) {
|
function createNewVaultAndKeychain (password) {
|
||||||
return (dispatch) => {
|
return (dispatch) => {
|
||||||
background.createNewVaultAndKeychain(password, (err) => {
|
background.createNewVaultAndKeychain(password, (err, newState) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return dispatch(actions.showWarning(err.message))
|
return dispatch(actions.showWarning(err.message))
|
||||||
}
|
}
|
||||||
|
dispatch(actions.updateMetamaskState(newState))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -446,11 +460,12 @@ function updateMetamaskState (newState) {
|
|||||||
|
|
||||||
function lockMetamask () {
|
function lockMetamask () {
|
||||||
return (dispatch) => {
|
return (dispatch) => {
|
||||||
background.setLocked((err) => {
|
background.setLocked((err, newState) => {
|
||||||
dispatch(actions.hideLoadingIndication())
|
dispatch(actions.hideLoadingIndication())
|
||||||
if (err) {
|
if (err) {
|
||||||
return dispatch(actions.displayWarning(err.message))
|
return dispatch(actions.displayWarning(err.message))
|
||||||
}
|
}
|
||||||
|
dispatch(actions.updateMetamaskState(newState))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,19 @@ function reduceApp (state, action) {
|
|||||||
|
|
||||||
switch (action.type) {
|
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:
|
case actions.SHOW_CREATE_VAULT:
|
||||||
return extend(appState, {
|
return extend(appState, {
|
||||||
|
Loading…
Reference in New Issue
Block a user