add parameters to /blocks/

This commit is contained in:
Manuel Araoz 2015-03-09 20:18:53 -03:00
parent cbf4b2c03b
commit 3dbad3c6e2
2 changed files with 44 additions and 6 deletions

View File

@ -53,8 +53,22 @@ Blocks.heightParam = function(req, res, next, height) {
* controllers
*/
/*
* Returns a list of blocks given certain query options.
*
* from: block height as lower limit (default: 0)
* to: ditto, but for the upper limit, non inclusive (default: 1000000)
* page: for paginating results (default: 0)
* offset: skip the first offset blocks (default: 0)
* limit: max amount of blocks returned (default: 10)
*
*/
Blocks.list = function(req, res) {
node.listBlocks()
var from = parseInt(req.query.from || 0);
var to = parseInt(req.query.to || 1e6);
var offset = parseInt(req.query.offset || 0);
var limit = parseInt(req.query.limit || 10);
node.listBlocks(from, to, offset, limit)
.then(function(blocks) {
res.send(blocks);
});

View File

@ -28,7 +28,13 @@ describe('BitcoreHTTP v1 blocks routes', function() {
// mocks
var b1 = mockBlocks[Object.keys(mockBlocks)[0]];
var firstBlock = mockBlocks[Object.keys(mockBlocks).splice(0, 1)[0]];
var secondBlock = mockBlocks[Object.keys(mockBlocks).splice(1, 1)[0]];
var lastBlock = mockBlocks[Object.keys(mockBlocks).splice(-1)[0]];
var blockForHash = function(hash) {
return mockBlocks[hash];
};
var last3 = Object.keys(mockBlocks).splice(-3).map(blockForHash);
var nodeMock, app, agent;
var blockList = Object.values(mockBlocks);
beforeEach(function() {
@ -37,7 +43,7 @@ describe('BitcoreHTTP v1 blocks routes', function() {
var block;
if (typeof blockHash === 'number') {
var height = blockHash;
block = mockBlocks[Object.keys(mockBlocks)[height]];
block = mockBlocks[Object.keys(mockBlocks)[height - 100000]];
} else {
block = mockBlocks[blockHash];
}
@ -48,10 +54,13 @@ describe('BitcoreHTTP v1 blocks routes', function() {
};
nodeMock.getLatestBlock = function() {
return Promise.resolve(mockBlocks[Object.keys(mockBlocks).splice(-1)[0]]);
return Promise.resolve(lastBlock);
};
nodeMock.listBlocks = function() {
return Promise.resolve(blockList);
nodeMock.listBlocks = function(from, to, offset, limit) {
var start = from - 1e5;
var end = to - 1e5;
var section = blockList.slice(start, end);
return Promise.resolve(section.slice(offset, offset + limit));
};
app = new BitcoreHTTP(nodeMock).app;
agent = request(app);
@ -63,6 +72,21 @@ describe('BitcoreHTTP v1 blocks routes', function() {
.expect(200)
.expect(JSON.stringify(blockList), cb);
});
it('works with to/from parameters', function(cb) {
agent.get('/v1/blocks/?from=100000&to=100001')
.expect(200)
.expect(JSON.stringify([firstBlock]), cb);
});
it('works with limit/offset parameters', function(cb) {
agent.get('/v1/blocks/?limit=1&offset=1')
.expect(200)
.expect(JSON.stringify([secondBlock]), cb);
});
it('works with all parameters', function(cb) {
agent.get('/v1/blocks/?from=100005&to=100020&limit=3&offset=2')
.expect(200)
.expect(JSON.stringify(last3), cb);
});
});
describe('/blocks/latest', function() {
it('returns latest block', function(cb) {
@ -103,7 +127,7 @@ describe('BitcoreHTTP v1 blocks routes', function() {
.expect('Block with height 876543 not found', cb);
});
it('works with valid height', function(cb) {
agent.get('/v1/blocks/0')
agent.get('/v1/blocks/100000')
.expect(200)
.expect(b1.toJSON(), cb);
});