Fix outdated transitions

Fixes #151

- Cancelling or completing a tx now goes back to account detail view.
- Restoring a vault now does not select an unloaded account, shows account list.
- Account list now never selects an item only uses the cells as buttons.
This commit is contained in:
Dan Finlay 2016-04-29 15:53:29 -07:00
parent 8421c97db2
commit 988165224b
5 changed files with 35 additions and 41 deletions

View File

@ -12,6 +12,7 @@
- Transaction list now only shows transactions for the current account.
- Transaction list now only shows transactions for the current network (mainnet, testnet, testrpc).
- Fixed transaction links to etherscan blockchain explorer.
- Fixed some UI transitions that had weird behavior.
# 1.6.0 2016-04-22

View File

@ -2,11 +2,21 @@ var jsdom = require('mocha-jsdom')
var assert = require('assert')
var freeze = require('deep-freeze-strict')
var path = require('path')
var sinon = require('sinon')
var actions = require(path.join(__dirname, '..', '..', '..', 'ui', 'app', 'actions.js'))
var reducers = require(path.join(__dirname, '..', '..', '..', 'ui', 'app', 'reducers.js'))
describe('tx confirmation screen', function() {
describe.only('tx confirmation screen', function() {
beforeEach(function() {
this.sinon = sinon.sandbox.create();
});
afterEach(function(){
this.sinon.restore();
});
var initialState, result
describe('when there is only one tx', function() {
@ -42,14 +52,13 @@ describe('tx confirmation screen', function() {
clearSeedWordCache(cb) { cb() },
})
actions.cancelTx({id: firstTxId})(function(action) {
result = reducers(initialState, action)
done()
})
let action = actions.cancelTx({id: firstTxId})
result = reducers(initialState, action)
done()
})
it('should transition to the accounts list', function() {
assert.equal(result.appState.currentView.name, 'accounts')
it('should transition to the account detail view', function() {
assert.equal(result.appState.currentView.name, 'accountDetail')
})
it('should have no unconfirmed txs remaining', function() {
@ -67,7 +76,7 @@ describe('tx confirmation screen', function() {
alert = () => {/* noop */}
actions._setAccountManager({
approveTransaction(txId, cb) { cb('An error!') },
approveTransaction(txId, cb) { cb({message: 'An error!'}) },
})
actions.sendTx({id: firstTxId})(function(action) {
@ -86,23 +95,15 @@ describe('tx confirmation screen', function() {
})
describe('when there is success', function() {
before(function(done) {
it('should complete tx and go home', function() {
actions._setAccountManager({
approveTransaction(txId, cb) { cb() },
})
actions.sendTx({id: firstTxId})(function(action) {
result = reducers(initialState, action)
done()
})
})
var dispatchExpect = sinon.mock()
dispatchExpect.twice()
it('should navigate away from the tx page', function() {
assert.equal(result.appState.currentView.name, 'accounts')
})
it('should clear the tx from the unconfirmed transactions', function() {
assert(!(firstTxId in result.metamask.unconfTxs), 'tx is cleared')
actions.sendTx({id: firstTxId})(dispatchExpect)
})
})
})
@ -134,15 +135,14 @@ describe('tx confirmation screen', function() {
}
freeze(initialState)
actions._setAccountManager({
approveTransaction(txId, cb) { cb() },
})
actions.sendTx({id: firstTxId})(function(action) {
let action = actions.sendTx({id: firstTxId})(function(action) {
result = reducers(initialState, action)
done()
})
done()
})
it('should stay on the confTx view', function() {

View File

@ -91,7 +91,7 @@ AccountsScreen.prototype.render = function() {
var componentState = extend(actions, {
identity: identity,
account: account,
isSelected: isSelected,
isSelected: false,
isFauceting: isFauceting,
})
return h(AccountPanel, componentState)

View File

@ -131,15 +131,11 @@ function recoverFromSeed(password, seed) {
// dispatch(this.createNewVaultInProgress())
dispatch(this.showLoadingIndication())
_accountManager.recoverFromSeed(password, seed, (err, selectedAccount) => {
if (err) {
dispatch(this.hideLoadingIndication())
var message = err.message
return dispatch(this.displayWarning(err.message))
}
dispatch(this.hideLoadingIndication())
if (err) return dispatch(this.displayWarning(err.message))
dispatch(this.unlockMetamask())
dispatch(this.showAccountDetail(selectedAccount))
dispatch(this.hideLoadingIndication())
dispatch(this.showAccountsPage())
})
}
}
@ -165,7 +161,7 @@ function signTx(txData) {
if (err) return dispatch(this.displayWarning(err.message))
dispatch(this.hideWarning())
dispatch(this.showAccountsPage())
dispatch(this.goHome())
})
}
}
@ -198,10 +194,8 @@ function txError(err) {
}
function cancelTx(txData){
return (dispatch) => {
_accountManager.cancelTransaction(txData.id)
dispatch(this.showAccountsPage())
}
_accountManager.cancelTransaction(txData.id)
return this.goHome()
}
//

View File

@ -198,13 +198,12 @@ function reduceApp(state, action) {
})
} else {
return extend(appState, {
transForward: false,
currentView: {
name: 'accounts',
context: 0,
},
transForward: false,
warning: null,
currentView: {
name: 'accountDetail',
context: appState.currentView.context,
},
})
}