Merge pull request #41 from isocolsky/first_wallet

moved default wallet creation to controller
This commit is contained in:
Matias Alejo Garcia 2014-10-28 14:59:15 -03:00
commit 6e18949241
3 changed files with 45 additions and 68 deletions

View File

@ -78,42 +78,12 @@ Identity.prototype.getName = function() {
* @param cb
* @return {undefined}
*/
Identity.create = function(opts, cb) {
Identity.create = function(opts) {
opts = _.extend({}, opts);
var iden = new Identity(opts);
if (opts.noWallets) {
return cb(null, iden);
} else {
return iden.createDefaultWallet(opts, cb);
}
return new Identity(opts);
};
/**
* Create a wallet, 1-of-1 named general
*
* @param {Object} opts
* @param {Object} opts.walletDefaults
* @param {string} opts.walletDefaults.networkName
*/
Identity.prototype.createDefaultWallet = function(opts, callback) {
var self = this;
var walletOptions = _.extend(opts.walletDefaults, {
nickname: this.fullName || this.email,
networkName: opts.networkName,
requiredCopayers: 1,
totalCopayers: 1,
password: this.password,
name: 'general'
});
this.createWallet(walletOptions, function(err, wallet) {
if (err) {
return callback(err);
}
return callback(null, self);
});
};
/**
* Open an Identity from the given storage
@ -125,7 +95,6 @@ Identity.prototype.createDefaultWallet = function(opts, callback) {
* @param {Function} cb
*/
Identity.open = function(opts, cb) {
var storage = opts.storage || opts.pluginManager.get('DB');
storage.setCredentials(opts.email, opts.password, opts);
storage.getItem(Identity.getKeyForEmail(opts.email), function(err, data) {
@ -258,7 +227,7 @@ Identity.prototype.store = function(opts, cb) {
self.storage.setItem(this.getId(), this.toObj(), function(err) {
if (err) return cb(err);
if (opts.noWallets)
if (opts.noWallets)
return cb();
async.map(self.wallets, self.storeWallet, cb);
@ -457,7 +426,7 @@ Identity.prototype.createWallet = function(opts, cb) {
opts.txProposals = opts.txProposals || new TxProposals({
networkName: opts.networkName,
});
var walletClass = opts.walletClass || Wallet;
var walletClass = opts.walletClass || Wallet;
log.debug('\t### TxProposals Initialized');
@ -478,8 +447,10 @@ Identity.prototype.createWallet = function(opts, cb) {
if (err) return cb(err);
self.bindWallet(w);
w.netStart();
self.store({noWallets:true},function(err){
return cb(err,w);
self.store({
noWallets: true
}, function(err) {
return cb(err, w);
});
});
};

View File

@ -5,7 +5,7 @@ angular.module('copayApp.services')
var root = {};
root.create = function(scope, form) {
copay.Identity.create({
var iden = copay.Identity.create({
email: form.email.$modelValue,
password: form.password.$modelValue,
pluginManager: pluginManager,
@ -13,9 +13,24 @@ angular.module('copayApp.services')
networkName: config.networkName,
walletDefaults: config.wallet,
passphraseConfig: config.passphraseConfig,
}, function(err, iden) {
var firstWallet = iden.getLastFocusedWallet();
controllerUtils.bindProfile(scope, iden, firstWallet);
});
var walletOptions = {
nickname: iden.fullName,
networkName: config.networkName,
requiredCopayers: 1,
totalCopayers: 1,
password: iden.password,
name: 'My wallet',
};
iden.createWallet(walletOptions, function(err, wallet) {
if (err) {
console.log('Error:' + err)
controllerUtils.onErrorDigest(
scope, 'Could not create default wallet');
} else {
controllerUtils.bindProfile(scope, iden, wallet.id);
}
scope.loading = false;
});
};

View File

@ -123,17 +123,15 @@ describe('Identity model', function() {
});
describe('Identity.create()', function() {
it('should create', function(done) {
it('should create', function() {
var args = createIdentity();
args.blockchain.on = sinon.stub();
var old = Identity.prototype.createWallet;
Identity.prototype.createWallet = sinon.stub().yields(null, getNewWallet());
Identity.create(args.params, function(err, iden) {
should.not.exist(err);
should.exist(iden.wallets);
Identity.prototype.createWallet = old;
done();
});
var iden = Identity.create(args.params);
should.exist(iden);
should.exist(iden.wallets);
Identity.prototype.createWallet = old;
});
});
@ -168,16 +166,13 @@ describe('Identity model', function() {
describe('#createWallet', function() {
var iden = null;
var args = null;
beforeEach(function(done) {
beforeEach(function() {
args = createIdentity();
args.params.noWallets = true;
var old = Identity.prototype.createWallet;
Identity.prototype.createWallet = sinon.stub().yields(null, getNewWallet());
Identity.create(args.params, function(err, identity) {
iden = identity;
Identity.prototype.createWallet = old;
done();
});
iden = Identity.create(args.params);
Identity.prototype.createWallet = old;
});
it('should be able to create wallets with given pk', function(done) {
var priv = 'tprv8ZgxMBicQKsPdEqHcA7RjJTayxA3gSSqeRTttS1JjVbgmNDZdSk9EHZK5pc52GY5xFmwcakmUeKWUDzGoMLGAhrfr5b3MovMUZUTPqisL2m';
@ -234,13 +229,12 @@ describe('Identity model', function() {
importWallet: sinon.stub().returns(getNewWallet()),
};
Identity.create(args.params, function(err, iden) {
iden.retrieveWalletFromStorage('dummy', opts, function(err, wallet) {
should.not.exist(err);
opts.importWallet.calledOnce.should.equal(true);
should.exist(wallet);
done();
});
var iden = Identity.create(args.params);
iden.retrieveWalletFromStorage('dummy', opts, function(err, wallet) {
should.not.exist(err);
opts.importWallet.calledOnce.should.equal(true);
should.exist(wallet);
done();
});
});
});
@ -313,7 +307,7 @@ describe('Identity model', function() {
var args = null;
var net = null;
beforeEach(function(done) {
beforeEach(function() {
args = createIdentity();
args.params.Async = net = sinon.stub();
@ -322,12 +316,9 @@ describe('Identity model', function() {
net.start = sinon.spy();
var old = Identity.prototype.createWallet;
Identity.prototype.createWallet = sinon.stub().yields(null, getNewWallet());
Identity.create(args.params, function(err, identity) {
iden = identity;
Identity.prototype.createWallet = old;
done();
});
iden = Identity.create(args.params);
Identity.prototype.createWallet = old;
});
it('should yield bad network error', function(done) {