From 8421c97db21af0bc616fa6c0671f6f1a3b60b815 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Fri, 29 Apr 2016 17:02:26 -0700 Subject: [PATCH 1/2] Bumped changelog for transaction list enhancements --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2e9e1afa..d2d471556 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,9 @@ - Account icons are now "identicons" (deterministically generated from the address). - Fixed link to Slack channel. - Added a context guard for "define" to avoid UMD's exporting themselves to the wrong module system +- 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. # 1.6.0 2016-04-22 From 988165224b41c1eb3fe1b639b5801204936000e1 Mon Sep 17 00:00:00 2001 From: Dan Finlay Date: Fri, 29 Apr 2016 15:53:29 -0700 Subject: [PATCH 2/2] 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. --- CHANGELOG.md | 1 + test/unit/actions/tx_test.js | 46 ++++++++++++++++++------------------ ui/app/accounts.js | 2 +- ui/app/actions.js | 18 +++++--------- ui/app/reducers/app.js | 7 +++--- 5 files changed, 34 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d2d471556..6a9624d6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/test/unit/actions/tx_test.js b/test/unit/actions/tx_test.js index b15bee393..1eb759511 100644 --- a/test/unit/actions/tx_test.js +++ b/test/unit/actions/tx_test.js @@ -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() - }) - }) - - it('should navigate away from the tx page', function() { - assert.equal(result.appState.currentView.name, 'accounts') - }) + var dispatchExpect = sinon.mock() + dispatchExpect.twice() - 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() { diff --git a/ui/app/accounts.js b/ui/app/accounts.js index d35e80678..0cc72878c 100644 --- a/ui/app/accounts.js +++ b/ui/app/accounts.js @@ -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) diff --git a/ui/app/actions.js b/ui/app/actions.js index a2106ea85..12e20e0cf 100644 --- a/ui/app/actions.js +++ b/ui/app/actions.js @@ -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() } // diff --git a/ui/app/reducers/app.js b/ui/app/reducers/app.js index 143a67527..57cdccbac 100644 --- a/ui/app/reducers/app.js +++ b/ui/app/reducers/app.js @@ -199,12 +199,11 @@ function reduceApp(state, action) { } else { return extend(appState, { transForward: false, + warning: null, currentView: { - name: 'accounts', - context: 0, + name: 'accountDetail', + context: appState.currentView.context, }, - transForward: false, - warning: null, }) }