1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-11-30 16:18:07 +01:00
metamask-extension/test/unit/metamask-controller-test.js

130 lines
4.5 KiB
JavaScript
Raw Normal View History

const assert = require('assert')
const sinon = require('sinon')
const clone = require('clone')
const MetaMaskController = require('../../app/scripts/metamask-controller')
const firstTimeState = require('../../app/scripts/first-time-state')
2018-01-06 06:24:10 +01:00
const BN = require('ethereumjs-util').BN
const GWEI_BN = new BN('1000000000')
2017-05-04 23:35:10 +02:00
describe('MetaMaskController', function () {
const noop = () => {}
2017-05-04 23:35:10 +02:00
const metamaskController = new MetaMaskController({
showUnconfirmedMessage: noop,
unlockAccountMessage: noop,
2016-12-16 19:33:36 +01:00
showUnapprovedTx: noop,
2017-09-19 19:53:56 +02:00
platform: {},
2017-11-20 23:44:12 +01:00
encryptor: {
encrypt: function(password, object) {
this.object = object
return Promise.resolve()
},
decrypt: function () {
return Promise.resolve(this.object)
}
},
2017-01-12 04:26:56 +01:00
// initial state
initState: clone(firstTimeState),
})
2017-05-04 23:35:10 +02:00
beforeEach(function () {
// sinon allows stubbing methods that are easily verified
this.sinon = sinon.sandbox.create()
})
2017-05-04 23:35:10 +02:00
afterEach(function () {
// sinon requires cleanup otherwise it will overwrite context
this.sinon.restore()
})
2017-05-04 23:35:10 +02:00
describe('Metamask Controller', function () {
assert(metamaskController)
2017-11-20 23:44:12 +01:00
beforeEach(function () {
sinon.spy(metamaskController.keyringController, 'createNewVaultAndKeychain')
2018-01-04 01:44:14 +01:00
sinon.spy(metamaskController.keyringController, 'createNewVaultAndRestore')
2017-11-20 23:44:12 +01:00
})
afterEach(function () {
metamaskController.keyringController.createNewVaultAndKeychain.restore()
2018-01-04 01:44:14 +01:00
metamaskController.keyringController.createNewVaultAndRestore.restore()
2017-11-20 23:44:12 +01:00
})
2018-01-06 06:24:10 +01:00
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: [
2018-01-06 07:08:03 +01:00
{ gasPrices: [ '0x3b9aca00', '0x174876e800'] },
{ gasPrices: [ '0x3b9aca00', '0x174876e800'] },
{ gasPrices: [ '0x174876e800', '0x174876e800' ]},
{ gasPrices: [ '0x174876e800', '0x174876e800' ]},
2018-01-06 06:24:10 +01:00
]
}
}
}
}
const gasPrice = metamaskController.getGasPrice()
2018-01-06 07:08:03 +01:00
assert.equal(gasPrice, '0x3b9aca00', 'accurately estimates 50th percentile accepted gas price')
2018-01-06 06:24:10 +01:00
metamaskController.recentBlocksController = realRecentBlocksController
})
2018-01-09 00:16:08 +01:00
it('gives the 1 gwei price if no blocks have been seen.', async function () {
const realRecentBlocksController = metamaskController.recentBlocksController
metamaskController.recentBlocksController = {
store: {
getState: () => {
return {
recentBlocks: []
}
}
}
}
const gasPrice = metamaskController.getGasPrice()
assert.equal(gasPrice, '0x' + GWEI_BN.toString(16), 'defaults to 1 gwei')
metamaskController.recentBlocksController = realRecentBlocksController
})
2018-01-06 06:24:10 +01:00
})
describe('#createNewVaultAndKeychain', function () {
it('can only create new vault on keyringController once', async function () {
const selectStub = sinon.stub(metamaskController, 'selectFirstIdentity')
2018-01-04 01:44:14 +01:00
const password = 'a-fake-password'
const first = await metamaskController.createNewVaultAndKeychain(password)
const second = await metamaskController.createNewVaultAndKeychain(password)
2017-11-20 23:44:12 +01:00
assert(metamaskController.keyringController.createNewVaultAndKeychain.calledOnce)
selectStub.reset()
})
})
2018-01-04 01:44:14 +01:00
describe('#createNewVaultAndRestore', function () {
it('should be able to call newVaultAndRestore despite a mistake.', async function () {
// const selectStub = sinon.stub(metamaskController, 'selectFirstIdentity')
const password = 'what-what-what'
const wrongSeed = 'debris dizzy just program just float decrease vacant alarm reduce speak stadiu'
const rightSeed = 'debris dizzy just program just float decrease vacant alarm reduce speak stadium'
const first = await metamaskController.createNewVaultAndRestore(password, wrongSeed)
.catch((e) => {
return
})
const second = await metamaskController.createNewVaultAndRestore(password, rightSeed)
assert(metamaskController.keyringController.createNewVaultAndRestore.calledTwice)
})
})
2017-05-04 23:35:10 +02:00
})
})