From be3f411a6016fc363029ef618c9a58bf4d0cf015 Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 10 Oct 2018 01:12:46 -0700 Subject: Reducers --- test/unit/ui/app/reducers/metamask.spec.js | 504 +++++++++++++++++++++++++++++ 1 file changed, 504 insertions(+) create mode 100644 test/unit/ui/app/reducers/metamask.spec.js (limited to 'test/unit/ui/app/reducers/metamask.spec.js') diff --git a/test/unit/ui/app/reducers/metamask.spec.js b/test/unit/ui/app/reducers/metamask.spec.js new file mode 100644 index 000000000..b0c57304b --- /dev/null +++ b/test/unit/ui/app/reducers/metamask.spec.js @@ -0,0 +1,504 @@ +import assert from 'assert' +import reduceMetamask from '../../../../../ui/app/reducers/metamask' +import * as actions from '../../../../../ui/app/actions' + +describe('MetaMask Reducers', () => { + let initState, + noticesState, + unlockMetaMaskState, + seedWordsState, + showNewVaultSeedState, + sendState, + pendingTokensState + + it('init state', () => { + initState = reduceMetamask({metamask:{}}, {}) + assert(initState) + }) + + it('sets revealing seed to true and adds seed words to new state', () => { + seedWordsState = reduceMetamask({}, { + type: actions.SHOW_NEW_VAULT_SEED, + value: 'test seed words', + }) + + assert.equal(seedWordsState.seedWords, 'test seed words') + assert.equal(seedWordsState.isRevealingSeedWords, true) + }) + + it('shows account page', () => { + const state = reduceMetamask(seedWordsState, { + type: actions.SHOW_ACCOUNTS_PAGE, + }) + + assert.equal(seedWordsState.seedWords, 'test seed words') + assert.equal(state.seedWords, undefined) + assert.equal(state.isRevealingSeedWords, false) + }) + + it('shows notice', () => { + const notice = { + id: 0, + read: false, + date: 'Date', + title: 'Title', + body: 'Body', + } + noticesState = reduceMetamask({}, { + type: actions.SHOW_NOTICE, + value: notice, + }) + + assert.equal(noticesState.noActiveNotices, false) + assert.equal(noticesState.nextUnreadNotice, notice) + }) + + it('clears notice', () => { + const state = reduceMetamask(noticesState, { + type: actions.CLEAR_NOTICES, + }) + + assert.equal(state.noActiveNotices, true) + }) + + it('unlocks MetaMask', () => { + unlockMetaMaskState = reduceMetamask({}, { + type: actions.UNLOCK_METAMASK, + value: 'test address', + }) + + assert.equal(unlockMetaMaskState.isUnlocked, true) + assert.equal(unlockMetaMaskState.isInitialized, true) + assert.equal(unlockMetaMaskState.selectedAddress, 'test address') + }) + + it('locks MetaMask', () => { + const lockMetaMask = reduceMetamask(unlockMetaMaskState, { + type: actions.LOCK_METAMASK, + }) + + assert.equal(lockMetaMask.isUnlocked, false) + }) + + it('sets frequent rpc list', () => { + const state = reduceMetamask({}, { + type: actions.SET_RPC_LIST, + value: 'https://custom.rpc', + }) + + assert.equal(state.frequentRpcList, 'https://custom.rpc') + }) + + it('sets rpc target', () => { + const state = reduceMetamask({}, { + type: actions.SET_RPC_TARGET, + value: 'https://custom.rpc', + }) + + assert.equal(state.provider.rpcTarget, 'https://custom.rpc') + }) + + it('sets provider type', () => { + const state = reduceMetamask({}, { + type: actions.SET_PROVIDER_TYPE, + value: 'provider type', + }) + + assert.equal(state.provider.type, 'provider type') + }) + + describe('CompletedTx', () => { + const oldState = { + metamask: { + unapprovedTxs: { + 1: { + id: 1, + time: 1538495996507, + status: 'unapproved', + metamaskNetworkId: 4, + loadingDefaults: false, + txParams: { + from: '0xAddress', + to: '0xAddress2', + value: '0x16345785d8a0000', + gas: '0x5208', + gasPrice: '0x3b9aca00', + }, + type: 'standard', + }, + 2: { + test: 'Should persist', + }, + }, + unapprovedMsgs: { + 1: { + id: 2, + msgParams: { + from: '0xAddress', + data: '0xData', + origin: 'test origin', + }, + time: 1538498521717, + status: 'unapproved', + type: 'eth_sign', + }, + 2: { + test: 'Should Persist', + }, + }, + }, + } + + it('removes tx from new state if completed in action.', () => { + + const state = reduceMetamask(oldState, { + type: actions.COMPLETED_TX, + id: 1, + }) + + assert.equal(Object.keys(state.unapprovedTxs).length, 1) + assert.equal(state.unapprovedTxs[2].test, 'Should persist') + }) + + it('removes msg from new state if completed id in action', () => { + const state = reduceMetamask(oldState, { + type: actions.COMPLETED_TX, + id: 1, + }) + + assert.equal(Object.keys(state.unapprovedMsgs).length, 1) + assert.equal(state.unapprovedTxs[2].test, 'Should persist') + }) + }) + + it('shows new vault seed words and sets isRevealingSeedWords to true', () => { + showNewVaultSeedState = reduceMetamask({}, { + type: actions.SHOW_NEW_VAULT_SEED, + value: 'test seed words', + }) + + assert.equal(showNewVaultSeedState.isRevealingSeedWords, true) + assert.equal(showNewVaultSeedState.seedWords, 'test seed words') + }) + + it('shows account detail', () => { + const state = reduceMetamask(showNewVaultSeedState, { + type: actions.SHOW_ACCOUNT_DETAIL, + value: 'test address', + }) + + assert.equal(state.isUnlocked, true) + assert.equal(state.isInitialized, true) + assert.equal(state.selectedAddress, 'test address') + }) + + it('sets select ', () => { + const state = reduceMetamask({}, { + type: actions.SET_SELECTED_TOKEN, + value: 'test token', + }) + + assert.equal(state.selectedTokenAddress, 'test token') + }) + + it('sets account label', () => { + const state = reduceMetamask({}, { + type: actions.SET_ACCOUNT_LABEL, + value: { + account: 'test account', + label: 'test label', + }, + }) + + assert.deepEqual(state.identities, { 'test account': { name: 'test label' } }) + }) + + it('sets current fiat', () => { + const value = { + currentCurrency: 'yen', + conversionRate: 3.14, + conversionDate: new Date(2018, 9), + } + + const state = reduceMetamask({}, { + type: actions.SET_CURRENT_FIAT, + value, + }) + + assert.equal(state.currentCurrency, value.currentCurrency) + assert.equal(state.conversionRate, value.conversionRate) + assert.equal(state.conversionDate, value.conversionDate) + }) + + it('updates tokens', () => { + const newTokens = { + 'address': '0x617b3f8050a0bd94b6b1da02b4384ee5b4df13f4', + 'decimals': 18, + 'symbol': 'META', + } + + const state = reduceMetamask({}, { + type: actions.UPDATE_TOKENS, + newTokens, + }) + + assert.deepEqual(state.tokens, newTokens) + }) + + it('updates send gas limit', () => { + + const state = reduceMetamask({}, { + type: actions.UPDATE_GAS_LIMIT, + value: '0xGasLimit', + }) + + assert.equal(state.send.gasLimit, '0xGasLimit') + }) + + it('updates send gas price', () => { + const state = reduceMetamask({}, { + type: actions.UPDATE_GAS_PRICE, + value: '0xGasPrice', + }) + + assert.equal(state.send.gasPrice, '0xGasPrice') + }) + + it('toggles account menu ', () => { + const state = reduceMetamask({}, { + type: actions.TOGGLE_ACCOUNT_MENU, + }) + + assert.equal(state.isAccountMenuOpen, true) + }) + + it('updates gas total', () => { + const state = reduceMetamask({}, { + type: actions.UPDATE_GAS_TOTAL, + value: '0xGasTotal', + }) + + assert.equal(state.send.gasTotal, '0xGasTotal') + }) + + it('updates send token balance', () => { + const state = reduceMetamask({}, { + type: actions.UPDATE_SEND_TOKEN_BALANCE, + value: '0xTokenBalance', + }) + + assert.equal(state.send.tokenBalance, '0xTokenBalance') + }) + + it('updates data', () => { + const state = reduceMetamask({}, { + type: actions.UPDATE_SEND_HEX_DATA, + value: '0xData', + }) + + assert.equal(state.send.data, '0xData') + }) + + it('updates send to', () => { + const state = reduceMetamask({}, { + type: actions.UPDATE_SEND_TO, + value: { + to: '0xAddress', + nickname: 'nickname', + }, + }) + + assert.equal(state.send.to, '0xAddress') + assert.equal(state.send.toNickname, 'nickname') + }) + + it('update send from', () => { + const state = reduceMetamask({}, { + type: actions.UPDATE_SEND_FROM, + value: '0xAddress', + }) + + assert.equal(state.send.from, '0xAddress') + }) + + it('update send amount', () => { + const state = reduceMetamask({}, { + type: actions.UPDATE_SEND_AMOUNT, + value: '0xAmount', + }) + + assert.equal(state.send.amount, '0xAmount') + }) + + it('update send memo', () => { + const state = reduceMetamask({}, { + type: actions.UPDATE_SEND_MEMO, + value: '0xMemo', + }) + + assert.equal(state.send.memo, '0xMemo') + }) + + it('updates max mode', () => { + const state = reduceMetamask({}, { + type: actions.UPDATE_MAX_MODE, + value: true, + }) + + assert.equal(state.send.maxModeOn, true) + }) + + it('update send', () => { + const value = { + gasLimit: '0xGasLimit', + gasPrice: '0xGasPrice', + gasTotal: '0xGasTotal', + tokenBalance: '0xBalance', + from: '0xAddress', + to: '0xAddress', + toNickname: '', + maxModeOn: false, + amount: '0xAmount', + memo: '0xMemo', + errors: {}, + editingTransactionId: 22, + forceGasMin: '0xGas', + } + + sendState = reduceMetamask({}, { + type: actions.UPDATE_SEND, + value, + }) + + assert.deepEqual(sendState.send, value) + }) + + it('clears send', () => { + const state = reduceMetamask(sendState, { + type: actions.CLEAR_SEND, + }) + assert.deepEqual(state.send, initState.send) + }) + + it('updates value of tx by id', () => { + const oldState = { + metamask: { + selectedAddressTxList: [ + { + id: 1, + txParams: 'foo', + }, + ], + }, + } + + const state = reduceMetamask(oldState, { + type: actions.UPDATE_TRANSACTION_PARAMS, + id: 1, + value: 'bar', + }) + + assert.equal(state.selectedAddressTxList[0].txParams, 'bar') + }) + + it('updates pair for shapeshift', () => { + const state = reduceMetamask({}, { + type: actions.PAIR_UPDATE, + value: { + marketinfo: { + pair: 'test pair', + foo: 'bar', + }, + }, + }) + assert.equal(state.tokenExchangeRates['test pair'].pair, 'test pair') + }) + + it('upates pair and coin options for shapeshift subview', () => { + const state = reduceMetamask({}, { + type: actions.SHAPESHIFT_SUBVIEW, + value: { + marketinfo: { + pair: 'test pair', + }, + coinOptions: { + foo: 'bar', + }, + }, + }) + + assert.equal(state.coinOptions.foo, 'bar') + assert.equal(state.tokenExchangeRates['test pair'].pair, 'test pair') + }) + + it('sets blockies', () => { + const state = reduceMetamask({}, { + type: actions.SET_USE_BLOCKIE, + value: true, + }) + + assert.equal(state.useBlockie, true) + }) + + it('updates feature flag', () => { + const state = reduceMetamask({}, { + type: actions.UPDATE_FEATURE_FLAGS, + value: { + betaUI: true, + skipAnnounceBetaUI: true, + }, + }) + + assert.equal(state.featureFlags.betaUI, true) + assert.equal(state.featureFlags.skipAnnounceBetaUI, true) + }) + + it('updates network endpoint type', () => { + const state = reduceMetamask({}, { + type: actions.UPDATE_NETWORK_ENDPOINT_TYPE, + value: 'endpoint', + }) + + assert.equal(state.networkEndpointType, 'endpoint') + }) + + it('close welcome screen', () => { + const state = reduceMetamask({}, { + type: actions.CLOSE_WELCOME_SCREEN, + }) + + assert.equal(state.welcomeScreenSeen, true) + }) + + it('sets current locale', () => { + const state = reduceMetamask({}, { + type: actions.SET_CURRENT_LOCALE, + value: 'ge', + }) + + assert.equal(state.currentLocale, 'ge') + }) + + it('sets pending tokens ', () => { + const payload = { + 'address': '0x617b3f8050a0bd94b6b1da02b4384ee5b4df13f4', + 'decimals': 18, + 'symbol': 'META', + } + + pendingTokensState = reduceMetamask({}, { + type: actions.SET_PENDING_TOKENS, + payload, + }) + + assert.deepEqual(pendingTokensState.pendingTokens, payload) + }) + + it('clears pending tokens', () => { + const state = reduceMetamask(pendingTokensState, { + type: actions.CLEAR_PENDING_TOKENS, + }) + + assert.deepEqual(state.pendingTokens, {}) + }) +}) -- cgit From 7607794851ff534faf51fce6ed37d24d33818f18 Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 31 Oct 2018 07:07:25 -0700 Subject: Readable tests, and set nextUnreadNotice to null when CLEAR_NOTICES is dispatched --- test/unit/ui/app/reducers/metamask.spec.js | 118 +++++++++++++++++++++++------ 1 file changed, 95 insertions(+), 23 deletions(-) (limited to 'test/unit/ui/app/reducers/metamask.spec.js') diff --git a/test/unit/ui/app/reducers/metamask.spec.js b/test/unit/ui/app/reducers/metamask.spec.js index b0c57304b..6d43a97d4 100644 --- a/test/unit/ui/app/reducers/metamask.spec.js +++ b/test/unit/ui/app/reducers/metamask.spec.js @@ -2,22 +2,15 @@ import assert from 'assert' import reduceMetamask from '../../../../../ui/app/reducers/metamask' import * as actions from '../../../../../ui/app/actions' -describe('MetaMask Reducers', () => { - let initState, - noticesState, - unlockMetaMaskState, - seedWordsState, - showNewVaultSeedState, - sendState, - pendingTokensState +describe.only('MetaMask Reducers', () => { it('init state', () => { - initState = reduceMetamask({metamask:{}}, {}) + const initState = reduceMetamask({metamask:{}}, {}) assert(initState) }) it('sets revealing seed to true and adds seed words to new state', () => { - seedWordsState = reduceMetamask({}, { + const seedWordsState = reduceMetamask({}, { type: actions.SHOW_NEW_VAULT_SEED, value: 'test seed words', }) @@ -27,11 +20,17 @@ describe('MetaMask Reducers', () => { }) it('shows account page', () => { + const seedWordsState = { + metamask: { + seedwords: 'test seed words', + isRevealing: true, + }, + } + const state = reduceMetamask(seedWordsState, { type: actions.SHOW_ACCOUNTS_PAGE, }) - assert.equal(seedWordsState.seedWords, 'test seed words') assert.equal(state.seedWords, undefined) assert.equal(state.isRevealingSeedWords, false) }) @@ -44,35 +43,60 @@ describe('MetaMask Reducers', () => { title: 'Title', body: 'Body', } - noticesState = reduceMetamask({}, { + + const state = reduceMetamask({}, { type: actions.SHOW_NOTICE, value: notice, }) - assert.equal(noticesState.noActiveNotices, false) - assert.equal(noticesState.nextUnreadNotice, notice) + assert.equal(state.noActiveNotices, false) + assert.equal(state.nextUnreadNotice, notice) }) it('clears notice', () => { + + const notice = { + id: 0, + read: false, + date: 'Date', + title: 'Title', + body: 'Body', + } + + const noticesState = { + metamask: { + noActiveNotices: false, + nextUnreadNotice: notice, + }, + } + const state = reduceMetamask(noticesState, { type: actions.CLEAR_NOTICES, }) assert.equal(state.noActiveNotices, true) + assert.equal(state.nextUnreadNotice, null) }) it('unlocks MetaMask', () => { - unlockMetaMaskState = reduceMetamask({}, { + const state = reduceMetamask({}, { type: actions.UNLOCK_METAMASK, value: 'test address', }) - assert.equal(unlockMetaMaskState.isUnlocked, true) - assert.equal(unlockMetaMaskState.isInitialized, true) - assert.equal(unlockMetaMaskState.selectedAddress, 'test address') + assert.equal(state.isUnlocked, true) + assert.equal(state.isInitialized, true) + assert.equal(state.selectedAddress, 'test address') }) it('locks MetaMask', () => { + const unlockMetaMaskState = { + metamask: { + isUnlocked: true, + isInitialzed: false, + selectedAddress: 'test address', + }, + } const lockMetaMask = reduceMetamask(unlockMetaMaskState, { type: actions.LOCK_METAMASK, }) @@ -172,7 +196,7 @@ describe('MetaMask Reducers', () => { }) it('shows new vault seed words and sets isRevealingSeedWords to true', () => { - showNewVaultSeedState = reduceMetamask({}, { + const showNewVaultSeedState = reduceMetamask({}, { type: actions.SHOW_NEW_VAULT_SEED, value: 'test seed words', }) @@ -182,7 +206,8 @@ describe('MetaMask Reducers', () => { }) it('shows account detail', () => { - const state = reduceMetamask(showNewVaultSeedState, { + + const state = reduceMetamask({}, { type: actions.SHOW_ACCOUNT_DETAIL, value: 'test address', }) @@ -365,7 +390,7 @@ describe('MetaMask Reducers', () => { forceGasMin: '0xGas', } - sendState = reduceMetamask({}, { + const sendState = reduceMetamask({}, { type: actions.UPDATE_SEND, value, }) @@ -374,10 +399,47 @@ describe('MetaMask Reducers', () => { }) it('clears send', () => { + const initStateSend = { + send: + { gasLimit: null, + gasPrice: null, + gasTotal: null, + tokenBalance: null, + from: '', + to: '', + amount: '0x0', + memo: '', + errors: {}, + maxModeOn: false, + editingTransactionId: null, + forceGasMin: null, + toNickname: '' }, + } + + const sendState = { + send: { + gasLimit: '0xGasLimit', + gasPrice: '0xGasPrice', + gasTotal: '0xGasTotal', + tokenBalance: '0xBalance', + from: '0xAddress', + to: '0xAddress', + toNickname: '', + maxModeOn: false, + amount: '0xAmount', + memo: '0xMemo', + errors: {}, + editingTransactionId: 22, + forceGasMin: '0xGas', + }, + } + + const state = reduceMetamask(sendState, { type: actions.CLEAR_SEND, }) - assert.deepEqual(state.send, initState.send) + + assert.deepEqual(state.send, initStateSend.send) }) it('updates value of tx by id', () => { @@ -486,7 +548,7 @@ describe('MetaMask Reducers', () => { 'symbol': 'META', } - pendingTokensState = reduceMetamask({}, { + const pendingTokensState = reduceMetamask({}, { type: actions.SET_PENDING_TOKENS, payload, }) @@ -495,6 +557,16 @@ describe('MetaMask Reducers', () => { }) it('clears pending tokens', () => { + const payload = { + 'address': '0x617b3f8050a0bd94b6b1da02b4384ee5b4df13f4', + 'decimals': 18, + 'symbol': 'META', + } + + const pendingTokensState = { + pendingTokens: payload, + } + const state = reduceMetamask(pendingTokensState, { type: actions.CLEAR_PENDING_TOKENS, }) -- cgit From f2fea8043edca84f1aa9ebc13ecea55c9919070d Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 31 Oct 2018 07:09:02 -0700 Subject: Remove .only --- test/unit/ui/app/reducers/metamask.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'test/unit/ui/app/reducers/metamask.spec.js') diff --git a/test/unit/ui/app/reducers/metamask.spec.js b/test/unit/ui/app/reducers/metamask.spec.js index 6d43a97d4..e1a50eef2 100644 --- a/test/unit/ui/app/reducers/metamask.spec.js +++ b/test/unit/ui/app/reducers/metamask.spec.js @@ -2,7 +2,7 @@ import assert from 'assert' import reduceMetamask from '../../../../../ui/app/reducers/metamask' import * as actions from '../../../../../ui/app/actions' -describe.only('MetaMask Reducers', () => { +describe('MetaMask Reducers', () => { it('init state', () => { const initState = reduceMetamask({metamask:{}}, {}) -- cgit