diff options
Moved UI into repo with its own dependency stack
Diffstat (limited to 'ui/test/unit/actions')
-rw-r--r-- | ui/test/unit/actions/config_test.js | 43 | ||||
-rw-r--r-- | ui/test/unit/actions/restore_vault_test.js | 54 | ||||
-rw-r--r-- | ui/test/unit/actions/set_selected_account_test.js | 28 | ||||
-rw-r--r-- | ui/test/unit/actions/tx_test.js | 168 | ||||
-rw-r--r-- | ui/test/unit/actions/view_info_test.js | 23 | ||||
-rw-r--r-- | ui/test/unit/actions/warning_test.js | 24 |
6 files changed, 340 insertions, 0 deletions
diff --git a/ui/test/unit/actions/config_test.js b/ui/test/unit/actions/config_test.js new file mode 100644 index 000000000..d38210bfc --- /dev/null +++ b/ui/test/unit/actions/config_test.js @@ -0,0 +1,43 @@ +var jsdom = require('mocha-jsdom') +var assert = require('assert') +var freeze = require('deep-freeze-strict') +var path = require('path') + +var actions = require(path.join(__dirname, '..', '..', '..', 'app', 'actions.js')) +var reducers = require(path.join(__dirname, '..', '..', '..', 'app', 'reducers.js')) + +describe ('config view actions', function() { + + var initialState = { + metamask: { + rpcTarget: 'foo', + }, + appState: { + currentView: { + name: 'accounts', + } + } + } + freeze(initialState) + + describe('SHOW_CONFIG_PAGE', function() { + it('should set appState.currentView.name to config', function() { + var result = reducers(initialState, actions.showConfigPage()) + assert.equal(result.appState.currentView.name, 'config') + }) + }) + + describe('SET_RPC_TARGET', function() { + + it('sets the state.metamask.rpcTarget property of the state to the action.value', function() { + const action = { + type: actions.SET_RPC_TARGET, + value: 'bar', + } + + var result = reducers(initialState, action) + assert.equal(result.metamask.rpcTarget, action.value) + }) + }) +}) + diff --git a/ui/test/unit/actions/restore_vault_test.js b/ui/test/unit/actions/restore_vault_test.js new file mode 100644 index 000000000..da0d71ce7 --- /dev/null +++ b/ui/test/unit/actions/restore_vault_test.js @@ -0,0 +1,54 @@ +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, '..', '..', '..', 'app', 'actions.js')) +var reducers = require(path.join(__dirname, '..', '..', '..', 'app', 'reducers.js')) + +describe('#recoverFromSeed(password, seed)', function() { + + beforeEach(function() { + // sinon allows stubbing methods that are easily verified + this.sinon = sinon.sandbox.create() + }) + + afterEach(function() { + // sinon requires cleanup otherwise it will overwrite context + this.sinon.restore() + }) + + // stub out account manager + actions._setAccountManager({ + recoverFromSeed(pw, seed, cb) { cb() }, + }) + + it('sets metamask.isUnlocked to true', function() { + var initialState = { + metamask: { + isUnlocked: false, + isInitialized: false, + } + } + freeze(initialState) + + const restorePhrase = 'invite heavy among daring outdoor dice jelly coil stable note seat vicious' + const password = 'foo' + const dispatchFunc = actions.recoverFromSeed(password, restorePhrase) + + var dispatchStub = this.sinon.stub() + dispatchStub.withArgs({ TYPE: actions.unlockMetamask() }).onCall(0) + dispatchStub.withArgs({ TYPE: actions.showAccountsPage() }).onCall(1) + + var action + var resultingState = initialState + dispatchFunc((newAction) => { + action = newAction + resultingState = reducers(resultingState, action) + }) + + assert.equal(resultingState.metamask.isUnlocked, true, 'was unlocked') + assert.equal(resultingState.metamask.isInitialized, true, 'was initialized') + }); +}); diff --git a/ui/test/unit/actions/set_selected_account_test.js b/ui/test/unit/actions/set_selected_account_test.js new file mode 100644 index 000000000..1af6c964f --- /dev/null +++ b/ui/test/unit/actions/set_selected_account_test.js @@ -0,0 +1,28 @@ +var jsdom = require('mocha-jsdom') +var assert = require('assert') +var freeze = require('deep-freeze-strict') +var path = require('path') + +var actions = require(path.join(__dirname, '..', '..', '..', 'app', 'actions.js')) +var reducers = require(path.join(__dirname, '..', '..', '..', 'app', 'reducers.js')) + +describe('SET_SELECTED_ACCOUNT', function() { + + it('sets the state.appState.activeAddress property of the state to the action.value', function() { + var initialState = { + appState: { + activeAddress: 'foo', + } + } + freeze(initialState) + + const action = { + type: actions.SET_SELECTED_ACCOUNT, + value: 'bar', + } + freeze(action) + + var resultingState = reducers(initialState, action) + assert.equal(resultingState.appState.activeAddress, action.value) + }); +}); diff --git a/ui/test/unit/actions/tx_test.js b/ui/test/unit/actions/tx_test.js new file mode 100644 index 000000000..d83ae16c0 --- /dev/null +++ b/ui/test/unit/actions/tx_test.js @@ -0,0 +1,168 @@ +var jsdom = require('mocha-jsdom') +var assert = require('assert') +var freeze = require('deep-freeze-strict') +var path = require('path') + +var actions = require(path.join(__dirname, '..', '..', '..', 'app', 'actions.js')) +var reducers = require(path.join(__dirname, '..', '..', '..', 'app', 'reducers.js')) + +describe('tx confirmation screen', function() { + var initialState, result + + describe('when there is only one tx', function() { + var firstTxId = 1457634084250832 + + beforeEach(function() { + + initialState = { + appState: { + currentView: { + name: 'confTx', + }, + }, + metamask: { + unconfTxs: { + '1457634084250832': { + id: 1457634084250832, + status: "unconfirmed", + time: 1457634084250, + } + }, + } + } + freeze(initialState) + }) + + describe('cancelTx', function() { + + before(function(done) { + actions._setAccountManager({ + approveTransaction(txId, cb) { cb('An error!') }, + cancelTransaction(txId) { /* noop */ }, + clearSeedWordCache(cb) { cb() }, + }) + + actions.cancelTx({id: firstTxId})(function(action) { + result = reducers(initialState, action) + done() + }) + }) + + it('should transition to the accounts list', function() { + assert.equal(result.appState.currentView.name, 'accounts') + }) + + it('should have no unconfirmed txs remaining', function() { + var count = getUnconfirmedTxCount(result) + assert.equal(count, 0) + }) + }) + + describe('sendTx', function() { + var result + + describe('when there is an error', function() { + + before(function(done) { + alert = () => {/* noop */} + + actions._setAccountManager({ + approveTransaction(txId, cb) { cb('An error!') }, + }) + + actions.sendTx({id: firstTxId})(function(action) { + result = reducers(initialState, action) + done() + }) + }) + + it('should stay on the page', function() { + assert.equal(result.appState.currentView.name, 'confTx') + }) + + it('should set errorMessage on the currentView', function() { + assert(result.appState.currentView.errorMessage) + }) + }) + + describe('when there is success', function() { + before(function(done) { + 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') + }) + + it('should clear the tx from the unconfirmed transactions', function() { + assert(!(firstTxId in result.metamask.unconfTxs), 'tx is cleared') + }) + }) + }) + + describe('when there are two pending txs', function() { + var firstTxId = 1457634084250832 + var result, initialState + before(function(done) { + initialState = { + appState: { + currentView: { + name: 'confTx', + }, + }, + metamask: { + unconfTxs: { + '1457634084250832': { + id: 1457634084250832, + status: "unconfirmed", + time: 1457634084250, + }, + '1457634084250833': { + id: 1457634084250833, + status: "unconfirmed", + time: 1457634084255, + }, + }, + } + } + freeze(initialState) + + + actions._setAccountManager({ + approveTransaction(txId, cb) { cb() }, + }) + + actions.sendTx({id: firstTxId})(function(action) { + result = reducers(initialState, action) + done() + }) + }) + + it('should stay on the confTx view', function() { + assert.equal(result.appState.currentView.name, 'confTx') + }) + + it('should transition to the first tx', function() { + assert.equal(result.appState.currentView.context, 0) + }) + + it('should only have one unconfirmed tx remaining', function() { + var count = getUnconfirmedTxCount(result) + assert.equal(count, 1) + }) + }) + }) +}); + +function getUnconfirmedTxCount(state) { + var txs = state.metamask.unconfTxs + var count = Object.keys(txs).length + return count +} diff --git a/ui/test/unit/actions/view_info_test.js b/ui/test/unit/actions/view_info_test.js new file mode 100644 index 000000000..888712c67 --- /dev/null +++ b/ui/test/unit/actions/view_info_test.js @@ -0,0 +1,23 @@ +var jsdom = require('mocha-jsdom') +var assert = require('assert') +var freeze = require('deep-freeze-strict') +var path = require('path') + +var actions = require(path.join(__dirname, '..', '..', '..', 'app', 'actions.js')) +var reducers = require(path.join(__dirname, '..', '..', '..', 'app', 'reducers.js')) + +describe('SHOW_INFO_PAGE', function() { + + it('sets the state.appState.currentView.name property to info', function() { + var initialState = { + appState: { + activeAddress: 'foo', + } + } + freeze(initialState) + + const action = actions.showInfoPage() + var resultingState = reducers(initialState, action) + assert.equal(resultingState.appState.currentView.name, 'info') + }); +}); diff --git a/ui/test/unit/actions/warning_test.js b/ui/test/unit/actions/warning_test.js new file mode 100644 index 000000000..eee198656 --- /dev/null +++ b/ui/test/unit/actions/warning_test.js @@ -0,0 +1,24 @@ +var jsdom = require('mocha-jsdom') +var assert = require('assert') +var freeze = require('deep-freeze-strict') +var path = require('path') + +var actions = require(path.join(__dirname, '..', '..', '..', 'app', 'actions.js')) +var reducers = require(path.join(__dirname, '..', '..', '..', 'app', 'reducers.js')) + +describe('action DISPLAY_WARNING', function() { + + it('sets appState.warning to provided value', function() { + var initialState = { + appState: {}, + } + freeze(initialState) + + const warningText = 'This is a sample warning message' + + const action = actions.displayWarning(warningText) + const resultingState = reducers(initialState, action) + + assert.equal(resultingState.appState.warning, warningText, 'warning text set') + }); +}); |