Mostly got async keyringController tests passing

feature/default_network_editable
Dan Finlay 8 years ago
parent c77d355e98
commit 600f5c31db
  1. 16
      app/scripts/keyring-controller.js
  2. 42
      test/unit/keyring-controller-test.js
  3. 67
      test/unit/keyrings/hd-test.js
  4. 37
      test/unit/keyrings/simple-test.js

@ -99,16 +99,17 @@ module.exports = class KeyringController extends EventEmitter {
mnemonic: seed, mnemonic: seed,
numberOfAccounts: 1, numberOfAccounts: 1,
}, (err) => { }, (err) => {
if (err) return cb(err)
const firstKeyring = this.keyrings[0] const firstKeyring = this.keyrings[0]
const accounts = firstKeyring.getAccounts() const accounts = firstKeyring.getAccounts()
const firstAccount = accounts[0] const firstAccount = accounts[0]
const hexAccount = normalize(firstAccount) const hexAccount = normalize(firstAccount)
this.configManager.setSelectedAccount(hexAccount) this.configManager.setSelectedAccount(hexAccount)
this.setupAccounts(accounts) this.setupAccounts(accounts)
this.persistAllKeyrings()
this.emit('update') .then(() => {
cb() this.emit('update')
cb(err)
})
}) })
}) })
} }
@ -152,6 +153,7 @@ module.exports = class KeyringController extends EventEmitter {
createFirstKeyTree (password, cb) { createFirstKeyTree (password, cb) {
this.clearKeyrings() this.clearKeyrings()
this.addNewKeyring('HD Key Tree', {numberOfAccounts: 1}, (err) => { this.addNewKeyring('HD Key Tree', {numberOfAccounts: 1}, (err) => {
if (err) return cb(err)
const accounts = this.keyrings[0].getAccounts() const accounts = this.keyrings[0].getAccounts()
const firstAccount = accounts[0] const firstAccount = accounts[0]
const hexAccount = normalize(firstAccount) const hexAccount = normalize(firstAccount)
@ -162,7 +164,7 @@ module.exports = class KeyringController extends EventEmitter {
this.setupAccounts(accounts) this.setupAccounts(accounts)
this.persistAllKeyrings() this.persistAllKeyrings()
.then(() => { .then(() => {
cb(err) cb()
}) })
.catch((reason) => { .catch((reason) => {
cb(reason) cb(reason)
@ -335,10 +337,10 @@ module.exports = class KeyringController extends EventEmitter {
getAccounts () { getAccounts () {
const keyrings = this.keyrings || [] const keyrings = this.keyrings || []
return keyrings.map(kr => kr.getAccounts()) return Promise.all(keyrings.map(kr => kr.getAccounts())
.reduce((res, arr) => { .reduce((res, arr) => {
return res.concat(arr) return res.concat(arr)
}, []) }, []))
} }
setSelectedAccount (address, cb) { setSelectedAccount (address, cb) {

@ -61,7 +61,7 @@ describe('KeyringController', function() {
describe('#restoreKeyring', function() { describe('#restoreKeyring', function() {
it(`should pass a keyring's serialized data back to the correct type.`, function() { it(`should pass a keyring's serialized data back to the correct type.`, function(done) {
const mockSerialized = { const mockSerialized = {
type: 'HD Key Tree', type: 'HD Key Tree',
data: { data: {
@ -74,12 +74,14 @@ describe('KeyringController', function() {
mock.expects('getBalanceAndNickname') mock.expects('getBalanceAndNickname')
.exactly(1) .exactly(1)
var keyring = keyringController.restoreKeyring(mockSerialized) keyringController.restoreKeyring(mockSerialized)
assert.equal(keyring.wallets.length, 1, 'one wallet restored') .then((keyring) => {
assert.equal(keyring.getAccounts()[0], addresses[0]) assert.equal(keyring.wallets.length, 1, 'one wallet restored')
mock.verify() assert.equal(keyring.getAccounts()[0], addresses[0])
mock.verify()
done()
})
}) })
}) })
describe('#migrateOldVaultIfAny', function() { describe('#migrateOldVaultIfAny', function() {
@ -92,6 +94,7 @@ describe('KeyringController', function() {
}) })
.catch((reason) => { .catch((reason) => {
assert.ifError(reason) assert.ifError(reason)
done()
}) })
}) })
}) })
@ -110,15 +113,17 @@ describe('KeyringController', function() {
}) })
describe('#saveAccountLabel', function() { describe('#saveAccountLabel', function() {
it ('sets the nickname', function() { it ('sets the nickname', function(done) {
const account = addresses[0] const account = addresses[0]
var nick = 'Test nickname' var nick = 'Test nickname'
keyringController.identities[ethUtil.addHexPrefix(account)] = {} keyringController.identities[ethUtil.addHexPrefix(account)] = {}
const label = keyringController.saveAccountLabel(account, nick) keyringController.saveAccountLabel(account, nick, (err, label) => {
assert.equal(label, nick) assert.ifError(err)
assert.equal(label, nick)
const persisted = keyringController.configManager.nicknameForWallet(account) const persisted = keyringController.configManager.nicknameForWallet(account)
assert.equal(persisted, nick) assert.equal(persisted, nick)
done()
})
}) })
this.timeout(10000) this.timeout(10000)
@ -126,9 +131,7 @@ describe('KeyringController', function() {
const account = addresses[0] const account = addresses[0]
var nick = 'Test nickname' var nick = 'Test nickname'
keyringController.configManager.setNicknameForWallet(account, nick) keyringController.configManager.setNicknameForWallet(account, nick)
console.log('calling to restore')
keyringController.createNewVaultAndRestore(password, seedWords, (err, state) => { keyringController.createNewVaultAndRestore(password, seedWords, (err, state) => {
console.dir({err})
assert.ifError(err) assert.ifError(err)
const identity = keyringController.identities['0x' + account] const identity = keyringController.identities['0x' + account]
@ -143,12 +146,15 @@ describe('KeyringController', function() {
describe('#getAccounts', function() { describe('#getAccounts', function() {
it('returns the result of getAccounts for each keyring', function() { it('returns the result of getAccounts for each keyring', function() {
keyringController.keyrings = [ keyringController.keyrings = [
{ getAccounts() { return [1,2,3] } }, { getAccounts() { return Promise.resolve([1,2,3]) } },
{ getAccounts() { return [4,5,6] } }, { getAccounts() { return Promise.resolve([4,5,6]) } },
] ]
const result = keyringController.getAccounts() keyringController.getAccounts()
assert.deepEqual(result, [1,2,3,4,5,6]) .then((result) => {
assert.deepEqual(result, [1,2,3,4,5,6])
done()
})
}) })
}) })

@ -16,15 +16,18 @@ describe('hd-keyring', function() {
keyring = new HdKeyring() keyring = new HdKeyring()
}) })
describe('constructor', function() { describe('constructor', function(done) {
keyring = new HdKeyring({ keyring = new HdKeyring({
mnemonic: sampleMnemonic, mnemonic: sampleMnemonic,
numberOfAccounts: 2, numberOfAccounts: 2,
}) })
const accounts = keyring.getAccounts() const accounts = keyring.getAccounts()
assert.equal(accounts[0], firstAcct) .then((accounts) => {
assert.equal(accounts[1], secondAcct) assert.equal(accounts[0], firstAcct)
assert.equal(accounts[1], secondAcct)
done()
})
}) })
describe('Keyring.type', function() { describe('Keyring.type', function() {
@ -44,49 +47,62 @@ describe('hd-keyring', function() {
describe('#serialize empty wallets.', function() { describe('#serialize empty wallets.', function() {
it('serializes a new mnemonic', function() { it('serializes a new mnemonic', function() {
const output = keyring.serialize() keyring.serialize()
assert.equal(output.numberOfAccounts, 0) .then((output) => {
assert.equal(output.mnemonic, null) assert.equal(output.numberOfAccounts, 0)
assert.equal(output.mnemonic, null)
})
}) })
}) })
describe('#deserialize a private key', function() { describe('#deserialize a private key', function() {
it('serializes what it deserializes', function() { it('serializes what it deserializes', function(done) {
keyring.deserialize({ keyring.deserialize({
mnemonic: sampleMnemonic, mnemonic: sampleMnemonic,
numberOfAccounts: 1 numberOfAccounts: 1
}) })
assert.equal(keyring.wallets.length, 1, 'restores two accounts') .then(() => {
keyring.addAccounts(1) assert.equal(keyring.wallets.length, 1, 'restores two accounts')
keyring.addAccounts(1)
const accounts = keyring.getAccounts()
assert.equal(accounts[0], firstAcct) const accounts = keyring.getAccounts()
assert.equal(accounts[1], secondAcct) assert.equal(accounts[0], firstAcct)
assert.equal(accounts.length, 2) assert.equal(accounts[1], secondAcct)
assert.equal(accounts.length, 2)
const serialized = keyring.serialize()
assert.equal(serialized.mnemonic, sampleMnemonic) keyring.serialize()
.then((serialized) => {
assert.equal(serialized.mnemonic, sampleMnemonic)
done()
})
})
}) })
}) })
describe('#addAccounts', function() { describe('#addAccounts', function() {
describe('with no arguments', function() { describe('with no arguments', function() {
it('creates a single wallet', function() { it('creates a single wallet', function(done) {
keyring.addAccounts() keyring.addAccounts()
assert.equal(keyring.wallets.length, 1) .then(() => {
assert.equal(keyring.wallets.length, 1)
done()
})
}) })
}) })
describe('with a numeric argument', function() { describe('with a numeric argument', function() {
it('creates that number of wallets', function() { it('creates that number of wallets', function(done) {
keyring.addAccounts(3) keyring.addAccounts(3)
assert.equal(keyring.wallets.length, 3) .then(() => {
assert.equal(keyring.wallets.length, 3)
done()
})
}) })
}) })
}) })
describe('#getAccounts', function() { describe('#getAccounts', function() {
it('calls getAddress on each wallet', function() { it('calls getAddress on each wallet', function(done) {
// Push a mock wallet // Push a mock wallet
const desiredOutput = 'foo' const desiredOutput = 'foo'
@ -101,8 +117,11 @@ describe('hd-keyring', function() {
}) })
const output = keyring.getAccounts() const output = keyring.getAccounts()
assert.equal(output[0], desiredOutput) .then((output) => {
assert.equal(output.length, 1) assert.equal(output[0], desiredOutput)
assert.equal(output.length, 1)
done()
})
}) })
}) })
}) })

@ -28,19 +28,23 @@ describe('simple-keyring', function() {
}) })
describe('#serialize empty wallets.', function() { describe('#serialize empty wallets.', function() {
it('serializes an empty array', function() { it('serializes an empty array', function(done) {
const output = keyring.serialize() keyring.serialize()
assert.deepEqual(output, []) .then((output) => {
assert.deepEqual(output, [])
done()
})
}) })
}) })
describe('#deserialize a private key', function() { describe('#deserialize a private key', function() {
it('serializes what it deserializes', function() { it('serializes what it deserializes', function() {
keyring.deserialize([privKeyHex]) keyring.deserialize([privKeyHex])
assert.equal(keyring.wallets.length, 1, 'has one wallet') .then(() => {
assert.equal(keyring.wallets.length, 1, 'has one wallet')
const serialized = keyring.serialize() const serialized = keyring.serialize()
assert.equal(serialized[0], privKeyHex) assert.equal(serialized[0], privKeyHex)
})
}) })
}) })
@ -48,20 +52,24 @@ describe('simple-keyring', function() {
describe('with no arguments', function() { describe('with no arguments', function() {
it('creates a single wallet', function() { it('creates a single wallet', function() {
keyring.addAccounts() keyring.addAccounts()
assert.equal(keyring.wallets.length, 1) .then(() => {
assert.equal(keyring.wallets.length, 1)
})
}) })
}) })
describe('with a numeric argument', function() { describe('with a numeric argument', function() {
it('creates that number of wallets', function() { it('creates that number of wallets', function() {
keyring.addAccounts(3) keyring.addAccounts(3)
assert.equal(keyring.wallets.length, 3) .then(() => {
assert.equal(keyring.wallets.length, 3)
})
}) })
}) })
}) })
describe('#getAccounts', function() { describe('#getAccounts', function() {
it('calls getAddress on each wallet', function() { it('calls getAddress on each wallet', function(done) {
// Push a mock wallet // Push a mock wallet
const desiredOutput = 'foo' const desiredOutput = 'foo'
@ -75,9 +83,12 @@ describe('simple-keyring', function() {
} }
}) })
const output = keyring.getAccounts() keyring.getAccounts()
assert.equal(output[0], desiredOutput) .then((output) => {
assert.equal(output.length, 1) assert.equal(output[0], desiredOutput)
assert.equal(output.length, 1)
done()
})
}) })
}) })
}) })

Loading…
Cancel
Save