From 9b92ba4c47d5489c5c0f822045360be708110cac Mon Sep 17 00:00:00 2001 From: frankiebee Date: Mon, 25 Jun 2018 15:07:54 -0700 Subject: trandsactions - remove rejected transactions from history --- .../app/controllers/transactions/tx-state-manager-test.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/transactions/tx-state-manager-test.js b/test/unit/app/controllers/transactions/tx-state-manager-test.js index 20bc08b94..f2d0175cb 100644 --- a/test/unit/app/controllers/transactions/tx-state-manager-test.js +++ b/test/unit/app/controllers/transactions/tx-state-manager-test.js @@ -288,4 +288,18 @@ describe('TransactionStateManager', function () { }) }) + + describe.only('#_removeTx', function () { + it('should remove the transaction from the storage', () => { + txStateManager._saveTxList([ {id: 1} ]) + txStateManager._removeTx(1) + assert(!txStateManager.getFullTxList().length, 'txList should be empty') + }) + + it('should only remove the transaction with ID 1 from the storage', () => { + txStateManager._saveTxList([ {id: 1}, {id: 2} ]) + txStateManager._removeTx(1) + assert.equal(txStateManager.getFullTxList()[0].id, 2, 'txList should have a id of 2') + }) + }) }) -- cgit From 7b1f57e05d7a186be085ffcc8807516499218cba Mon Sep 17 00:00:00 2001 From: frankiebee Date: Mon, 25 Jun 2018 15:16:27 -0700 Subject: woops - remove .only Co-authored-by: @jennypollack --- test/unit/app/controllers/transactions/tx-state-manager-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/transactions/tx-state-manager-test.js b/test/unit/app/controllers/transactions/tx-state-manager-test.js index f2d0175cb..8b7dc78aa 100644 --- a/test/unit/app/controllers/transactions/tx-state-manager-test.js +++ b/test/unit/app/controllers/transactions/tx-state-manager-test.js @@ -289,7 +289,7 @@ describe('TransactionStateManager', function () { }) }) - describe.only('#_removeTx', function () { + describe('#_removeTx', function () { it('should remove the transaction from the storage', () => { txStateManager._saveTxList([ {id: 1} ]) txStateManager._removeTx(1) -- cgit From 94a4f99115cf549a3014d29d828e7a432bf36a62 Mon Sep 17 00:00:00 2001 From: frankiebee Date: Mon, 25 Jun 2018 16:16:51 -0700 Subject: tests - fix cancle transaction test to better fit new behavior --- .../unit/app/controllers/transactions/tx-controller-test.js | 13 ++++++++++--- .../app/controllers/transactions/tx-state-manager-test.js | 10 ---------- 2 files changed, 10 insertions(+), 13 deletions(-) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/transactions/tx-controller-test.js b/test/unit/app/controllers/transactions/tx-controller-test.js index 9bdfe7c1a..4328f38e5 100644 --- a/test/unit/app/controllers/transactions/tx-controller-test.js +++ b/test/unit/app/controllers/transactions/tx-controller-test.js @@ -357,9 +357,16 @@ describe('Transaction Controller', function () { ]) }) - it('should set the transaction to rejected from unapproved', async function () { - await txController.cancelTransaction(0) - assert.equal(txController.txStateManager.getTx(0).status, 'rejected') + it('should emit a status change to rejected', function (done) { + txController.once('tx:status-update', (txId, status) => { + try { + assert.equal(status, 'rejected', 'status should e rejected') + assert.equal(txId, 0, 'id should e 0') + done() + } catch (e) { done(e) } + }) + + txController.cancelTransaction(0) }) }) diff --git a/test/unit/app/controllers/transactions/tx-state-manager-test.js b/test/unit/app/controllers/transactions/tx-state-manager-test.js index 8b7dc78aa..39c2d6337 100644 --- a/test/unit/app/controllers/transactions/tx-state-manager-test.js +++ b/test/unit/app/controllers/transactions/tx-state-manager-test.js @@ -45,16 +45,6 @@ describe('TransactionStateManager', function () { }) describe('#setTxStatusRejected', function () { - it('sets the tx status to rejected', function () { - let tx = { id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} } - txStateManager.addTx(tx) - txStateManager.setTxStatusRejected(1) - let result = txStateManager.getTxList() - assert.ok(Array.isArray(result)) - assert.equal(result.length, 1) - assert.equal(result[0].status, 'rejected') - }) - it('should emit a rejected event to signal the exciton of callback', (done) => { let tx = { id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} } txStateManager.addTx(tx) -- cgit From 6284e664810fe0dcdcb35e55cc57bc11b9298dbb Mon Sep 17 00:00:00 2001 From: Esteban MIno Date: Wed, 27 Jun 2018 22:18:06 -0400 Subject: tests for spec --- test/unit/app/controllers/detect-tokens-test.js | 101 ++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 test/unit/app/controllers/detect-tokens-test.js (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/detect-tokens-test.js b/test/unit/app/controllers/detect-tokens-test.js new file mode 100644 index 000000000..f9f5c902d --- /dev/null +++ b/test/unit/app/controllers/detect-tokens-test.js @@ -0,0 +1,101 @@ +const assert = require('assert') +const sinon = require('sinon') +const DetectTokensController = require('../../../../app/scripts/controllers/detect-tokens') +const PreferencesController = require('../../../../app/scripts/controllers/preferences') +const ObservableStore = require('obs-store') + +describe('DetectTokensController', () => { + it('should poll on correct interval', async () => { + const stub = sinon.stub(global, 'setInterval') + new DetectTokensController({ interval: 1337 }) // eslint-disable-line no-new + assert.strictEqual(stub.getCall(0).args[1], 1337) + stub.restore() + }) + + it('should not check tokens while in test network', async () => { + var network = new ObservableStore({provider: {type:'rinkeby'}}) + const preferences = new PreferencesController() + const controller = new DetectTokensController({preferences: preferences, network: network}) + controller.isActive = true + controller.contracts = { + "0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4": { + "name": "JET8 Token", + "logo": "J8T.svg", + "erc20": true, + "symbol": "J8T", + "decimals": 8 + }, + "0xBC86727E770de68B1060C91f6BB6945c73e10388": { + "name": "Ink Protocol", + "logo": "ink_protocol.svg", + "erc20": true, + "symbol": "XNK", + "decimals": 18 + } + } + controller.fetchContractAccountBalance = address => address + + await controller.exploreNewTokens() + assert.deepEqual(preferences.store.getState().tokens, []) + + }) + + it('should only check and add tokens while in main network', async () => { + const network = new ObservableStore({provider: {type:'mainnet'}}) + const preferences = new PreferencesController() + const controller = new DetectTokensController({preferences: preferences, network: network}) + controller.isActive = true + controller.contracts = { + "0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4": { + "name": "JET8 Token", + "logo": "J8T.svg", + "erc20": true, + "symbol": "J8T", + "decimals": 8 + }, + "0xBC86727E770de68B1060C91f6BB6945c73e10388": { + "name": "Ink Protocol", + "logo": "ink_protocol.svg", + "erc20": true, + "symbol": "XNK", + "decimals": 18 + } + } + controller.fetchContractAccountBalance = address => address + + await controller.exploreNewTokens() + assert.deepEqual(preferences.store.getState().tokens, + [{address: "0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4", decimals: 8, symbol: "J8T"}, + {address: "0xbc86727e770de68b1060c91f6bb6945c73e10388", decimals: 18, symbol: "XNK"}]) + }) + + it('should not detect same token while in main network', async () => { + const network = new ObservableStore({provider: {type:'mainnet'}}) + const preferences = new PreferencesController() + preferences.addToken("0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4", 8, "J8T") + const controller = new DetectTokensController({preferences: preferences, network: network}) + controller.isActive = true + controller.contracts = { + "0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4": { + "name": "JET8 Token", + "logo": "J8T.svg", + "erc20": true, + "symbol": "J8T", + "decimals": 8 + }, + "0xBC86727E770de68B1060C91f6BB6945c73e10388": { + "name": "Ink Protocol", + "logo": "ink_protocol.svg", + "erc20": true, + "symbol": "XNK", + "decimals": 18 + } + } + controller.fetchContractAccountBalance = address => address + + await controller.exploreNewTokens() + assert.deepEqual(preferences.store.getState().tokens, + [{address: "0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4", decimals: 8, symbol: "J8T"}, + {address: "0xbc86727e770de68b1060c91f6bb6945c73e10388", decimals: 18, symbol: "XNK"}]) + }) +}) -- cgit From a8f745f9fe74751b87f500af3857b66d4c80f45e Mon Sep 17 00:00:00 2001 From: brunobar79 Date: Mon, 2 Jul 2018 18:49:33 -0400 Subject: eslint --fix . --- .../app/controllers/address-book-controller.js | 2 +- .../controllers/transactions/nonce-tracker-test.js | 2 +- .../controllers/transactions/pending-tx-test.js | 18 +++++----- .../recipient-blacklist-checker-test.js | 6 ++-- .../controllers/transactions/tx-controller-test.js | 2 +- .../transactions/tx-state-history-helper-test.js | 41 +++++++++++---------- .../transactions/tx-state-manager-test.js | 42 +++++++++++----------- .../app/controllers/transactions/tx-utils-test.js | 4 +-- 8 files changed, 58 insertions(+), 59 deletions(-) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/address-book-controller.js b/test/unit/app/controllers/address-book-controller.js index dc4b8e3ff..1350e1a61 100644 --- a/test/unit/app/controllers/address-book-controller.js +++ b/test/unit/app/controllers/address-book-controller.js @@ -12,7 +12,7 @@ const stubPreferencesStore = { }, } }, -}; +} describe('address-book-controller', function () { var addressBookController diff --git a/test/unit/app/controllers/transactions/nonce-tracker-test.js b/test/unit/app/controllers/transactions/nonce-tracker-test.js index fc852458c..aaf9b0dc4 100644 --- a/test/unit/app/controllers/transactions/nonce-tracker-test.js +++ b/test/unit/app/controllers/transactions/nonce-tracker-test.js @@ -1,7 +1,7 @@ const assert = require('assert') const NonceTracker = require('../../../../../app/scripts/controllers/transactions/nonce-tracker') const MockTxGen = require('../../../../lib/mock-tx-gen') -let providerResultStub = {} +const providerResultStub = {} describe('Nonce Tracker', function () { let nonceTracker, provider diff --git a/test/unit/app/controllers/transactions/pending-tx-test.js b/test/unit/app/controllers/transactions/pending-tx-test.js index e7705c594..b83af568a 100644 --- a/test/unit/app/controllers/transactions/pending-tx-test.js +++ b/test/unit/app/controllers/transactions/pending-tx-test.js @@ -47,10 +47,10 @@ describe('PendingTransactionTracker', function () { nonceTracker: { getGlobalLock: async () => { return { releaseLock: () => {} } - } + }, }, - getPendingTransactions: () => {return []}, - getCompletedTransactions: () => {return []}, + getPendingTransactions: () => { return [] }, + getCompletedTransactions: () => { return [] }, publishTransaction: () => {}, }) }) @@ -189,7 +189,7 @@ describe('PendingTransactionTracker', function () { txMeta2.id = 2 txMeta3.id = 3 txList = [txMeta, txMeta2, txMeta3].map((tx) => { - tx.processed = new Promise ((resolve) => { tx.resolve = resolve }) + tx.processed = new Promise((resolve) => { tx.resolve = resolve }) return tx }) }) @@ -207,11 +207,11 @@ describe('PendingTransactionTracker', function () { }) describe('#resubmitPendingTxs', function () { - const blockStub = { number: '0x0' }; + const blockStub = { number: '0x0' } beforeEach(function () { const txMeta2 = txMeta3 = txMeta txList = [txMeta, txMeta2, txMeta3].map((tx) => { - tx.processed = new Promise ((resolve) => { tx.resolve = resolve }) + tx.processed = new Promise((resolve) => { tx.resolve = resolve }) return tx }) }) @@ -228,7 +228,7 @@ describe('PendingTransactionTracker', function () { pendingTxTracker.resubmitPendingTxs(blockStub) }) it('should not emit \'tx:failed\' if the txMeta throws a known txError', function (done) { - knownErrors =[ + knownErrors = [ // geth ' Replacement transaction Underpriced ', ' known transaction', @@ -342,8 +342,8 @@ describe('PendingTransactionTracker', function () { }) describe('#_checkIfNonceIsTaken', function () { - beforeEach ( function () { - let confirmedTxList = [{ + beforeEach(function () { + const confirmedTxList = [{ id: 1, hash: '0x0593ee121b92e10d63150ad08b4b8f9c7857d1bd160195ee648fb9a0f8d00eeb', status: 'confirmed', diff --git a/test/unit/app/controllers/transactions/recipient-blacklist-checker-test.js b/test/unit/app/controllers/transactions/recipient-blacklist-checker-test.js index 56e8d50db..cb413545f 100644 --- a/test/unit/app/controllers/transactions/recipient-blacklist-checker-test.js +++ b/test/unit/app/controllers/transactions/recipient-blacklist-checker-test.js @@ -28,7 +28,7 @@ describe('Recipient Blacklist Checker', function () { it('does not fail on test networks', function () { let callCount = 0 const networks = [ROPSTEN_CODE, RINKEYBY_CODE, KOVAN_CODE] - for (let networkId in networks) { + for (const networkId in networks) { publicAccounts.forEach((account) => { recipientBlackListChecker.checkAccount(networkId, account) callCount++ @@ -61,7 +61,7 @@ describe('Recipient Blacklist Checker', function () { } catch (err) { assert.equal(err.message, 'Recipient is a public account') } - }) + }) it('fails for public account - lowercase', async function () { const mainnetId = 1 @@ -72,6 +72,6 @@ describe('Recipient Blacklist Checker', function () { } catch (err) { assert.equal(err.message, 'Recipient is a public account') } - }) + }) }) }) diff --git a/test/unit/app/controllers/transactions/tx-controller-test.js b/test/unit/app/controllers/transactions/tx-controller-test.js index 9bdfe7c1a..c480c85f3 100644 --- a/test/unit/app/controllers/transactions/tx-controller-test.js +++ b/test/unit/app/controllers/transactions/tx-controller-test.js @@ -388,7 +388,7 @@ describe('Transaction Controller', function () { describe('#retryTransaction', function () { it('should create a new txMeta with the same txParams as the original one', function (done) { - let txParams = { + const txParams = { nonce: '0x00', from: '0xB09d8505E1F4EF1CeA089D47094f5DD3464083d4', to: '0xB09d8505E1F4EF1CeA089D47094f5DD3464083d4', diff --git a/test/unit/app/controllers/transactions/tx-state-history-helper-test.js b/test/unit/app/controllers/transactions/tx-state-history-helper-test.js index f4c3a6be1..fba0e7fda 100644 --- a/test/unit/app/controllers/transactions/tx-state-history-helper-test.js +++ b/test/unit/app/controllers/transactions/tx-state-history-helper-test.js @@ -2,16 +2,16 @@ const assert = require('assert') const txStateHistoryHelper = require('../../../../../app/scripts/controllers/transactions/lib/tx-state-history-helper') const testVault = require('../../../../data/v17-long-history.json') -describe ('Transaction state history helper', function () { +describe('Transaction state history helper', function () { describe('#snapshotFromTxMeta', function () { it('should clone deep', function () { const input = { foo: { bar: { - bam: 'baz' - } - } + bam: 'baz', + }, + }, } const output = txStateHistoryHelper.snapshotFromTxMeta(input) assert('foo' in output, 'has a foo key') @@ -50,14 +50,14 @@ describe ('Transaction state history helper', function () { it('replaying history does not mutate the original obj', function () { const initialState = { test: true, message: 'hello', value: 1 } const diff1 = [{ - "op": "replace", - "path": "/message", - "value": "haay", + 'op': 'replace', + 'path': '/message', + 'value': 'haay', }] const diff2 = [{ - "op": "replace", - "path": "/value", - "value": 2, + 'op': 'replace', + 'path': '/value', + 'value': 2, }] const history = [initialState, diff1, diff2] @@ -72,15 +72,15 @@ describe ('Transaction state history helper', function () { describe('#generateHistoryEntry', function () { - function generateHistoryEntryTest(note) { + function generateHistoryEntryTest (note) { const prevState = { someValue: 'value 1', foo: { bar: { - bam: 'baz' - } - } + bam: 'baz', + }, + }, } const nextState = { @@ -89,9 +89,9 @@ describe ('Transaction state history helper', function () { foo: { newPropFirstLevel: 'new property - first level', bar: { - bam: 'baz' - } - } + bam: 'baz', + }, + }, } const before = new Date().getTime() @@ -106,8 +106,7 @@ describe ('Transaction state history helper', function () { assert.equal(result[0].path, expectedEntry1.path) assert.equal(result[0].value, expectedEntry1.value) assert.equal(result[0].value, expectedEntry1.value) - if (note) - assert.equal(result[0].note, note) + if (note) { assert.equal(result[0].note, note) } assert.ok(result[0].timestamp >= before && result[0].timestamp <= after) @@ -124,6 +123,6 @@ describe ('Transaction state history helper', function () { it('should add note to first entry', function () { generateHistoryEntryTest('custom note') - }) + }) }) -}) \ No newline at end of file +}) diff --git a/test/unit/app/controllers/transactions/tx-state-manager-test.js b/test/unit/app/controllers/transactions/tx-state-manager-test.js index 20bc08b94..2597e2490 100644 --- a/test/unit/app/controllers/transactions/tx-state-manager-test.js +++ b/test/unit/app/controllers/transactions/tx-state-manager-test.js @@ -16,23 +16,23 @@ describe('TransactionStateManager', function () { transactions: [], }, txHistoryLimit: 10, - getNetwork: () => currentNetworkId + getNetwork: () => currentNetworkId, }) }) describe('#setTxStatusSigned', function () { it('sets the tx status to signed', function () { - let tx = { id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} } + const tx = { id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} } txStateManager.addTx(tx, noop) txStateManager.setTxStatusSigned(1) - let result = txStateManager.getTxList() + const result = txStateManager.getTxList() assert.ok(Array.isArray(result)) assert.equal(result.length, 1) assert.equal(result[0].status, 'signed') }) it('should emit a signed event to signal the exciton of callback', (done) => { - let tx = { id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} } + const tx = { id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} } const noop = function () { assert(true, 'event listener has been triggered and noop executed') done() @@ -46,17 +46,17 @@ describe('TransactionStateManager', function () { describe('#setTxStatusRejected', function () { it('sets the tx status to rejected', function () { - let tx = { id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} } + const tx = { id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} } txStateManager.addTx(tx) txStateManager.setTxStatusRejected(1) - let result = txStateManager.getTxList() + const result = txStateManager.getTxList() assert.ok(Array.isArray(result)) assert.equal(result.length, 1) assert.equal(result[0].status, 'rejected') }) it('should emit a rejected event to signal the exciton of callback', (done) => { - let tx = { id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} } + const tx = { id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} } txStateManager.addTx(tx) const noop = function (err, txId) { assert(true, 'event listener has been triggered and noop executed') @@ -69,7 +69,7 @@ describe('TransactionStateManager', function () { describe('#getFullTxList', function () { it('when new should return empty array', function () { - let result = txStateManager.getTxList() + const result = txStateManager.getTxList() assert.ok(Array.isArray(result)) assert.equal(result.length, 0) }) @@ -77,7 +77,7 @@ describe('TransactionStateManager', function () { describe('#getTxList', function () { it('when new should return empty array', function () { - let result = txStateManager.getTxList() + const result = txStateManager.getTxList() assert.ok(Array.isArray(result)) assert.equal(result.length, 0) }) @@ -85,21 +85,21 @@ describe('TransactionStateManager', function () { describe('#addTx', function () { it('adds a tx returned in getTxList', function () { - let tx = { id: 1, status: 'confirmed', metamaskNetworkId: currentNetworkId, txParams: {} } + const tx = { id: 1, status: 'confirmed', metamaskNetworkId: currentNetworkId, txParams: {} } txStateManager.addTx(tx, noop) - let result = txStateManager.getTxList() + const result = txStateManager.getTxList() assert.ok(Array.isArray(result)) assert.equal(result.length, 1) assert.equal(result[0].id, 1) }) it('does not override txs from other networks', function () { - let tx = { id: 1, status: 'confirmed', metamaskNetworkId: currentNetworkId, txParams: {} } - let tx2 = { id: 2, status: 'confirmed', metamaskNetworkId: otherNetworkId, txParams: {} } + const tx = { id: 1, status: 'confirmed', metamaskNetworkId: currentNetworkId, txParams: {} } + const tx2 = { id: 2, status: 'confirmed', metamaskNetworkId: otherNetworkId, txParams: {} } txStateManager.addTx(tx, noop) txStateManager.addTx(tx2, noop) - let result = txStateManager.getFullTxList() - let result2 = txStateManager.getTxList() + const result = txStateManager.getFullTxList() + const result2 = txStateManager.getTxList() assert.equal(result.length, 2, 'txs were deleted') assert.equal(result2.length, 1, 'incorrect number of txs on network.') }) @@ -110,7 +110,7 @@ describe('TransactionStateManager', function () { const tx = { id: i, time: new Date(), status: 'confirmed', metamaskNetworkId: currentNetworkId, txParams: {} } txStateManager.addTx(tx, noop) } - let result = txStateManager.getTxList() + const result = txStateManager.getTxList() assert.equal(result.length, limit, `limit of ${limit} txs enforced`) assert.equal(result[0].id, 1, 'early txs truncted') }) @@ -121,20 +121,20 @@ describe('TransactionStateManager', function () { const tx = { id: i, time: new Date(), status: 'rejected', metamaskNetworkId: currentNetworkId, txParams: {} } txStateManager.addTx(tx, noop) } - let result = txStateManager.getTxList() + const result = txStateManager.getTxList() assert.equal(result.length, limit, `limit of ${limit} txs enforced`) assert.equal(result[0].id, 1, 'early txs truncted') }) it('cuts off early txs beyond a limit but does not cut unapproved txs', function () { - let unconfirmedTx = { id: 0, time: new Date(), status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} } + const unconfirmedTx = { id: 0, time: new Date(), status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} } txStateManager.addTx(unconfirmedTx, noop) const limit = txStateManager.txHistoryLimit for (let i = 1; i < limit + 1; i++) { const tx = { id: i, time: new Date(), status: 'confirmed', metamaskNetworkId: currentNetworkId, txParams: {} } txStateManager.addTx(tx, noop) } - let result = txStateManager.getTxList() + const result = txStateManager.getTxList() assert.equal(result.length, limit, `limit of ${limit} txs enforced`) assert.equal(result[0].id, 0, 'first tx should still be there') assert.equal(result[0].status, 'unapproved', 'first tx should be unapproved') @@ -149,7 +149,7 @@ describe('TransactionStateManager', function () { const txMeta = txStateManager.getTx('1') txMeta.hash = 'foo' txStateManager.updateTx(txMeta) - let result = txStateManager.getTx('1') + const result = txStateManager.getTx('1') assert.equal(result.hash, 'foo') }) @@ -185,7 +185,7 @@ describe('TransactionStateManager', function () { // validate history was updated assert.equal(result.history.length, 2, 'two history items (initial + diff)') assert.equal(result.history[1].length, 1, 'two history state items (initial + diff)') - + const expectedEntry = { op: 'replace', path: '/txParams/gasPrice', value: desiredGasPrice } assert.deepEqual(result.history[1][0].op, expectedEntry.op, 'two history items (initial + diff) operation') assert.deepEqual(result.history[1][0].path, expectedEntry.path, 'two history items (initial + diff) path') diff --git a/test/unit/app/controllers/transactions/tx-utils-test.js b/test/unit/app/controllers/transactions/tx-utils-test.js index 115127f85..029fab4d5 100644 --- a/test/unit/app/controllers/transactions/tx-utils-test.js +++ b/test/unit/app/controllers/transactions/tx-utils-test.js @@ -27,7 +27,7 @@ describe('txUtils', function () { describe('#normalizeTxParams', () => { it('should normalize txParams', () => { - let txParams = { + const txParams = { chainId: '0x1', from: 'a7df1beDBF813f57096dF77FCd515f0B3900e402', to: null, @@ -91,7 +91,7 @@ describe('txUtils', function () { assert.throws(() => { txUtils.validateFrom(txParams) }, Error, `Invalid from address`) // should run - txParams.from ='0x1678a085c290ebd122dc42cba69373b5953b831d' + txParams.from = '0x1678a085c290ebd122dc42cba69373b5953b831d' txUtils.validateFrom(txParams) }) }) -- cgit From 0da41263acabe99fb1bf6b1a3a00c0c27a305eea Mon Sep 17 00:00:00 2001 From: brunobar79 Date: Mon, 2 Jul 2018 20:12:50 -0400 Subject: fix warning for unit tests --- .../unit/app/controllers/network-contoller-test.js | 3 -- .../controllers/transactions/nonce-tracker-test.js | 12 +++---- .../controllers/transactions/pending-tx-test.js | 39 +++++++--------------- .../controllers/transactions/tx-controller-test.js | 6 +--- .../controllers/transactions/tx-gas-util-test.js | 1 - .../transactions/tx-state-manager-test.js | 5 +-- 6 files changed, 19 insertions(+), 47 deletions(-) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/network-contoller-test.js b/test/unit/app/controllers/network-contoller-test.js index 789850ef3..e16fb104e 100644 --- a/test/unit/app/controllers/network-contoller-test.js +++ b/test/unit/app/controllers/network-contoller-test.js @@ -5,9 +5,6 @@ const { getNetworkDisplayName, } = require('../../../../app/scripts/controllers/network/util') -const { createTestProviderTools } = require('../../../stub/provider') -const providerResultStub = {} - describe('# Network Controller', function () { let networkController const noop = () => {} diff --git a/test/unit/app/controllers/transactions/nonce-tracker-test.js b/test/unit/app/controllers/transactions/nonce-tracker-test.js index aaf9b0dc4..6c0ac759f 100644 --- a/test/unit/app/controllers/transactions/nonce-tracker-test.js +++ b/test/unit/app/controllers/transactions/nonce-tracker-test.js @@ -4,9 +4,7 @@ const MockTxGen = require('../../../../lib/mock-tx-gen') const providerResultStub = {} describe('Nonce Tracker', function () { - let nonceTracker, provider - let getPendingTransactions, pendingTxs - let getConfirmedTransactions, confirmedTxs + let nonceTracker, pendingTxs, confirmedTxs describe('#getNonceLock', function () { @@ -182,8 +180,8 @@ describe('Nonce Tracker', function () { describe('When all three return different values', function () { beforeEach(function () { const txGen = new MockTxGen() - const confirmedTxs = txGen.generate({ status: 'confirmed' }, { count: 10 }) - const pendingTxs = txGen.generate({ + confirmedTxs = txGen.generate({ status: 'confirmed' }, { count: 10 }) + pendingTxs = txGen.generate({ status: 'submitted', nonce: 100, }, { count: 1 }) @@ -202,8 +200,8 @@ describe('Nonce Tracker', function () { describe('Faq issue 67', function () { beforeEach(function () { const txGen = new MockTxGen() - const confirmedTxs = txGen.generate({ status: 'confirmed' }, { count: 64 }) - const pendingTxs = txGen.generate({ + confirmedTxs = txGen.generate({ status: 'confirmed' }, { count: 64 }) + pendingTxs = txGen.generate({ status: 'submitted', }, { count: 10 }) // 0x40 is 64 in hex: diff --git a/test/unit/app/controllers/transactions/pending-tx-test.js b/test/unit/app/controllers/transactions/pending-tx-test.js index b83af568a..8bf2da6f8 100644 --- a/test/unit/app/controllers/transactions/pending-tx-test.js +++ b/test/unit/app/controllers/transactions/pending-tx-test.js @@ -1,20 +1,12 @@ const assert = require('assert') -const ethUtil = require('ethereumjs-util') -const EthTx = require('ethereumjs-tx') -const ObservableStore = require('obs-store') -const clone = require('clone') const { createTestProviderTools } = require('../../../../stub/provider') const PendingTransactionTracker = require('../../../../../app/scripts/controllers/transactions/pending-tx-tracker') const MockTxGen = require('../../../../lib/mock-tx-gen') const sinon = require('sinon') -const noop = () => true -const currentNetworkId = 42 -const otherNetworkId = 36 -const privKey = new Buffer('8718b9618a37d1fc78c436511fc6df3c8258d3250635bba617f33003270ec03e', 'hex') describe('PendingTransactionTracker', function () { - let pendingTxTracker, txMeta, txMetaNoHash, txMetaNoRawTx, providerResultStub, + let pendingTxTracker, txMeta, txMetaNoHash, providerResultStub, provider, txMeta3, txList, knownErrors this.timeout(10000) beforeEach(function () { @@ -34,11 +26,7 @@ describe('PendingTransactionTracker', function () { status: 'signed', txParams: { from: '0x1678a085c290ebd122dc42cba69373b5953b831d'}, } - txMetaNoRawTx = { - hash: '0x0593ee121b92e10d63150ad08b4b8f9c7857d1bd160195ee648fb9a0f8d00eeb', - status: 'signed', - txParams: { from: '0x1678a085c290ebd122dc42cba69373b5953b831d'}, - } + providerResultStub = {} provider = createTestProviderTools({ scaffold: providerResultStub }).provider @@ -133,22 +121,20 @@ describe('PendingTransactionTracker', function () { }) describe('#queryPendingTxs', function () { it('should call #_checkPendingTxs if their is no oldBlock', function (done) { - let newBlock, oldBlock - newBlock = { number: '0x01' } + let oldBlock + const newBlock = { number: '0x01' } pendingTxTracker._checkPendingTxs = done pendingTxTracker.queryPendingTxs({ oldBlock, newBlock }) }) it('should call #_checkPendingTxs if oldBlock and the newBlock have a diff of greater then 1', function (done) { - let newBlock, oldBlock - oldBlock = { number: '0x01' } - newBlock = { number: '0x03' } + const oldBlock = { number: '0x01' } + const newBlock = { number: '0x03' } pendingTxTracker._checkPendingTxs = done pendingTxTracker.queryPendingTxs({ oldBlock, newBlock }) }) it('should not call #_checkPendingTxs if oldBlock and the newBlock have a diff of 1 or less', function (done) { - let newBlock, oldBlock - oldBlock = { number: '0x1' } - newBlock = { number: '0x2' } + const oldBlock = { number: '0x1' } + const newBlock = { number: '0x2' } pendingTxTracker._checkPendingTxs = () => { const err = new Error('should not call #_checkPendingTxs if oldBlock and the newBlock have a diff of 1 or less') done(err) @@ -197,7 +183,6 @@ describe('PendingTransactionTracker', function () { it('should warp all txMeta\'s in #_checkPendingTx', function (done) { pendingTxTracker.getPendingTransactions = () => txList pendingTxTracker._checkPendingTx = (tx) => { tx.resolve(tx) } - const list = txList.map Promise.all(txList.map((tx) => tx.processed)) .then((txCompletedList) => done()) .catch(done) @@ -275,7 +260,7 @@ describe('PendingTransactionTracker', function () { }) describe('#_resubmitTx', function () { const mockFirstRetryBlockNumber = '0x1' - let txMetaToTestExponentialBackoff + let txMetaToTestExponentialBackoff, enoughBalance beforeEach(() => { pendingTxTracker.getBalance = (address) => { @@ -298,7 +283,7 @@ describe('PendingTransactionTracker', function () { }) it('should publish the transaction', function (done) { - const enoughBalance = '0x100000' + enoughBalance = '0x100000' // Stubbing out current account state: // Adding the fake tx: @@ -313,7 +298,7 @@ describe('PendingTransactionTracker', function () { }) it('should not publish the transaction if the limit of retries has been exceeded', function (done) { - const enoughBalance = '0x100000' + enoughBalance = '0x100000' const mockLatestBlockNumber = '0x5' pendingTxTracker._resubmitTx(txMetaToTestExponentialBackoff, mockLatestBlockNumber) @@ -327,7 +312,7 @@ describe('PendingTransactionTracker', function () { }) it('should publish the transaction if the number of blocks since last retry exceeds the last set limit', function (done) { - const enoughBalance = '0x100000' + enoughBalance = '0x100000' const mockLatestBlockNumber = '0x11' pendingTxTracker._resubmitTx(txMetaToTestExponentialBackoff, mockLatestBlockNumber) diff --git a/test/unit/app/controllers/transactions/tx-controller-test.js b/test/unit/app/controllers/transactions/tx-controller-test.js index c480c85f3..d4c5ff0ec 100644 --- a/test/unit/app/controllers/transactions/tx-controller-test.js +++ b/test/unit/app/controllers/transactions/tx-controller-test.js @@ -1,20 +1,17 @@ const assert = require('assert') const ethUtil = require('ethereumjs-util') const EthTx = require('ethereumjs-tx') -const EthjsQuery = require('ethjs-query') const ObservableStore = require('obs-store') const sinon = require('sinon') const TransactionController = require('../../../../../app/scripts/controllers/transactions') -const TxGasUtils = require('../../../../../app/scripts/controllers/transactions/tx-gas-utils') const { createTestProviderTools, getTestAccounts } = require('../../../../stub/provider') const noop = () => true const currentNetworkId = 42 -const otherNetworkId = 36 describe('Transaction Controller', function () { - let txController, provider, providerResultStub, query, fromAccount + let txController, provider, providerResultStub, fromAccount beforeEach(function () { providerResultStub = { @@ -24,7 +21,6 @@ describe('Transaction Controller', function () { eth_getCode: '0x', } provider = createTestProviderTools({ scaffold: providerResultStub }).provider - query = new EthjsQuery(provider) fromAccount = getTestAccounts()[0] txController = new TransactionController({ diff --git a/test/unit/app/controllers/transactions/tx-gas-util-test.js b/test/unit/app/controllers/transactions/tx-gas-util-test.js index d1ee86033..31defd6ed 100644 --- a/test/unit/app/controllers/transactions/tx-gas-util-test.js +++ b/test/unit/app/controllers/transactions/tx-gas-util-test.js @@ -1,6 +1,5 @@ const assert = require('assert') const Transaction = require('ethereumjs-tx') -const BN = require('bn.js') const { hexToBn, bnToHex } = require('../../../../../app/scripts/lib/util') diff --git a/test/unit/app/controllers/transactions/tx-state-manager-test.js b/test/unit/app/controllers/transactions/tx-state-manager-test.js index 2597e2490..2509c11fb 100644 --- a/test/unit/app/controllers/transactions/tx-state-manager-test.js +++ b/test/unit/app/controllers/transactions/tx-state-manager-test.js @@ -1,6 +1,4 @@ const assert = require('assert') -const clone = require('clone') -const ObservableStore = require('obs-store') const TxStateManager = require('../../../../../app/scripts/controllers/transactions/tx-state-manager') const txStateHistoryHelper = require('../../../../../app/scripts/controllers/transactions/lib/tx-state-history-helper') const noop = () => true @@ -59,6 +57,7 @@ describe('TransactionStateManager', function () { const tx = { id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} } txStateManager.addTx(tx) const noop = function (err, txId) { + assert(err, null) assert(true, 'event listener has been triggered and noop executed') done() } @@ -166,8 +165,6 @@ describe('TransactionStateManager', function () { }, } - const updatedMeta = clone(txMeta) - txStateManager.addTx(txMeta) const updatedTx = txStateManager.getTx('1') // verify tx was initialized correctly -- cgit From c734e486a027b52e9b8b8684e0b81d592698d7ac Mon Sep 17 00:00:00 2001 From: brunobar79 Date: Mon, 2 Jul 2018 20:21:27 -0400 Subject: fix tests --- test/unit/app/controllers/transactions/tx-state-manager-test.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/transactions/tx-state-manager-test.js b/test/unit/app/controllers/transactions/tx-state-manager-test.js index 2509c11fb..f4b287634 100644 --- a/test/unit/app/controllers/transactions/tx-state-manager-test.js +++ b/test/unit/app/controllers/transactions/tx-state-manager-test.js @@ -57,9 +57,12 @@ describe('TransactionStateManager', function () { const tx = { id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} } txStateManager.addTx(tx) const noop = function (err, txId) { - assert(err, null) - assert(true, 'event listener has been triggered and noop executed') - done() + if (!err) { + assert(true, 'event listener has been triggered and noop executed') + done() + } else { + done(new Error(err.toString())) + } } txStateManager.on('1:rejected', noop) txStateManager.setTxStatusRejected(1) -- cgit From 4b398701c15e2cc57f73426b15b1a21b16933042 Mon Sep 17 00:00:00 2001 From: brunobar79 Date: Mon, 2 Jul 2018 21:03:34 -0400 Subject: fix unit tests --- test/unit/app/controllers/transactions/tx-state-manager-test.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/transactions/tx-state-manager-test.js b/test/unit/app/controllers/transactions/tx-state-manager-test.js index f4b287634..2f91b1545 100644 --- a/test/unit/app/controllers/transactions/tx-state-manager-test.js +++ b/test/unit/app/controllers/transactions/tx-state-manager-test.js @@ -57,12 +57,11 @@ describe('TransactionStateManager', function () { const tx = { id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} } txStateManager.addTx(tx) const noop = function (err, txId) { - if (!err) { + if (err) { + console.log('Error: ', err) + } assert(true, 'event listener has been triggered and noop executed') done() - } else { - done(new Error(err.toString())) - } } txStateManager.on('1:rejected', noop) txStateManager.setTxStatusRejected(1) -- cgit From 63b9c8796bf744f05a3b7d88319460eed772efa9 Mon Sep 17 00:00:00 2001 From: Esteban MIno Date: Tue, 3 Jul 2018 15:24:23 -0400 Subject: fix lint --- test/unit/app/controllers/detect-tokens-test.js | 100 +++++++++++------------- 1 file changed, 46 insertions(+), 54 deletions(-) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/detect-tokens-test.js b/test/unit/app/controllers/detect-tokens-test.js index f9f5c902d..82e86bfcc 100644 --- a/test/unit/app/controllers/detect-tokens-test.js +++ b/test/unit/app/controllers/detect-tokens-test.js @@ -13,89 +13,81 @@ describe('DetectTokensController', () => { }) it('should not check tokens while in test network', async () => { - var network = new ObservableStore({provider: {type:'rinkeby'}}) + var network = new ObservableStore({provider: {type: 'rinkeby'}}) const preferences = new PreferencesController() const controller = new DetectTokensController({preferences: preferences, network: network}) controller.isActive = true controller.contracts = { - "0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4": { - "name": "JET8 Token", - "logo": "J8T.svg", - "erc20": true, - "symbol": "J8T", - "decimals": 8 + '0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4': { + 'name': 'JET8 Token', + 'logo': 'J8T.svg', + 'erc20': true, + 'symbol': 'J8T', + 'decimals': 8, + }, + '0xBC86727E770de68B1060C91f6BB6945c73e10388': { + 'name': 'Ink Protocol', + 'logo': 'ink_protocol.svg', + 'erc20': true, + 'symbol': 'XNK', + 'decimals': 18, }, - "0xBC86727E770de68B1060C91f6BB6945c73e10388": { - "name": "Ink Protocol", - "logo": "ink_protocol.svg", - "erc20": true, - "symbol": "XNK", - "decimals": 18 - } } controller.fetchContractAccountBalance = address => address - await controller.exploreNewTokens() assert.deepEqual(preferences.store.getState().tokens, []) - - }) +}) it('should only check and add tokens while in main network', async () => { - const network = new ObservableStore({provider: {type:'mainnet'}}) + const network = new ObservableStore({provider: {type: 'mainnet'}}) const preferences = new PreferencesController() const controller = new DetectTokensController({preferences: preferences, network: network}) controller.isActive = true controller.contracts = { - "0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4": { - "name": "JET8 Token", - "logo": "J8T.svg", - "erc20": true, - "symbol": "J8T", - "decimals": 8 + '0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4': { + 'name': 'JET8 Token', + 'logo': 'J8T.svg', + 'erc20': true, + 'symbol': 'J8T', + 'decimals': 8, + }, + '0xBC86727E770de68B1060C91f6BB6945c73e10388': { + 'name': 'Ink Protocol', + 'logo': 'ink_protocol.svg', + 'erc20': true, + 'symbol': 'XNK', + 'decimals': 18, }, - "0xBC86727E770de68B1060C91f6BB6945c73e10388": { - "name": "Ink Protocol", - "logo": "ink_protocol.svg", - "erc20": true, - "symbol": "XNK", - "decimals": 18 - } } controller.fetchContractAccountBalance = address => address - await controller.exploreNewTokens() - assert.deepEqual(preferences.store.getState().tokens, - [{address: "0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4", decimals: 8, symbol: "J8T"}, - {address: "0xbc86727e770de68b1060c91f6bb6945c73e10388", decimals: 18, symbol: "XNK"}]) + assert.deepEqual(preferences.store.getState().tokens, [{address: '0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', decimals: 8, symbol: 'J8T'}, {address: '0xbc86727e770de68b1060c91f6bb6945c73e10388', decimals: 18, symbol: 'XNK'}]) }) it('should not detect same token while in main network', async () => { - const network = new ObservableStore({provider: {type:'mainnet'}}) + const network = new ObservableStore({provider: {type: 'mainnet'}}) const preferences = new PreferencesController() - preferences.addToken("0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4", 8, "J8T") + preferences.addToken('0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', 8, 'J8T') const controller = new DetectTokensController({preferences: preferences, network: network}) controller.isActive = true controller.contracts = { - "0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4": { - "name": "JET8 Token", - "logo": "J8T.svg", - "erc20": true, - "symbol": "J8T", - "decimals": 8 + '0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4': { + 'name': 'JET8 Token', + 'logo': 'J8T.svg', + 'erc20': true, + 'symbol': 'J8T', + 'decimals': 8, + }, + '0xBC86727E770de68B1060C91f6BB6945c73e10388': { + 'name': 'Ink Protocol', + 'logo': 'ink_protocol.svg', + 'erc20': true, + 'symbol': 'XNK', + 'decimals': 18, }, - "0xBC86727E770de68B1060C91f6BB6945c73e10388": { - "name": "Ink Protocol", - "logo": "ink_protocol.svg", - "erc20": true, - "symbol": "XNK", - "decimals": 18 - } } controller.fetchContractAccountBalance = address => address - await controller.exploreNewTokens() - assert.deepEqual(preferences.store.getState().tokens, - [{address: "0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4", decimals: 8, symbol: "J8T"}, - {address: "0xbc86727e770de68b1060c91f6bb6945c73e10388", decimals: 18, symbol: "XNK"}]) + assert.deepEqual(preferences.store.getState().tokens, [{address: '0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', decimals: 8, symbol: 'J8T'}, {address: '0xbc86727e770de68b1060c91f6bb6945c73e10388', decimals: 18, symbol: 'XNK'}]) }) }) -- cgit From b30499886f5f738aeb93df2571cf07e2b9897ae1 Mon Sep 17 00:00:00 2001 From: frankiebee Date: Tue, 10 Jul 2018 15:35:27 -0700 Subject: test - check that #setTxStatusRejected removes transaction from history --- test/unit/app/controllers/transactions/tx-state-manager-test.js | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/transactions/tx-state-manager-test.js b/test/unit/app/controllers/transactions/tx-state-manager-test.js index 089b7a8a6..88bdaa60e 100644 --- a/test/unit/app/controllers/transactions/tx-state-manager-test.js +++ b/test/unit/app/controllers/transactions/tx-state-manager-test.js @@ -43,6 +43,15 @@ describe('TransactionStateManager', function () { }) describe('#setTxStatusRejected', function () { + it('sets the tx status to rejected and removes it from history', function () { + const tx = { id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} } + txStateManager.addTx(tx) + txStateManager.setTxStatusRejected(1) + const result = txStateManager.getTxList() + assert.ok(Array.isArray(result)) + assert.equal(result.length, 0) + }) + it('should emit a rejected event to signal the exciton of callback', (done) => { const tx = { id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {} } txStateManager.addTx(tx) -- cgit From 910713c6b3c5b8f865fdcb989bfe3ee0b14eb364 Mon Sep 17 00:00:00 2001 From: Esteban MIno Date: Wed, 11 Jul 2018 15:59:05 -0400 Subject: improve tests --- test/unit/app/controllers/detect-tokens-test.js | 105 +++++++++++------------- 1 file changed, 49 insertions(+), 56 deletions(-) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/detect-tokens-test.js b/test/unit/app/controllers/detect-tokens-test.js index 82e86bfcc..dca48c6bb 100644 --- a/test/unit/app/controllers/detect-tokens-test.js +++ b/test/unit/app/controllers/detect-tokens-test.js @@ -5,6 +5,14 @@ const PreferencesController = require('../../../../app/scripts/controllers/prefe const ObservableStore = require('obs-store') describe('DetectTokensController', () => { + const sandbox = sinon.createSandbox() + let clock + before(async () => { + }) + after(() => { + sandbox.restore() + }) + it('should poll on correct interval', async () => { const stub = sinon.stub(global, 'setInterval') new DetectTokensController({ interval: 1337 }) // eslint-disable-line no-new @@ -12,82 +20,67 @@ describe('DetectTokensController', () => { stub.restore() }) + it('should be called on every polling period', async () => { + clock = sandbox.useFakeTimers() + const network = new ObservableStore({provider: {type: 'mainnet'}}) + const preferences = new PreferencesController() + const controller = new DetectTokensController({preferences: preferences, network: network}) + controller.isActive = true + + var stub = sandbox.stub(controller, 'exploreNewTokens') + + clock.tick(1) + sandbox.assert.notCalled(stub) + clock.tick(180000) + sandbox.assert.called(stub) + clock.tick(180000) + sandbox.assert.calledTwice(stub) + clock.tick(180000) + sandbox.assert.calledThrice(stub) + }) + it('should not check tokens while in test network', async () => { var network = new ObservableStore({provider: {type: 'rinkeby'}}) const preferences = new PreferencesController() const controller = new DetectTokensController({preferences: preferences, network: network}) controller.isActive = true - controller.contracts = { - '0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4': { - 'name': 'JET8 Token', - 'logo': 'J8T.svg', - 'erc20': true, - 'symbol': 'J8T', - 'decimals': 8, - }, - '0xBC86727E770de68B1060C91f6BB6945c73e10388': { - 'name': 'Ink Protocol', - 'logo': 'ink_protocol.svg', - 'erc20': true, - 'symbol': 'XNK', - 'decimals': 18, - }, - } - controller.fetchContractAccountBalance = address => address + + var stub = sandbox.stub(controller, 'detectTokenBalance') + .withArgs('0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4').returns(true) + .withArgs('0xBC86727E770de68B1060C91f6BB6945c73e10388').returns(true) + await controller.exploreNewTokens() - assert.deepEqual(preferences.store.getState().tokens, []) -}) + sandbox.assert.notCalled(stub) + }) it('should only check and add tokens while in main network', async () => { const network = new ObservableStore({provider: {type: 'mainnet'}}) const preferences = new PreferencesController() const controller = new DetectTokensController({preferences: preferences, network: network}) controller.isActive = true - controller.contracts = { - '0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4': { - 'name': 'JET8 Token', - 'logo': 'J8T.svg', - 'erc20': true, - 'symbol': 'J8T', - 'decimals': 8, - }, - '0xBC86727E770de68B1060C91f6BB6945c73e10388': { - 'name': 'Ink Protocol', - 'logo': 'ink_protocol.svg', - 'erc20': true, - 'symbol': 'XNK', - 'decimals': 18, - }, - } - controller.fetchContractAccountBalance = address => address + + sandbox.stub(controller, 'detectTokenBalance') + .withArgs('0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4').returns(true) + .withArgs('0xBC86727E770de68B1060C91f6BB6945c73e10388').returns(true) + await controller.exploreNewTokens() - assert.deepEqual(preferences.store.getState().tokens, [{address: '0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', decimals: 8, symbol: 'J8T'}, {address: '0xbc86727e770de68b1060c91f6bb6945c73e10388', decimals: 18, symbol: 'XNK'}]) + assert.deepEqual(preferences.store.getState().tokens, [{address: '0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', decimals: 8, symbol: 'J8T'}, + {address: '0xbc86727e770de68b1060c91f6bb6945c73e10388', decimals: 18, symbol: 'XNK'}]) }) it('should not detect same token while in main network', async () => { const network = new ObservableStore({provider: {type: 'mainnet'}}) const preferences = new PreferencesController() - preferences.addToken('0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', 8, 'J8T') + preferences.addToken('0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', 'J8T', 8) const controller = new DetectTokensController({preferences: preferences, network: network}) controller.isActive = true - controller.contracts = { - '0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4': { - 'name': 'JET8 Token', - 'logo': 'J8T.svg', - 'erc20': true, - 'symbol': 'J8T', - 'decimals': 8, - }, - '0xBC86727E770de68B1060C91f6BB6945c73e10388': { - 'name': 'Ink Protocol', - 'logo': 'ink_protocol.svg', - 'erc20': true, - 'symbol': 'XNK', - 'decimals': 18, - }, - } - controller.fetchContractAccountBalance = address => address + + sandbox.stub(controller, 'detectTokenBalance') + .withArgs('0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4').returns(true) + .withArgs('0xBC86727E770de68B1060C91f6BB6945c73e10388').returns(true) + await controller.exploreNewTokens() - assert.deepEqual(preferences.store.getState().tokens, [{address: '0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', decimals: 8, symbol: 'J8T'}, {address: '0xbc86727e770de68b1060c91f6bb6945c73e10388', decimals: 18, symbol: 'XNK'}]) + assert.deepEqual(preferences.store.getState().tokens, [{address: '0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', decimals: 8, symbol: 'J8T'}, + {address: '0xbc86727e770de68b1060c91f6bb6945c73e10388', decimals: 18, symbol: 'XNK'}]) }) }) -- cgit From 2fffe098736e2461b9238c7dcd91f9ef3d61dcc1 Mon Sep 17 00:00:00 2001 From: Esteban MIno Date: Thu, 12 Jul 2018 20:43:43 -0400 Subject: detect tokens through infura --- test/unit/app/controllers/detect-tokens-test.js | 26 ++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/detect-tokens-test.js b/test/unit/app/controllers/detect-tokens-test.js index dca48c6bb..860ed7050 100644 --- a/test/unit/app/controllers/detect-tokens-test.js +++ b/test/unit/app/controllers/detect-tokens-test.js @@ -1,8 +1,8 @@ const assert = require('assert') const sinon = require('sinon') const DetectTokensController = require('../../../../app/scripts/controllers/detect-tokens') +const NetworkController = require('../../../../app/scripts/controllers/network/network') const PreferencesController = require('../../../../app/scripts/controllers/preferences') -const ObservableStore = require('obs-store') describe('DetectTokensController', () => { const sandbox = sinon.createSandbox() @@ -22,7 +22,8 @@ describe('DetectTokensController', () => { it('should be called on every polling period', async () => { clock = sandbox.useFakeTimers() - const network = new ObservableStore({provider: {type: 'mainnet'}}) + const network = new NetworkController() + network.setProviderType('mainnet') const preferences = new PreferencesController() const controller = new DetectTokensController({preferences: preferences, network: network}) controller.isActive = true @@ -40,7 +41,8 @@ describe('DetectTokensController', () => { }) it('should not check tokens while in test network', async () => { - var network = new ObservableStore({provider: {type: 'rinkeby'}}) + const network = new NetworkController() + network.setProviderType('rinkeby') const preferences = new PreferencesController() const controller = new DetectTokensController({preferences: preferences, network: network}) controller.isActive = true @@ -54,14 +56,17 @@ describe('DetectTokensController', () => { }) it('should only check and add tokens while in main network', async () => { - const network = new ObservableStore({provider: {type: 'mainnet'}}) + const network = new NetworkController() + network.setProviderType('mainnet') const preferences = new PreferencesController() const controller = new DetectTokensController({preferences: preferences, network: network}) controller.isActive = true sandbox.stub(controller, 'detectTokenBalance') - .withArgs('0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4').returns(true) - .withArgs('0xBC86727E770de68B1060C91f6BB6945c73e10388').returns(true) + .withArgs('0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4') + .returns(preferences.addToken('0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', 'J8T', 8)) + .withArgs('0xBC86727E770de68B1060C91f6BB6945c73e10388') + .returns(preferences.addToken('0xbc86727e770de68b1060c91f6bb6945c73e10388', 'XNK', 18)) await controller.exploreNewTokens() assert.deepEqual(preferences.store.getState().tokens, [{address: '0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', decimals: 8, symbol: 'J8T'}, @@ -69,15 +74,18 @@ describe('DetectTokensController', () => { }) it('should not detect same token while in main network', async () => { - const network = new ObservableStore({provider: {type: 'mainnet'}}) + const network = new NetworkController() + network.setProviderType('mainnet') const preferences = new PreferencesController() preferences.addToken('0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', 'J8T', 8) const controller = new DetectTokensController({preferences: preferences, network: network}) controller.isActive = true sandbox.stub(controller, 'detectTokenBalance') - .withArgs('0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4').returns(true) - .withArgs('0xBC86727E770de68B1060C91f6BB6945c73e10388').returns(true) + .withArgs('0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4') + .returns(preferences.addToken('0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', 'J8T', 8)) + .withArgs('0xBC86727E770de68B1060C91f6BB6945c73e10388') + .returns(preferences.addToken('0xbc86727e770de68b1060c91f6bb6945c73e10388', 'XNK', 18)) await controller.exploreNewTokens() assert.deepEqual(preferences.store.getState().tokens, [{address: '0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', decimals: 8, symbol: 'J8T'}, -- cgit From 41879a983582c832fe3b6b19df3c057a1cc13d2a Mon Sep 17 00:00:00 2001 From: brunobar79 Date: Mon, 16 Jul 2018 16:08:19 -0400 Subject: added test for preferences controller --- .../app/controllers/preferences-controller-test.js | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/preferences-controller-test.js b/test/unit/app/controllers/preferences-controller-test.js index e5e751b57..e055500b1 100644 --- a/test/unit/app/controllers/preferences-controller-test.js +++ b/test/unit/app/controllers/preferences-controller-test.js @@ -52,6 +52,31 @@ describe('preferences controller', function () { }) }) + describe('removeAddress', function () { + it('should remove an address from state', function () { + preferencesController.setAddresses([ + '0xda22le', + '0x7e57e2', + ]) + + preferencesController.removeAddress('0xda22le') + + assert.equal(preferencesController.store.getState().identities['0xda22le'], undefined) + }) + + it('should switch accounts if the selected address is removed', function () { + preferencesController.setAddresses([ + '0xda22le', + '0x7e57e2', + ]) + + preferencesController.setSelectedAddress('0x7e57e2') + preferencesController.removeAddress('0x7e57e2') + + assert.equal(preferencesController.getSelectedAddress(), '0xda22le') + }) + }) + describe('setAccountLabel', function () { it('should update a label for the given account', function () { preferencesController.setAddresses([ -- cgit From e5512c306ded1d2a521a0ba0d2c3cdd5878e53bb Mon Sep 17 00:00:00 2001 From: brunobar79 Date: Mon, 16 Jul 2018 19:36:08 -0400 Subject: added unit tests for metamaskcontroller --- .../app/controllers/metamask-controller-test.js | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/metamask-controller-test.js b/test/unit/app/controllers/metamask-controller-test.js index 0dda4609b..bef126f1f 100644 --- a/test/unit/app/controllers/metamask-controller-test.js +++ b/test/unit/app/controllers/metamask-controller-test.js @@ -222,6 +222,76 @@ describe('MetaMaskController', function () { }) }) + describe('connectHardware', function () { + + it('should throw if it receives an unknown device name', async function () { + try { + await metamaskController.connectHardware('Some random device name', 0) + } catch (e) { + assert.equal(e, 'Error: MetamaskController:connectHardware - Unknown device') + } + }) + + it('should add the Trezor Hardware keyring', async function () { + await metamaskController.connectHardware('trezor', 0).catch((e) => null) + const keyrings = await metamaskController.keyringController.getKeyringsByType( + 'Trezor Hardware' + ) + assert.equal(keyrings.length, 1) + }) + + }) + + describe('checkHardwareStatus', function () { + it('should throw if it receives an unknown device name', async function () { + try { + await metamaskController.checkHardwareStatus('Some random device name') + } catch (e) { + assert.equal(e, 'Error: MetamaskController:checkHardwareStatus - Unknown device') + } + }) + + it('should be locked by default', async function () { + await metamaskController.connectHardware('trezor', 0).catch((e) => null) + const status = await metamaskController.checkHardwareStatus('trezor') + assert.equal(status, false) + }) + }) + + describe('forgetDevice', function () { + it('should throw if it receives an unknown device name', async function () { + try { + await metamaskController.forgetDevice('Some random device name') + } catch (e) { + assert.equal(e, 'Error: MetamaskController:forgetDevice - Unknown device') + } + }) + + it('should wipe all the keyring info', async function () { + await metamaskController.connectHardware('trezor', 0).catch((e) => null) + await metamaskController.forgetDevice('trezor') + const keyrings = await metamaskController.keyringController.getKeyringsByType( + 'Trezor Hardware' + ) + + assert.deepEqual(keyrings[0].accounts, []) + assert.deepEqual(keyrings[0].page, 0) + assert.deepEqual(keyrings[0].isUnlocked(), false) + }) + }) + + describe('unlockTrezorAccount', function () { + it('should set accountToUnlock in the keyring', async function () { + await metamaskController.connectHardware('trezor', 0).catch((e) => null) + const accountToUnlock = 10 + await metamaskController.unlockTrezorAccount(accountToUnlock).catch((e) => null) + const keyrings = await metamaskController.keyringController.getKeyringsByType( + 'Trezor Hardware' + ) + assert.equal(keyrings[0].unlockedAccount, accountToUnlock) + }) + }) + describe('#setCustomRpc', function () { const customRPC = 'https://custom.rpc/' let rpcTarget -- cgit From de4265c629f8e68d882c2ded0e20417327cf4d2f Mon Sep 17 00:00:00 2001 From: brunobar79 Date: Tue, 17 Jul 2018 01:17:18 -0400 Subject: added more unit tests --- .../app/controllers/metamask-controller-test.js | 57 +++++++++++++++++++++- 1 file changed, 55 insertions(+), 2 deletions(-) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/metamask-controller-test.js b/test/unit/app/controllers/metamask-controller-test.js index bef126f1f..a08371f86 100644 --- a/test/unit/app/controllers/metamask-controller-test.js +++ b/test/unit/app/controllers/metamask-controller-test.js @@ -233,10 +233,12 @@ describe('MetaMaskController', function () { }) it('should add the Trezor Hardware keyring', async function () { + sinon.spy(metamaskController.keyringController, 'addNewKeyring') await metamaskController.connectHardware('trezor', 0).catch((e) => null) const keyrings = await metamaskController.keyringController.getKeyringsByType( 'Trezor Hardware' ) + assert.equal(metamaskController.keyringController.addNewKeyring.getCall(0).args, 'Trezor Hardware') assert.equal(keyrings.length, 1) }) @@ -281,15 +283,66 @@ describe('MetaMaskController', function () { }) describe('unlockTrezorAccount', function () { - it('should set accountToUnlock in the keyring', async function () { + let accountToUnlock + let windowOpenStub + let addNewAccountStub + let getAccountsStub + beforeEach(async function () { + accountToUnlock = 10 + windowOpenStub = sinon.stub(window, 'open') + windowOpenStub.returns(noop) + + addNewAccountStub = sinon.stub(metamaskController.keyringController, 'addNewAccount') + addNewAccountStub.returns({}) + + getAccountsStub = sinon.stub(metamaskController.keyringController, 'getAccounts') + // Need to return different address to mock the behavior of + // adding a new account from the keyring + getAccountsStub.onCall(0).returns(Promise.resolve(['0x1'])) + getAccountsStub.onCall(1).returns(Promise.resolve(['0x2'])) + getAccountsStub.onCall(2).returns(Promise.resolve(['0x3'])) + getAccountsStub.onCall(3).returns(Promise.resolve(['0x4'])) + sinon.spy(metamaskController.preferencesController, 'setAddresses') + sinon.spy(metamaskController.preferencesController, 'setSelectedAddress') + sinon.spy(metamaskController.preferencesController, 'setAccountLabel') await metamaskController.connectHardware('trezor', 0).catch((e) => null) - const accountToUnlock = 10 await metamaskController.unlockTrezorAccount(accountToUnlock).catch((e) => null) + }) + + afterEach(function () { + metamaskController.keyringController.addNewAccount.restore() + window.open.restore() + }) + + it('should set accountToUnlock in the keyring', async function () { const keyrings = await metamaskController.keyringController.getKeyringsByType( 'Trezor Hardware' ) assert.equal(keyrings[0].unlockedAccount, accountToUnlock) }) + + + it('should call keyringController.addNewAccount', async function () { + assert(metamaskController.keyringController.addNewAccount.calledOnce) + }) + + it('should call keyringController.getAccounts ', async function () { + assert(metamaskController.keyringController.getAccounts.called) + }) + + it('should call preferencesController.setAddresses', async function () { + assert(metamaskController.preferencesController.setAddresses.calledOnce) + }) + + it('should call preferencesController.setSelectedAddress', async function () { + assert(metamaskController.preferencesController.setSelectedAddress.calledOnce) + }) + + it('should call preferencesController.setAccountLabel', async function () { + assert(metamaskController.preferencesController.setAccountLabel.calledOnce) + }) + + }) describe('#setCustomRpc', function () { -- cgit From e89350b19fdac56968303e5c48806a4605fb4b22 Mon Sep 17 00:00:00 2001 From: brunobar79 Date: Tue, 17 Jul 2018 01:44:28 -0400 Subject: added tests for removeAccount --- .../app/controllers/metamask-controller-test.js | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/metamask-controller-test.js b/test/unit/app/controllers/metamask-controller-test.js index a08371f86..9164fe246 100644 --- a/test/unit/app/controllers/metamask-controller-test.js +++ b/test/unit/app/controllers/metamask-controller-test.js @@ -485,6 +485,39 @@ describe('MetaMaskController', function () { }) }) + describe('#removeAccount', function () { + let ret + const addressToRemove = '0x1' + + beforeEach(async function () { + sinon.stub(metamaskController.preferencesController, 'removeAddress') + sinon.stub(metamaskController.accountTracker, 'removeAccount') + sinon.stub(metamaskController.keyringController, 'removeAccount') + + ret = await metamaskController.removeAccount(addressToRemove) + + }) + + afterEach(function () { + metamaskController.keyringController.removeAccount.restore() + metamaskController.accountTracker.removeAccount.restore() + metamaskController.preferencesController.removeAddress.restore() + }) + + it('should call preferencesController.removeAddress', async function () { + assert(metamaskController.preferencesController.removeAddress.calledWith(addressToRemove)) + }) + it('should call accountTracker.removeAccount', async function () { + assert(metamaskController.accountTracker.removeAccount.calledWith(addressToRemove)) + }) + it('should call keyringController.removeAccount', async function () { + assert(metamaskController.keyringController.removeAccount.calledWith(addressToRemove)) + }) + it('should return address', async function () { + assert.equal(ret, '0x1') + }) + }) + describe('#clearSeedWordCache', function () { it('should have set seed words', function () { -- cgit From 3b97d816ffcaebc7606d4564ea95918f647ba413 Mon Sep 17 00:00:00 2001 From: Esteban MIno Date: Thu, 19 Jul 2018 15:56:38 -0400 Subject: detect tokens when submit password and new account selected --- test/unit/app/controllers/detect-tokens-test.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/detect-tokens-test.js b/test/unit/app/controllers/detect-tokens-test.js index 860ed7050..49492c543 100644 --- a/test/unit/app/controllers/detect-tokens-test.js +++ b/test/unit/app/controllers/detect-tokens-test.js @@ -28,7 +28,7 @@ describe('DetectTokensController', () => { const controller = new DetectTokensController({preferences: preferences, network: network}) controller.isActive = true - var stub = sandbox.stub(controller, 'exploreNewTokens') + var stub = sandbox.stub(controller, 'detectNewTokens') clock.tick(1) sandbox.assert.notCalled(stub) @@ -51,7 +51,7 @@ describe('DetectTokensController', () => { .withArgs('0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4').returns(true) .withArgs('0xBC86727E770de68B1060C91f6BB6945c73e10388').returns(true) - await controller.exploreNewTokens() + await controller.detectNewTokens() sandbox.assert.notCalled(stub) }) @@ -68,7 +68,7 @@ describe('DetectTokensController', () => { .withArgs('0xBC86727E770de68B1060C91f6BB6945c73e10388') .returns(preferences.addToken('0xbc86727e770de68b1060c91f6bb6945c73e10388', 'XNK', 18)) - await controller.exploreNewTokens() + await controller.detectNewTokens() assert.deepEqual(preferences.store.getState().tokens, [{address: '0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', decimals: 8, symbol: 'J8T'}, {address: '0xbc86727e770de68b1060c91f6bb6945c73e10388', decimals: 18, symbol: 'XNK'}]) }) @@ -87,7 +87,7 @@ describe('DetectTokensController', () => { .withArgs('0xBC86727E770de68B1060C91f6BB6945c73e10388') .returns(preferences.addToken('0xbc86727e770de68b1060c91f6bb6945c73e10388', 'XNK', 18)) - await controller.exploreNewTokens() + await controller.detectNewTokens() assert.deepEqual(preferences.store.getState().tokens, [{address: '0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', decimals: 8, symbol: 'J8T'}, {address: '0xbc86727e770de68b1060c91f6bb6945c73e10388', decimals: 18, symbol: 'XNK'}]) }) -- cgit From 009b1cefbe3d19dcad01078927b1a55c3439b22f Mon Sep 17 00:00:00 2001 From: Esteban MIno Date: Thu, 19 Jul 2018 19:46:46 -0400 Subject: keyring unlocked detect and unit tests --- test/unit/app/controllers/detect-tokens-test.js | 38 +++++++++++++++++++++---- 1 file changed, 32 insertions(+), 6 deletions(-) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/detect-tokens-test.js b/test/unit/app/controllers/detect-tokens-test.js index 49492c543..dcb3c431f 100644 --- a/test/unit/app/controllers/detect-tokens-test.js +++ b/test/unit/app/controllers/detect-tokens-test.js @@ -1,14 +1,17 @@ const assert = require('assert') const sinon = require('sinon') +const ObservableStore = require('obs-store') const DetectTokensController = require('../../../../app/scripts/controllers/detect-tokens') const NetworkController = require('../../../../app/scripts/controllers/network/network') const PreferencesController = require('../../../../app/scripts/controllers/preferences') describe('DetectTokensController', () => { - const sandbox = sinon.createSandbox() + const sandbox = sinon.createSandbox() let clock + let keyringMemStore before(async () => { - }) + keyringMemStore = new ObservableStore({ isUnlocked: false}) + }) after(() => { sandbox.restore() }) @@ -25,7 +28,7 @@ describe('DetectTokensController', () => { const network = new NetworkController() network.setProviderType('mainnet') const preferences = new PreferencesController() - const controller = new DetectTokensController({preferences: preferences, network: network}) + const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) controller.isActive = true var stub = sandbox.stub(controller, 'detectNewTokens') @@ -44,7 +47,7 @@ describe('DetectTokensController', () => { const network = new NetworkController() network.setProviderType('rinkeby') const preferences = new PreferencesController() - const controller = new DetectTokensController({preferences: preferences, network: network}) + const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) controller.isActive = true var stub = sandbox.stub(controller, 'detectTokenBalance') @@ -59,7 +62,7 @@ describe('DetectTokensController', () => { const network = new NetworkController() network.setProviderType('mainnet') const preferences = new PreferencesController() - const controller = new DetectTokensController({preferences: preferences, network: network}) + const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) controller.isActive = true sandbox.stub(controller, 'detectTokenBalance') @@ -78,7 +81,7 @@ describe('DetectTokensController', () => { network.setProviderType('mainnet') const preferences = new PreferencesController() preferences.addToken('0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', 'J8T', 8) - const controller = new DetectTokensController({preferences: preferences, network: network}) + const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) controller.isActive = true sandbox.stub(controller, 'detectTokenBalance') @@ -91,4 +94,27 @@ describe('DetectTokensController', () => { assert.deepEqual(preferences.store.getState().tokens, [{address: '0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', decimals: 8, symbol: 'J8T'}, {address: '0xbc86727e770de68b1060c91f6bb6945c73e10388', decimals: 18, symbol: 'XNK'}]) }) + + it('should trigger detect new tokens when change address', async () => { + const network = new NetworkController() + network.setProviderType('mainnet') + const preferences = new PreferencesController() + const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) + controller.isActive = true + var stub = sandbox.stub(controller, 'detectNewTokens') + await preferences.setSelectedAddress('0xbc86727e770de68b1060c91f6bb6945c73e10388') + sandbox.assert.called(stub) + }) + + it('should trigger detect new tokens when submit password', async () => { + const network = new NetworkController() + network.setProviderType('mainnet') + const preferences = new PreferencesController() + const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) + controller.isActive = true + controller.selectedAddress = '0x0' + var stub = sandbox.stub(controller, 'detectNewTokens') + await controller._keyringMemStore.updateState({ isUnlocked: true }) + sandbox.assert.called(stub) + }) }) -- cgit From cb045fd8feec88bd631329ab9b3285aeed0f2e97 Mon Sep 17 00:00:00 2001 From: Esteban MiƱo Date: Fri, 20 Jul 2018 12:36:24 -0400 Subject: Auto-detect tokens #3034 (#4683) * detect tokens polling * network store to detect token * tests for spec * passtest-lint * fix lint * improve tests * detect tokens through infura * detect tokens when submit password and new account selected * keyring unlocked detect and unit tests * add changelog --- test/unit/app/controllers/detect-tokens-test.js | 120 ++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 test/unit/app/controllers/detect-tokens-test.js (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/detect-tokens-test.js b/test/unit/app/controllers/detect-tokens-test.js new file mode 100644 index 000000000..dcb3c431f --- /dev/null +++ b/test/unit/app/controllers/detect-tokens-test.js @@ -0,0 +1,120 @@ +const assert = require('assert') +const sinon = require('sinon') +const ObservableStore = require('obs-store') +const DetectTokensController = require('../../../../app/scripts/controllers/detect-tokens') +const NetworkController = require('../../../../app/scripts/controllers/network/network') +const PreferencesController = require('../../../../app/scripts/controllers/preferences') + +describe('DetectTokensController', () => { + const sandbox = sinon.createSandbox() + let clock + let keyringMemStore + before(async () => { + keyringMemStore = new ObservableStore({ isUnlocked: false}) + }) + after(() => { + sandbox.restore() + }) + + it('should poll on correct interval', async () => { + const stub = sinon.stub(global, 'setInterval') + new DetectTokensController({ interval: 1337 }) // eslint-disable-line no-new + assert.strictEqual(stub.getCall(0).args[1], 1337) + stub.restore() + }) + + it('should be called on every polling period', async () => { + clock = sandbox.useFakeTimers() + const network = new NetworkController() + network.setProviderType('mainnet') + const preferences = new PreferencesController() + const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) + controller.isActive = true + + var stub = sandbox.stub(controller, 'detectNewTokens') + + clock.tick(1) + sandbox.assert.notCalled(stub) + clock.tick(180000) + sandbox.assert.called(stub) + clock.tick(180000) + sandbox.assert.calledTwice(stub) + clock.tick(180000) + sandbox.assert.calledThrice(stub) + }) + + it('should not check tokens while in test network', async () => { + const network = new NetworkController() + network.setProviderType('rinkeby') + const preferences = new PreferencesController() + const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) + controller.isActive = true + + var stub = sandbox.stub(controller, 'detectTokenBalance') + .withArgs('0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4').returns(true) + .withArgs('0xBC86727E770de68B1060C91f6BB6945c73e10388').returns(true) + + await controller.detectNewTokens() + sandbox.assert.notCalled(stub) + }) + + it('should only check and add tokens while in main network', async () => { + const network = new NetworkController() + network.setProviderType('mainnet') + const preferences = new PreferencesController() + const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) + controller.isActive = true + + sandbox.stub(controller, 'detectTokenBalance') + .withArgs('0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4') + .returns(preferences.addToken('0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', 'J8T', 8)) + .withArgs('0xBC86727E770de68B1060C91f6BB6945c73e10388') + .returns(preferences.addToken('0xbc86727e770de68b1060c91f6bb6945c73e10388', 'XNK', 18)) + + await controller.detectNewTokens() + assert.deepEqual(preferences.store.getState().tokens, [{address: '0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', decimals: 8, symbol: 'J8T'}, + {address: '0xbc86727e770de68b1060c91f6bb6945c73e10388', decimals: 18, symbol: 'XNK'}]) + }) + + it('should not detect same token while in main network', async () => { + const network = new NetworkController() + network.setProviderType('mainnet') + const preferences = new PreferencesController() + preferences.addToken('0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', 'J8T', 8) + const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) + controller.isActive = true + + sandbox.stub(controller, 'detectTokenBalance') + .withArgs('0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4') + .returns(preferences.addToken('0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', 'J8T', 8)) + .withArgs('0xBC86727E770de68B1060C91f6BB6945c73e10388') + .returns(preferences.addToken('0xbc86727e770de68b1060c91f6bb6945c73e10388', 'XNK', 18)) + + await controller.detectNewTokens() + assert.deepEqual(preferences.store.getState().tokens, [{address: '0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', decimals: 8, symbol: 'J8T'}, + {address: '0xbc86727e770de68b1060c91f6bb6945c73e10388', decimals: 18, symbol: 'XNK'}]) + }) + + it('should trigger detect new tokens when change address', async () => { + const network = new NetworkController() + network.setProviderType('mainnet') + const preferences = new PreferencesController() + const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) + controller.isActive = true + var stub = sandbox.stub(controller, 'detectNewTokens') + await preferences.setSelectedAddress('0xbc86727e770de68b1060c91f6bb6945c73e10388') + sandbox.assert.called(stub) + }) + + it('should trigger detect new tokens when submit password', async () => { + const network = new NetworkController() + network.setProviderType('mainnet') + const preferences = new PreferencesController() + const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) + controller.isActive = true + controller.selectedAddress = '0x0' + var stub = sandbox.stub(controller, 'detectNewTokens') + await controller._keyringMemStore.updateState({ isUnlocked: true }) + sandbox.assert.called(stub) + }) +}) -- cgit From 9c955549338f49d8b5eb6ca003c2c65c725aa328 Mon Sep 17 00:00:00 2001 From: Esteban MIno Date: Fri, 20 Jul 2018 19:58:03 -0400 Subject: fix detection on submit password --- test/unit/app/controllers/detect-tokens-test.js | 33 ++++++++++++++++++++----- 1 file changed, 27 insertions(+), 6 deletions(-) (limited to 'test/unit/app/controllers') diff --git a/test/unit/app/controllers/detect-tokens-test.js b/test/unit/app/controllers/detect-tokens-test.js index dcb3c431f..426ffe23a 100644 --- a/test/unit/app/controllers/detect-tokens-test.js +++ b/test/unit/app/controllers/detect-tokens-test.js @@ -29,7 +29,8 @@ describe('DetectTokensController', () => { network.setProviderType('mainnet') const preferences = new PreferencesController() const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) - controller.isActive = true + controller.isOpen = true + controller.isUnlocked = true var stub = sandbox.stub(controller, 'detectNewTokens') @@ -48,7 +49,8 @@ describe('DetectTokensController', () => { network.setProviderType('rinkeby') const preferences = new PreferencesController() const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) - controller.isActive = true + controller.isOpen = true + controller.isUnlocked = true var stub = sandbox.stub(controller, 'detectTokenBalance') .withArgs('0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4').returns(true) @@ -63,7 +65,8 @@ describe('DetectTokensController', () => { network.setProviderType('mainnet') const preferences = new PreferencesController() const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) - controller.isActive = true + controller.isOpen = true + controller.isUnlocked = true sandbox.stub(controller, 'detectTokenBalance') .withArgs('0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4') @@ -82,7 +85,8 @@ describe('DetectTokensController', () => { const preferences = new PreferencesController() preferences.addToken('0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', 'J8T', 8) const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) - controller.isActive = true + controller.isOpen = true + controller.isUnlocked = true sandbox.stub(controller, 'detectTokenBalance') .withArgs('0x0D262e5dC4A06a0F1c90cE79C7a60C09DfC884E4') @@ -100,7 +104,8 @@ describe('DetectTokensController', () => { network.setProviderType('mainnet') const preferences = new PreferencesController() const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) - controller.isActive = true + controller.isOpen = true + controller.isUnlocked = true var stub = sandbox.stub(controller, 'detectNewTokens') await preferences.setSelectedAddress('0xbc86727e770de68b1060c91f6bb6945c73e10388') sandbox.assert.called(stub) @@ -111,10 +116,26 @@ describe('DetectTokensController', () => { network.setProviderType('mainnet') const preferences = new PreferencesController() const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) - controller.isActive = true + controller.isOpen = true controller.selectedAddress = '0x0' var stub = sandbox.stub(controller, 'detectNewTokens') await controller._keyringMemStore.updateState({ isUnlocked: true }) sandbox.assert.called(stub) }) + + it('should not trigger detect new tokens when not open or not unlocked', async () => { + const network = new NetworkController() + network.setProviderType('mainnet') + const preferences = new PreferencesController() + const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) + controller.isOpen = true + controller.isUnlocked = false + var stub = sandbox.stub(controller, 'detectTokenBalance') + clock.tick(180000) + sandbox.assert.notCalled(stub) + controller.isOpen = false + controller.isUnlocked = true + clock.tick(180000) + sandbox.assert.notCalled(stub) + }) }) -- cgit