Merge pull request #4321 from MetaMask/testing
MM controller tests and reorganizing test filesfeature/default_network_editable
commit
cee55b47d0
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@ |
||||
const assert = require('assert') |
||||
const ComposableObservableStore = require('../../app/scripts/lib/ComposableObservableStore') |
||||
const ComposableObservableStore = require('../../../app/scripts/lib/ComposableObservableStore') |
||||
const ObservableStore = require('obs-store') |
||||
|
||||
describe('ComposableObservableStore', () => { |
@ -0,0 +1,31 @@ |
||||
const assert = require('assert') |
||||
const path = require('path') |
||||
const accountImporter = require('../../../app/scripts/account-import-strategies/index') |
||||
const ethUtil = require('ethereumjs-util') |
||||
|
||||
describe('Account Import Strategies', function () { |
||||
const privkey = '0x4cfd3e90fc78b0f86bf7524722150bb8da9c60cd532564d7ff43f5716514f553' |
||||
const json = '{"version":3,"id":"dbb54385-0a99-437f-83c0-647de9f244c3","address":"a7f92ce3fba24196cf6f4bd2e1eb3db282ba998c","Crypto":{"ciphertext":"bde13d9ade5c82df80281ca363320ce254a8a3a06535bbf6ffdeaf0726b1312c","cipherparams":{"iv":"fbf93718a57f26051b292f072f2e5b41"},"cipher":"aes-128-ctr","kdf":"scrypt","kdfparams":{"dklen":32,"salt":"7ffe00488319dec48e4c49a120ca49c6afbde9272854c64d9541c83fc6acdffe","n":8192,"r":8,"p":1},"mac":"2adfd9c4bc1cdac4c85bddfb31d9e21a684e0e050247a70c5698facf6b7d4681"}}' |
||||
|
||||
it('imports a private key and strips 0x prefix', async function () { |
||||
const importPrivKey = await accountImporter.importAccount('Private Key', [ privkey ]) |
||||
assert.equal(importPrivKey, ethUtil.stripHexPrefix(privkey)) |
||||
}) |
||||
|
||||
it('fails when password is incorrect for keystore', async function () { |
||||
const wrongPassword = 'password2' |
||||
|
||||
try { |
||||
await accountImporter.importAccount('JSON File', [ json, wrongPassword]) |
||||
} catch (error) { |
||||
assert.equal(error.message, 'Key derivation failed - possibly wrong passphrase') |
||||
} |
||||
}) |
||||
|
||||
it('imports json string and password to return a private key', async function () { |
||||
const fileContentsPassword = 'password1' |
||||
const importJson = await accountImporter.importAccount('JSON File', [ json, fileContentsPassword]) |
||||
assert.equal(importJson, '0x5733876abe94146069ce8bcbabbde2677f2e35fa33e875e92041ed2ac87e5bc7') |
||||
}) |
||||
|
||||
}) |
@ -0,0 +1,48 @@ |
||||
const assert = require('assert') |
||||
const getBuyEthUrl = require('../../../app/scripts/lib/buy-eth-url') |
||||
|
||||
describe('', function () { |
||||
const mainnet = { |
||||
network: '1', |
||||
amount: 5, |
||||
address: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc', |
||||
} |
||||
const ropsten = { |
||||
network: '3', |
||||
} |
||||
const rinkeby = { |
||||
network: '4', |
||||
} |
||||
const kovan = { |
||||
network: '42', |
||||
} |
||||
|
||||
it('returns coinbase url with amount and address for network 1', function () { |
||||
const coinbaseUrl = getBuyEthUrl(mainnet) |
||||
const coinbase = coinbaseUrl.match(/(https:\/\/buy.coinbase.com)/) |
||||
const amount = coinbaseUrl.match(/(amount)\D\d/) |
||||
const address = coinbaseUrl.match(/(address)(.*)(?=&)/) |
||||
|
||||
assert.equal(coinbase[0], 'https://buy.coinbase.com') |
||||
assert.equal(amount[0], 'amount=5') |
||||
assert.equal(address[0], 'address=0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc') |
||||
|
||||
}) |
||||
|
||||
it('returns metamask ropsten faucet for network 3', function () { |
||||
const ropstenUrl = getBuyEthUrl(ropsten) |
||||
assert.equal(ropstenUrl, 'https://faucet.metamask.io/') |
||||
}) |
||||
|
||||
it('returns rinkeby dapp for network 4', function () { |
||||
const rinkebyUrl = getBuyEthUrl(rinkeby) |
||||
assert.equal(rinkebyUrl, 'https://www.rinkeby.io/') |
||||
}) |
||||
|
||||
it('returns kovan github test faucet for network 42', function () { |
||||
const kovanUrl = getBuyEthUrl(kovan) |
||||
assert.equal(kovanUrl, 'https://github.com/kovan-testnet/faucet') |
||||
}) |
||||
|
||||
}) |
||||
|
@ -1,5 +1,5 @@ |
||||
const assert = require('assert') |
||||
const AddressBookController = require('../../app/scripts/controllers/address-book') |
||||
const AddressBookController = require('../../../../app/scripts/controllers/address-book') |
||||
|
||||
const stubPreferencesStore = { |
||||
getState: function () { |
@ -1,5 +1,5 @@ |
||||
const assert = require('assert') |
||||
const BlacklistController = require('../../app/scripts/controllers/blacklist') |
||||
const BlacklistController = require('../../../../app/scripts/controllers/blacklist') |
||||
|
||||
describe('blacklist controller', function () { |
||||
let blacklistController |
@ -0,0 +1,550 @@ |
||||
const assert = require('assert') |
||||
const sinon = require('sinon') |
||||
const clone = require('clone') |
||||
const nock = require('nock') |
||||
const createThoughStream = require('through2').obj |
||||
const MetaMaskController = require('../../../../app/scripts/metamask-controller') |
||||
const blacklistJSON = require('eth-phishing-detect/src/config') |
||||
const firstTimeState = require('../../../../app/scripts/first-time-state') |
||||
|
||||
const currentNetworkId = 42 |
||||
const DEFAULT_LABEL = 'Account 1' |
||||
const TEST_SEED = 'debris dizzy just program just float decrease vacant alarm reduce speak stadium' |
||||
const TEST_ADDRESS = '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc' |
||||
const TEST_SEED_ALT = 'setup olympic issue mobile velvet surge alcohol burger horse view reopen gentle' |
||||
const TEST_ADDRESS_ALT = '0xc42edfcc21ed14dda456aa0756c153f7985d8813' |
||||
|
||||
describe('MetaMaskController', function () { |
||||
let metamaskController |
||||
const sandbox = sinon.createSandbox() |
||||
const noop = () => {} |
||||
|
||||
beforeEach(function () { |
||||
|
||||
nock('https://api.infura.io') |
||||
.persist() |
||||
.get('/v2/blacklist') |
||||
.reply(200, blacklistJSON) |
||||
|
||||
nock('https://api.infura.io') |
||||
.get('/v1/ticker/ethusd') |
||||
.reply(200, '{"base": "ETH", "quote": "USD", "bid": 288.45, "ask": 288.46, "volume": 112888.17569277, "exchange": "bitfinex", "total_volume": 272175.00106721005, "num_exchanges": 8, "timestamp": 1506444677}') |
||||
|
||||
nock('https://api.infura.io') |
||||
.get('/v1/ticker/ethjpy') |
||||
.reply(200, '{"base": "ETH", "quote": "JPY", "bid": 32300.0, "ask": 32400.0, "volume": 247.4616071, "exchange": "kraken", "total_volume": 247.4616071, "num_exchanges": 1, "timestamp": 1506444676}') |
||||
|
||||
nock('https://api.infura.io') |
||||
.persist() |
||||
.get(/.*/) |
||||
.reply(200) |
||||
|
||||
metamaskController = new MetaMaskController({ |
||||
showUnapprovedTx: noop, |
||||
showUnconfirmedMessage: noop, |
||||
encryptor: { |
||||
encrypt: function (password, object) { |
||||
this.object = object |
||||
return Promise.resolve() |
||||
}, |
||||
decrypt: function () { |
||||
return Promise.resolve(this.object) |
||||
}, |
||||
}, |
||||
initState: clone(firstTimeState), |
||||
}) |
||||
sandbox.spy(metamaskController.keyringController, 'createNewVaultAndKeychain') |
||||
sandbox.spy(metamaskController.keyringController, 'createNewVaultAndRestore') |
||||
}) |
||||
|
||||
afterEach(function () { |
||||
nock.cleanAll() |
||||
sandbox.restore() |
||||
}) |
||||
|
||||
describe('#getGasPrice', function () { |
||||
|
||||
it('gives the 50th percentile lowest accepted gas price from recentBlocksController', async function () { |
||||
const realRecentBlocksController = metamaskController.recentBlocksController |
||||
metamaskController.recentBlocksController = { |
||||
store: { |
||||
getState: () => { |
||||
return { |
||||
recentBlocks: [ |
||||
{ gasPrices: [ '0x3b9aca00', '0x174876e800'] }, |
||||
{ gasPrices: [ '0x3b9aca00', '0x174876e800'] }, |
||||
{ gasPrices: [ '0x174876e800', '0x174876e800' ]}, |
||||
{ gasPrices: [ '0x174876e800', '0x174876e800' ]}, |
||||
], |
||||
} |
||||
}, |
||||
}, |
||||
} |
||||
|
||||
const gasPrice = metamaskController.getGasPrice() |
||||
assert.equal(gasPrice, '0x3b9aca00', 'accurately estimates 50th percentile accepted gas price') |
||||
|
||||
metamaskController.recentBlocksController = realRecentBlocksController |
||||
}) |
||||
}) |
||||
|
||||
describe('#createNewVaultAndKeychain', function () { |
||||
it('can only create new vault on keyringController once', async function () { |
||||
const selectStub = sandbox.stub(metamaskController, 'selectFirstIdentity') |
||||
|
||||
const password = 'a-fake-password' |
||||
|
||||
await metamaskController.createNewVaultAndKeychain(password) |
||||
await metamaskController.createNewVaultAndKeychain(password) |
||||
|
||||
assert(metamaskController.keyringController.createNewVaultAndKeychain.calledOnce) |
||||
|
||||
selectStub.reset() |
||||
}) |
||||
}) |
||||
|
||||
describe('#createNewVaultAndRestore', function () { |
||||
it('should be able to call newVaultAndRestore despite a mistake.', async function () { |
||||
const password = 'what-what-what' |
||||
await metamaskController.createNewVaultAndRestore(password, TEST_SEED.slice(0, -1)).catch((e) => null) |
||||
await metamaskController.createNewVaultAndRestore(password, TEST_SEED) |
||||
|
||||
assert(metamaskController.keyringController.createNewVaultAndRestore.calledTwice) |
||||
}) |
||||
|
||||
it('should clear previous identities after vault restoration', async () => { |
||||
await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED) |
||||
assert.deepEqual(metamaskController.getState().identities, { |
||||
[TEST_ADDRESS]: { address: TEST_ADDRESS, name: DEFAULT_LABEL }, |
||||
}) |
||||
|
||||
await metamaskController.preferencesController.setAccountLabel(TEST_ADDRESS, 'Account Foo') |
||||
assert.deepEqual(metamaskController.getState().identities, { |
||||
[TEST_ADDRESS]: { address: TEST_ADDRESS, name: 'Account Foo' }, |
||||
}) |
||||
|
||||
await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED_ALT) |
||||
assert.deepEqual(metamaskController.getState().identities, { |
||||
[TEST_ADDRESS_ALT]: { address: TEST_ADDRESS_ALT, name: DEFAULT_LABEL }, |
||||
}) |
||||
}) |
||||
}) |
||||
|
||||
describe('#getApi', function () { |
||||
let getApi, state |
||||
|
||||
beforeEach(function () { |
||||
getApi = metamaskController.getApi() |
||||
}) |
||||
|
||||
it('getState', function (done) { |
||||
getApi.getState((err, res) => { |
||||
if (err) { |
||||
done(err) |
||||
} else { |
||||
state = res |
||||
} |
||||
}) |
||||
assert.deepEqual(state, metamaskController.getState()) |
||||
done() |
||||
}) |
||||
|
||||
}) |
||||
|
||||
describe('preferencesController', function () { |
||||
|
||||
it('defaults useBlockie to false', function () { |
||||
assert.equal(metamaskController.preferencesController.store.getState().useBlockie, false) |
||||
}) |
||||
|
||||
it('setUseBlockie to true', function () { |
||||
metamaskController.setUseBlockie(true, noop) |
||||
assert.equal(metamaskController.preferencesController.store.getState().useBlockie, true) |
||||
}) |
||||
|
||||
}) |
||||
|
||||
describe('#selectFirstIdentity', function () { |
||||
let identities, address |
||||
|
||||
beforeEach(function () { |
||||
address = '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc' |
||||
identities = { |
||||
'0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc': { |
||||
'address': address, |
||||
'name': 'Account 1', |
||||
}, |
||||
'0xc42edfcc21ed14dda456aa0756c153f7985d8813': { |
||||
'address': '0xc42edfcc21ed14dda456aa0756c153f7985d8813', |
||||
'name': 'Account 2', |
||||
}, |
||||
} |
||||
metamaskController.preferencesController.store.updateState({ identities }) |
||||
metamaskController.selectFirstIdentity() |
||||
}) |
||||
|
||||
it('changes preferences controller select address', function () { |
||||
const preferenceControllerState = metamaskController.preferencesController.store.getState() |
||||
assert.equal(preferenceControllerState.selectedAddress, address) |
||||
}) |
||||
|
||||
it('changes metamask controller selected address', function () { |
||||
const metamaskState = metamaskController.getState() |
||||
assert.equal(metamaskState.selectedAddress, address) |
||||
}) |
||||
}) |
||||
|
||||
describe('#setCustomRpc', function () { |
||||
const customRPC = 'https://custom.rpc/' |
||||
let rpcTarget |
||||
|
||||
beforeEach(function () { |
||||
|
||||
nock('https://custom.rpc') |
||||
.post('/') |
||||
.reply(200) |
||||
|
||||
rpcTarget = metamaskController.setCustomRpc(customRPC) |
||||
}) |
||||
|
||||
afterEach(function () { |
||||
nock.cleanAll() |
||||
}) |
||||
|
||||
it('returns custom RPC that when called', async function () { |
||||
assert.equal(await rpcTarget, customRPC) |
||||
}) |
||||
|
||||
it('changes the network controller rpc', function () { |
||||
const networkControllerState = metamaskController.networkController.store.getState() |
||||
assert.equal(networkControllerState.provider.rpcTarget, customRPC) |
||||
}) |
||||
}) |
||||
|
||||
describe('#setCurrentCurrency', function () { |
||||
let defaultMetaMaskCurrency |
||||
|
||||
beforeEach(function () { |
||||
defaultMetaMaskCurrency = metamaskController.currencyController.getCurrentCurrency() |
||||
}) |
||||
|
||||
it('defaults to usd', function () { |
||||
assert.equal(defaultMetaMaskCurrency, 'usd') |
||||
}) |
||||
|
||||
it('sets currency to JPY', function () { |
||||
metamaskController.setCurrentCurrency('JPY', noop) |
||||
assert.equal(metamaskController.currencyController.getCurrentCurrency(), 'JPY') |
||||
}) |
||||
}) |
||||
|
||||
describe('#createShapeshifttx', function () { |
||||
let depositAddress, depositType, shapeShiftTxList |
||||
|
||||
beforeEach(function () { |
||||
nock('https://shapeshift.io') |
||||
.get('/txStat/3EevLFfB4H4XMWQwYCgjLie1qCAGpd2WBc') |
||||
.reply(200, '{"status": "no_deposits", "address": "3EevLFfB4H4XMWQwYCgjLie1qCAGpd2WBc"}') |
||||
|
||||
depositAddress = '3EevLFfB4H4XMWQwYCgjLie1qCAGpd2WBc' |
||||
depositType = 'ETH' |
||||
shapeShiftTxList = metamaskController.shapeshiftController.store.getState().shapeShiftTxList |
||||
}) |
||||
|
||||
it('creates a shapeshift tx', async function () { |
||||
metamaskController.createShapeShiftTx(depositAddress, depositType) |
||||
assert.equal(shapeShiftTxList[0].depositAddress, depositAddress) |
||||
}) |
||||
|
||||
}) |
||||
|
||||
describe('#addNewAccount', function () { |
||||
let addNewAccount |
||||
|
||||
beforeEach(function () { |
||||
addNewAccount = metamaskController.addNewAccount() |
||||
}) |
||||
|
||||
it('errors when an primary keyring is does not exist', async function () { |
||||
try { |
||||
await addNewAccount |
||||
assert.equal(1 === 0) |
||||
} catch (e) { |
||||
assert.equal(e.message, 'MetamaskController - No HD Key Tree found') |
||||
} |
||||
}) |
||||
}) |
||||
|
||||
describe('#verifyseedPhrase', function () { |
||||
let seedPhrase, getConfigSeed |
||||
|
||||
it('errors when no keying is provided', async function () { |
||||
try { |
||||
await metamaskController.verifySeedPhrase() |
||||
} catch (error) { |
||||
assert.equal(error.message, 'MetamaskController - No HD Key Tree found') |
||||
} |
||||
}) |
||||
|
||||
beforeEach(async function () { |
||||
await metamaskController.createNewVaultAndKeychain('password') |
||||
seedPhrase = await metamaskController.verifySeedPhrase() |
||||
}) |
||||
|
||||
it('#placeSeedWords should match the initially created vault seed', function () { |
||||
|
||||
metamaskController.placeSeedWords((err, result) => { |
||||
if (err) { |
||||
console.log(err) |
||||
} else { |
||||
getConfigSeed = metamaskController.configManager.getSeedWords() |
||||
assert.equal(result, seedPhrase) |
||||
assert.equal(result, getConfigSeed) |
||||
} |
||||
}) |
||||
assert.equal(getConfigSeed, undefined) |
||||
}) |
||||
|
||||
it('#addNewAccount', async function () { |
||||
await metamaskController.addNewAccount() |
||||
const getAccounts = await metamaskController.keyringController.getAccounts() |
||||
assert.equal(getAccounts.length, 2) |
||||
}) |
||||
}) |
||||
|
||||
describe('#resetAccount', function () { |
||||
|
||||
beforeEach(function () { |
||||
const selectedAddressStub = sinon.stub(metamaskController.preferencesController, 'getSelectedAddress') |
||||
const getNetworkstub = sinon.stub(metamaskController.txController.txStateManager, 'getNetwork') |
||||
|
||||
selectedAddressStub.returns('0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc') |
||||
getNetworkstub.returns(42) |
||||
|
||||
metamaskController.txController.txStateManager._saveTxList([ |
||||
{ id: 1, status: 'unapproved', metamaskNetworkId: currentNetworkId, txParams: {from: '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc'} }, |
||||
{ id: 2, status: 'rejected', metamaskNetworkId: 32, txParams: {} }, |
||||
{ id: 3, status: 'submitted', metamaskNetworkId: currentNetworkId, txParams: {from: '0xB09d8505E1F4EF1CeA089D47094f5DD3464083d4'} }, |
||||
]) |
||||
}) |
||||
|
||||
it('wipes transactions from only the correct network id and with the selected address', async function () { |
||||
await metamaskController.resetAccount() |
||||
assert.equal(metamaskController.txController.txStateManager.getTx(1), undefined) |
||||
}) |
||||
}) |
||||
|
||||
describe('#clearSeedWordCache', function () { |
||||
|
||||
it('should have set seed words', function () { |
||||
metamaskController.configManager.setSeedWords('test words') |
||||
const getConfigSeed = metamaskController.configManager.getSeedWords() |
||||
assert.equal(getConfigSeed, 'test words') |
||||
}) |
||||
|
||||
it('should clear config seed phrase', function () { |
||||
metamaskController.configManager.setSeedWords('test words') |
||||
metamaskController.clearSeedWordCache((err, result) => { |
||||
if (err) console.log(err) |
||||
}) |
||||
const getConfigSeed = metamaskController.configManager.getSeedWords() |
||||
assert.equal(getConfigSeed, null) |
||||
}) |
||||
|
||||
}) |
||||
|
||||
describe('#setCurrentLocale', function () { |
||||
|
||||
it('checks the default currentLocale', function () { |
||||
const preferenceCurrentLocale = metamaskController.preferencesController.store.getState().currentLocale |
||||
assert.equal(preferenceCurrentLocale, undefined) |
||||
}) |
||||
|
||||
it('sets current locale in preferences controller', function () { |
||||
metamaskController.setCurrentLocale('ja', noop) |
||||
const preferenceCurrentLocale = metamaskController.preferencesController.store.getState().currentLocale |
||||
assert.equal(preferenceCurrentLocale, 'ja') |
||||
}) |
||||
|
||||
}) |
||||
|
||||
describe('#newUnsignedMessage', function () { |
||||
|
||||
let msgParams, metamaskMsgs, messages, msgId |
||||
|
||||
const address = '0xc42edfcc21ed14dda456aa0756c153f7985d8813' |
||||
const data = '0x43727970746f6b697474696573' |
||||
|
||||
beforeEach(async function () { |
||||
|
||||
await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED_ALT) |
||||
|
||||
msgParams = { |
||||
'from': address, |
||||
'data': data, |
||||
} |
||||
|
||||
metamaskController.newUnsignedMessage(msgParams, noop) |
||||
metamaskMsgs = metamaskController.messageManager.getUnapprovedMsgs() |
||||
messages = metamaskController.messageManager.messages |
||||
msgId = Object.keys(metamaskMsgs)[0] |
||||
messages[0].msgParams.metamaskId = parseInt(msgId) |
||||
}) |
||||
|
||||
it('persists address from msg params', function () { |
||||
assert.equal(metamaskMsgs[msgId].msgParams.from, address) |
||||
}) |
||||
|
||||
it('persists data from msg params', function () { |
||||
assert.equal(metamaskMsgs[msgId].msgParams.data, data) |
||||
}) |
||||
|
||||
it('sets the status to unapproved', function () { |
||||
assert.equal(metamaskMsgs[msgId].status, 'unapproved') |
||||
}) |
||||
|
||||
it('sets the type to eth_sign', function () { |
||||
assert.equal(metamaskMsgs[msgId].type, 'eth_sign') |
||||
}) |
||||
|
||||
it('rejects the message', function () { |
||||
const msgIdInt = parseInt(msgId) |
||||
metamaskController.cancelMessage(msgIdInt, noop) |
||||
assert.equal(messages[0].status, 'rejected') |
||||
}) |
||||
|
||||
it('errors when signing a message', async function () { |
||||
try { |
||||
await metamaskController.signMessage(messages[0].msgParams) |
||||
} catch (error) { |
||||
assert.equal(error.message, 'message length is invalid') |
||||
} |
||||
}) |
||||
}) |
||||
|
||||
describe('#newUnsignedPersonalMessage', function () { |
||||
|
||||
it('errors with no from in msgParams', function () { |
||||
const msgParams = { |
||||
'data': data, |
||||
} |
||||
metamaskController.newUnsignedPersonalMessage(msgParams, function (error) { |
||||
assert.equal(error.message, 'MetaMask Message Signature: from field is required.') |
||||
}) |
||||
}) |
||||
|
||||
let msgParams, metamaskPersonalMsgs, personalMessages, msgId |
||||
|
||||
const address = '0xc42edfcc21ed14dda456aa0756c153f7985d8813' |
||||
const data = '0x43727970746f6b697474696573' |
||||
|
||||
beforeEach(async function () { |
||||
|
||||
await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED_ALT) |
||||
|
||||
msgParams = { |
||||
'from': address, |
||||
'data': data, |
||||
} |
||||
|
||||
metamaskController.newUnsignedPersonalMessage(msgParams, noop) |
||||
metamaskPersonalMsgs = metamaskController.personalMessageManager.getUnapprovedMsgs() |
||||
personalMessages = metamaskController.personalMessageManager.messages |
||||
msgId = Object.keys(metamaskPersonalMsgs)[0] |
||||
personalMessages[0].msgParams.metamaskId = parseInt(msgId) |
||||
}) |
||||
|
||||
it('persists address from msg params', function () { |
||||
assert.equal(metamaskPersonalMsgs[msgId].msgParams.from, address) |
||||
}) |
||||
|
||||
it('persists data from msg params', function () { |
||||
assert.equal(metamaskPersonalMsgs[msgId].msgParams.data, data) |
||||
}) |
||||
|
||||
it('sets the status to unapproved', function () { |
||||
assert.equal(metamaskPersonalMsgs[msgId].status, 'unapproved') |
||||
}) |
||||
|
||||
it('sets the type to personal_sign', function () { |
||||
assert.equal(metamaskPersonalMsgs[msgId].type, 'personal_sign') |
||||
}) |
||||
|
||||
it('rejects the message', function () { |
||||
const msgIdInt = parseInt(msgId) |
||||
metamaskController.cancelPersonalMessage(msgIdInt, noop) |
||||
assert.equal(personalMessages[0].status, 'rejected') |
||||
}) |
||||
|
||||
it('errors when signing a message', async function () { |
||||
await metamaskController.signPersonalMessage(personalMessages[0].msgParams) |
||||
assert.equal(metamaskPersonalMsgs[msgId].status, 'signed') |
||||
assert.equal(metamaskPersonalMsgs[msgId].rawSig, '0x6a1b65e2b8ed53cf398a769fad24738f9fbe29841fe6854e226953542c4b6a173473cb152b6b1ae5f06d601d45dd699a129b0a8ca84e78b423031db5baa734741b')
|
||||
}) |
||||
}) |
||||
|
||||
describe('#setupUntrustedCommunication', function () { |
||||
let streamTest |
||||
|
||||
const phishingUrl = 'decentral.market' |
||||
|
||||
afterEach(function () { |
||||
streamTest.end() |
||||
}) |
||||
|
||||
it('sets up phishing stream for untrusted communication ', async function () { |
||||
await metamaskController.blacklistController.updatePhishingList() |
||||
|
||||
streamTest = createThoughStream((chunk, enc, cb) => { |
||||
assert.equal(chunk.name, 'phishing') |
||||
assert.equal(chunk.data.hostname, phishingUrl) |
||||
cb() |
||||
}) |
||||
// console.log(streamTest)
|
||||
metamaskController.setupUntrustedCommunication(streamTest, phishingUrl) |
||||
}) |
||||
}) |
||||
|
||||
describe('#setupTrustedCommunication', function () { |
||||
let streamTest |
||||
|
||||
afterEach(function () { |
||||
streamTest.end() |
||||
}) |
||||
|
||||
it('sets up controller dnode api for trusted communication', function (done) { |
||||
streamTest = createThoughStream((chunk, enc, cb) => {
|
||||
assert.equal(chunk.name, 'controller') |
||||
cb() |
||||
done() |
||||
}) |
||||
|
||||
metamaskController.setupTrustedCommunication(streamTest, 'mycrypto.com') |
||||
}) |
||||
}) |
||||
|
||||
describe('#markAccountsFound', function () { |
||||
it('adds lost accounts to config manager data', function () { |
||||
metamaskController.markAccountsFound(noop) |
||||
const configManagerData = metamaskController.configManager.getData() |
||||
assert.deepEqual(configManagerData.lostAccounts, []) |
||||
}) |
||||
}) |
||||
|
||||
describe('#markPasswordForgotten', function () { |
||||
it('adds and sets forgottenPassword to config data to true', function () { |
||||
metamaskController.markPasswordForgotten(noop) |
||||
const configManagerData = metamaskController.configManager.getData() |
||||
assert.equal(configManagerData.forgottenPassword, true) |
||||
}) |
||||
}) |
||||
|
||||
describe('#unMarkPasswordForgotten', function () { |
||||
it('adds and sets forgottenPassword to config data to false', function () { |
||||
metamaskController.unMarkPasswordForgotten(noop) |
||||
const configManagerData = metamaskController.configManager.getData() |
||||
assert.equal(configManagerData.forgottenPassword, false) |
||||
}) |
||||
}) |
||||
|
||||
}) |
@ -1,11 +1,11 @@ |
||||
const assert = require('assert') |
||||
const nock = require('nock') |
||||
const NetworkController = require('../../app/scripts/controllers/network') |
||||
const NetworkController = require('../../../../app/scripts/controllers/network') |
||||
const { |
||||
getNetworkDisplayName, |
||||
} = require('../../app/scripts/controllers/network/util') |
||||
} = require('../../../../app/scripts/controllers/network/util') |
||||
|
||||
const { createTestProviderTools } = require('../stub/provider') |
||||
const { createTestProviderTools } = require('../../../stub/provider') |
||||
const providerResultStub = {} |
||||
|
||||
describe('# Network Controller', function () { |
@ -1,6 +1,6 @@ |
||||
const assert = require('assert') |
||||
const configManagerGen = require('../lib/mock-config-manager') |
||||
const NoticeController = require('../../app/scripts/notice-controller') |
||||
const configManagerGen = require('../../../lib/mock-config-manager') |
||||
const NoticeController = require('../../../../app/scripts/notice-controller') |
||||
|
||||
describe('notice-controller', function () { |
||||
var noticeController |
@ -1,5 +1,5 @@ |
||||
const assert = require('assert') |
||||
const PreferencesController = require('../../app/scripts/controllers/preferences') |
||||
const PreferencesController = require('../../../../app/scripts/controllers/preferences') |
||||
|
||||
describe('preferences controller', function () { |
||||
let preferencesController |
@ -1,6 +1,6 @@ |
||||
const assert = require('assert') |
||||
const sinon = require('sinon') |
||||
const TokenRatesController = require('../../app/scripts/controllers/token-rates') |
||||
const TokenRatesController = require('../../../../app/scripts/controllers/token-rates') |
||||
const ObservableStore = require('obs-store') |
||||
|
||||
describe('TokenRatesController', () => { |
@ -1,6 +1,6 @@ |
||||
const assert = require('assert') |
||||
const NonceTracker = require('../../app/scripts/controllers/transactions/nonce-tracker') |
||||
const MockTxGen = require('../lib/mock-tx-gen') |
||||
const NonceTracker = require('../../../../../app/scripts/controllers/transactions/nonce-tracker') |
||||
const MockTxGen = require('../../../../lib/mock-tx-gen') |
||||
let providerResultStub = {} |
||||
|
||||
describe('Nonce Tracker', function () { |
@ -1,5 +1,5 @@ |
||||
const assert = require('assert') |
||||
const txHelper = require('../../ui/lib/tx-helper') |
||||
const txHelper = require('../../../../../ui/lib/tx-helper') |
||||
|
||||
describe('txHelper', function () { |
||||
it('always shows the oldest tx first', function () { |
@ -1,6 +1,6 @@ |
||||
const assert = require('assert') |
||||
const txStateHistoryHelper = require('../../app/scripts/controllers/transactions/lib/tx-state-history-helper') |
||||
const testVault = require('../data/v17-long-history.json') |
||||
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 () { |
||||
|
@ -1,8 +1,8 @@ |
||||
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 TxStateManager = require('../../../../../app/scripts/controllers/transactions/tx-state-manager') |
||||
const txStateHistoryHelper = require('../../../../../app/scripts/controllers/transactions/lib/tx-state-history-helper') |
||||
const noop = () => true |
||||
|
||||
describe('TransactionStateManager', function () { |
@ -1,5 +1,5 @@ |
||||
const assert = require('assert') |
||||
const txUtils = require('../../app/scripts/controllers/transactions/lib/util') |
||||
const txUtils = require('../../../../../app/scripts/controllers/transactions/lib/util') |
||||
|
||||
|
||||
describe('txUtils', function () { |
@ -1,6 +1,6 @@ |
||||
const assert = require('assert') |
||||
|
||||
const EdgeEncryptor = require('../../app/scripts/edge-encryptor') |
||||
const EdgeEncryptor = require('../../../app/scripts/edge-encryptor') |
||||
|
||||
var password = 'passw0rd1' |
||||
var data = 'some random data' |
@ -1,5 +1,5 @@ |
||||
const assert = require('assert') |
||||
const MessageManager = require('../../app/scripts/lib/message-manager') |
||||
const MessageManager = require('../../../app/scripts/lib/message-manager') |
||||
|
||||
describe('Message Manager', function () { |
||||
let messageManager |
@ -1,5 +1,5 @@ |
||||
const assert = require('assert') |
||||
const nodeify = require('../../app/scripts/lib/nodeify') |
||||
const nodeify = require('../../../app/scripts/lib/nodeify') |
||||
|
||||
describe('nodeify', function () { |
||||
var obj = { |
@ -1,6 +1,6 @@ |
||||
const assert = require('assert') |
||||
const PendingBalanceCalculator = require('../../app/scripts/lib/pending-balance-calculator') |
||||
const MockTxGen = require('../lib/mock-tx-gen') |
||||
const PendingBalanceCalculator = require('../../../app/scripts/lib/pending-balance-calculator') |
||||
const MockTxGen = require('../../lib/mock-tx-gen') |
||||
const BN = require('ethereumjs-util').BN |
||||
let providerResultStub = {} |
||||
|
@ -1,6 +1,6 @@ |
||||
const assert = require('assert') |
||||
|
||||
const PersonalMessageManager = require('../../app/scripts/lib/personal-message-manager') |
||||
const PersonalMessageManager = require('../../../app/scripts/lib/personal-message-manager') |
||||
|
||||
describe('Personal Message Manager', function () { |
||||
let messageManager |
@ -1,9 +1,9 @@ |
||||
const assert = require('assert') |
||||
const clone = require('clone') |
||||
const KeyringController = require('eth-keyring-controller') |
||||
const firstTimeState = require('../../app/scripts/first-time-state') |
||||
const seedPhraseVerifier = require('../../app/scripts/lib/seed-phrase-verifier') |
||||
const mockEncryptor = require('../lib/mock-encryptor') |
||||
const firstTimeState = require('../../../app/scripts/first-time-state') |
||||
const seedPhraseVerifier = require('../../../app/scripts/lib/seed-phrase-verifier') |
||||
const mockEncryptor = require('../../lib/mock-encryptor') |
||||
|
||||
describe('SeedPhraseVerifier', function () { |
||||
|
@ -1,5 +1,5 @@ |
||||
const assert = require('assert') |
||||
const { sufficientBalance } = require('../../app/scripts/lib/util') |
||||
const { sufficientBalance } = require('../../../app/scripts/lib/util') |
||||
|
||||
|
||||
describe('SufficientBalance', function () { |
@ -1,120 +0,0 @@ |
||||
const assert = require('assert') |
||||
const sinon = require('sinon') |
||||
const clone = require('clone') |
||||
const nock = require('nock') |
||||
const MetaMaskController = require('../../app/scripts/metamask-controller') |
||||
const blacklistJSON = require('../stub/blacklist') |
||||
const firstTimeState = require('../../app/scripts/first-time-state') |
||||
|
||||
const DEFAULT_LABEL = 'Account 1' |
||||
const TEST_SEED = 'debris dizzy just program just float decrease vacant alarm reduce speak stadium' |
||||
const TEST_ADDRESS = '0x0dcd5d886577d5081b0c52e242ef29e70be3e7bc' |
||||
const TEST_SEED_ALT = 'setup olympic issue mobile velvet surge alcohol burger horse view reopen gentle' |
||||
const TEST_ADDRESS_ALT = '0xc42edfcc21ed14dda456aa0756c153f7985d8813' |
||||
|
||||
describe('MetaMaskController', function () { |
||||
let metamaskController |
||||
const sandbox = sinon.sandbox.create() |
||||
const noop = () => { } |
||||
|
||||
beforeEach(function () { |
||||
|
||||
nock('https://api.infura.io') |
||||
.persist() |
||||
.get('/v2/blacklist') |
||||
.reply(200, blacklistJSON) |
||||
|
||||
nock('https://api.infura.io') |
||||
.persist() |
||||
.get(/.*/) |
||||
.reply(200) |
||||
|
||||
metamaskController = new MetaMaskController({ |
||||
showUnapprovedTx: noop, |
||||
encryptor: { |
||||
encrypt: function (password, object) { |
||||
this.object = object |
||||
return Promise.resolve() |
||||
}, |
||||
decrypt: function () { |
||||
return Promise.resolve(this.object) |
||||
}, |
||||
}, |
||||
initState: clone(firstTimeState), |
||||
}) |
||||
sandbox.spy(metamaskController.keyringController, 'createNewVaultAndKeychain') |
||||
sandbox.spy(metamaskController.keyringController, 'createNewVaultAndRestore') |
||||
}) |
||||
|
||||
afterEach(function () { |
||||
nock.cleanAll() |
||||
sandbox.restore() |
||||
}) |
||||
|
||||
describe('#getGasPrice', function () { |
||||
it('gives the 50th percentile lowest accepted gas price from recentBlocksController', async function () { |
||||
const realRecentBlocksController = metamaskController.recentBlocksController |
||||
metamaskController.recentBlocksController = { |
||||
store: { |
||||
getState: () => { |
||||
return { |
||||
recentBlocks: [ |
||||
{ gasPrices: [ '0x3b9aca00', '0x174876e800'] }, |
||||
{ gasPrices: [ '0x3b9aca00', '0x174876e800'] }, |
||||
{ gasPrices: [ '0x174876e800', '0x174876e800' ]}, |
||||
{ gasPrices: [ '0x174876e800', '0x174876e800' ]}, |
||||
], |
||||
} |
||||
}, |
||||
}, |
||||
} |
||||
|
||||
const gasPrice = metamaskController.getGasPrice() |
||||
assert.equal(gasPrice, '0x3b9aca00', 'accurately estimates 50th percentile accepted gas price') |
||||
|
||||
metamaskController.recentBlocksController = realRecentBlocksController |
||||
}) |
||||
}) |
||||
|
||||
describe('#createNewVaultAndKeychain', function () { |
||||
it('can only create new vault on keyringController once', async function () { |
||||
const selectStub = sandbox.stub(metamaskController, 'selectFirstIdentity') |
||||
|
||||
const password = 'a-fake-password' |
||||
|
||||
await metamaskController.createNewVaultAndKeychain(password) |
||||
await metamaskController.createNewVaultAndKeychain(password) |
||||
|
||||
assert(metamaskController.keyringController.createNewVaultAndKeychain.calledOnce) |
||||
|
||||
selectStub.reset() |
||||
}) |
||||
}) |
||||
|
||||
describe('#createNewVaultAndRestore', function () { |
||||
it('should be able to call newVaultAndRestore despite a mistake.', async function () { |
||||
const password = 'what-what-what' |
||||
await metamaskController.createNewVaultAndRestore(password, TEST_SEED.slice(0, -1)).catch((e) => null) |
||||
await metamaskController.createNewVaultAndRestore(password, TEST_SEED) |
||||
|
||||
assert(metamaskController.keyringController.createNewVaultAndRestore.calledTwice) |
||||
}) |
||||
|
||||
it('should clear previous identities after vault restoration', async () => { |
||||
await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED) |
||||
assert.deepEqual(metamaskController.getState().identities, { |
||||
[TEST_ADDRESS]: { address: TEST_ADDRESS, name: DEFAULT_LABEL }, |
||||
}) |
||||
|
||||
await metamaskController.preferencesController.setAccountLabel(TEST_ADDRESS, 'Account Foo') |
||||
assert.deepEqual(metamaskController.getState().identities, { |
||||
[TEST_ADDRESS]: { address: TEST_ADDRESS, name: 'Account Foo' }, |
||||
}) |
||||
|
||||
await metamaskController.createNewVaultAndRestore('foobar1337', TEST_SEED_ALT) |
||||
assert.deepEqual(metamaskController.getState().identities, { |
||||
[TEST_ADDRESS_ALT]: { address: TEST_ADDRESS_ALT, name: DEFAULT_LABEL }, |
||||
}) |
||||
}) |
||||
}) |
||||
}) |
@ -1,22 +1,22 @@ |
||||
const assert = require('assert') |
||||
const path = require('path') |
||||
|
||||
const wallet1 = require(path.join('..', 'lib', 'migrations', '001.json')) |
||||
const vault4 = require(path.join('..', 'lib', 'migrations', '004.json')) |
||||
const wallet1 = require(path.join('..', '..', 'lib', 'migrations', '001.json')) |
||||
const vault4 = require(path.join('..', '..', 'lib', 'migrations', '004.json')) |
||||
let vault5, vault6, vault7, vault8, vault9 // vault10, vault11
|
||||
|
||||
const migration2 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '002')) |
||||
const migration3 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '003')) |
||||
const migration4 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '004')) |
||||
const migration5 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '005')) |
||||
const migration6 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '006')) |
||||
const migration7 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '007')) |
||||
const migration8 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '008')) |
||||
const migration9 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '009')) |
||||
const migration10 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '010')) |
||||
const migration11 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '011')) |
||||
const migration12 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '012')) |
||||
const migration13 = require(path.join('..', '..', 'app', 'scripts', 'migrations', '013')) |
||||
const migration2 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '002')) |
||||
const migration3 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '003')) |
||||
const migration4 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '004')) |
||||
const migration5 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '005')) |
||||
const migration6 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '006')) |
||||
const migration7 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '007')) |
||||
const migration8 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '008')) |
||||
const migration9 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '009')) |
||||
const migration10 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '010')) |
||||
const migration11 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '011')) |
||||
const migration12 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '012')) |
||||
const migration13 = require(path.join('..', '..', '..', 'app', 'scripts', 'migrations', '013')) |
||||
|
||||
|
||||
const oldTestRpc = 'https://rawtestrpc.metamask.io/' |
Loading…
Reference in new issue