From 6838f8d204e63d9df4a3b3cbc3199f07f287549f Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Fri, 6 Mar 2015 14:58:22 -0300 Subject: [PATCH] implement balance by address --- lib/server.js | 16 ++++++++++++++++ test/integration/server.js | 19 +++++++++++++------ 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/lib/server.js b/lib/server.js index 9506e3f..f31c648 100644 --- a/lib/server.js +++ b/lib/server.js @@ -441,6 +441,22 @@ WalletService.prototype.getBalance = function(opts, cb) { return sum + utxo.satoshis; }, 0)); + // Compute balance by address + var byAddress = {}; + _.each(_.indexBy(utxos, 'address'), function(value, key) { + byAddress[key] = { + address: key, + path: value.path, + amount: 0, + }; + }); + + _.each(utxos, function(utxo) { + byAddress[utxo.address].amount += utxo.satoshis; + }); + + balance.byAddress = _.values(byAddress); + return cb(null, balance); }); }; diff --git a/test/integration/server.js b/test/integration/server.js index c72165f..6792b80 100644 --- a/test/integration/server.js +++ b/test/integration/server.js @@ -656,16 +656,22 @@ describe('Copay server', function() { }); it('should get balance', function(done) { - helpers.stubUtxos(server, wallet, 10, function() { + helpers.stubUtxos(server, wallet, [1, 2, 3], function() { server.getBalance({}, function(err, balance) { should.not.exist(err); should.exist(balance); - balance.totalAmount.should.equal(helpers.toSatoshi(10)); + balance.totalAmount.should.equal(helpers.toSatoshi(6)); balance.lockedAmount.should.equal(0); should.exist(balance.byAddress); - balance.byAddress.length.should.equal(1); - balance.byAddress[0].amount.should.equal(helpers.toSatoshi(10)); - done(); + balance.byAddress.length.should.equal(2); + balance.byAddress[0].amount.should.equal(helpers.toSatoshi(4)); + balance.byAddress[1].amount.should.equal(helpers.toSatoshi(2)); + server.getMainAddresses({}, function(err, addresses) { + should.not.exist(err); + var addresses = _.uniq(_.pluck(addresses, 'address')); + _.intersection(addresses, _.pluck(balance.byAddress, 'address')).length.should.equal(2); + done(); + }); }); }); }); @@ -681,6 +687,7 @@ describe('Copay server', function() { }); }); it('should get balance when there are no funds', function(done) { + blockExplorer.getUnspentUtxos = sinon.stub().callsArgWith(1, null, []); server.createAddress({}, function(err, address) { should.not.exist(err); server.getBalance({}, function(err, balance) { @@ -689,7 +696,7 @@ describe('Copay server', function() { balance.totalAmount.should.equal(0); balance.lockedAmount.should.equal(0); should.exist(balance.byAddress); - balance.byAddress.length.should.equal(1); + balance.byAddress.length.should.equal(0); done(); }); });