Merge pull request #392 from isocolsky/feat/get-main-addresses-params

Add params to getMainAddresses
This commit is contained in:
Matias Alejo Garcia 2015-10-29 16:38:22 -03:00
commit 3425f9ec57
3 changed files with 59 additions and 3 deletions

View File

@ -282,7 +282,7 @@ ExpressApp.prototype.start = function(opts, cb) {
router.get('/v1/addresses/', function(req, res) {
getServerWithAuth(req, res, function(server) {
server.getMainAddresses({}, function(err, addresses) {
server.getMainAddresses(req.body, function(err, addresses) {
if (err) return returnError(err, res, req);
res.json(addresses);
});

View File

@ -769,17 +769,23 @@ WalletService.prototype.createAddress = function(opts, cb) {
/**
* Get all addresses.
* @param {Object} opts
* @param {Numeric} opts.limit (optional) - Limit the resultset. Return all addresses by default.
* @param {Boolean} [opts.reverse=false] (optional) - Reverse the order of returned addresses.
* @returns {Address[]}
*/
WalletService.prototype.getMainAddresses = function(opts, cb) {
var self = this;
opts = opts || {};
self.storage.fetchAddresses(self.walletId, function(err, addresses) {
if (err) return cb(err);
var onlyMain = _.reject(addresses, {
isChange: true
});
if (opts.reverse) onlyMain.reverse();
if (opts.limit > 0) onlyMain = _.take(onlyMain, opts.limit);
return cb(null, onlyMain);
});
};

View File

@ -315,14 +315,16 @@ helpers.createProposalOpts = function(type, outputs, signingKey, moreOpts) {
};
helpers.createAddresses = function(server, wallet, main, change, cb) {
var clock = sinon.useFakeTimers(Date.now(), 'Date');
async.map(_.range(main + change), function(i, next) {
clock.tick(1000);
var address = wallet.createAddress(i >= main);
server.storage.storeAddressAndWallet(wallet, address, function(err) {
if (err) return next(err);
next(null, address);
next(err, address);
});
}, function(err, addresses) {
if (err) throw new Error('Could not generate addresses');
clock.restore();
return cb(_.take(addresses, main), _.takeRight(addresses, change));
});
};
@ -1777,6 +1779,54 @@ describe('Wallet service', function() {
});
});
describe('#getMainAddresses', function() {
var server, wallet;
beforeEach(function(done) {
helpers.createAndJoinWallet(2, 2, {}, function(s, w) {
server = s;
wallet = w;
helpers.createAddresses(server, wallet, 5, 0, function() {
done();
});
});
});
it('should get all addresses', function(done) {
server.getMainAddresses({}, function(err, addresses) {
should.not.exist(err);
addresses.length.should.equal(5);
addresses[0].path.should.equal('m/0/0');
addresses[4].path.should.equal('m/0/4');
done();
});
});
it('should get first N addresses', function(done) {
server.getMainAddresses({
limit: 3
}, function(err, addresses) {
should.not.exist(err);
addresses.length.should.equal(3);
addresses[0].path.should.equal('m/0/0');
addresses[2].path.should.equal('m/0/2');
done();
});
});
it('should get last N addresses in reverse order', function(done) {
server.getMainAddresses({
limit: 3,
reverse: true,
}, function(err, addresses) {
should.not.exist(err);
addresses.length.should.equal(3);
addresses[0].path.should.equal('m/0/4');
addresses[2].path.should.equal('m/0/2');
done();
});
});
});
describe('Preferences', function() {
var server, wallet;
beforeEach(function(done) {