add parameters to /blocks/
This commit is contained in:
parent
cbf4b2c03b
commit
3dbad3c6e2
@ -53,8 +53,22 @@ Blocks.heightParam = function(req, res, next, height) {
|
|||||||
* controllers
|
* 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) {
|
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) {
|
.then(function(blocks) {
|
||||||
res.send(blocks);
|
res.send(blocks);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -28,7 +28,13 @@ describe('BitcoreHTTP v1 blocks routes', function() {
|
|||||||
|
|
||||||
// mocks
|
// mocks
|
||||||
var b1 = mockBlocks[Object.keys(mockBlocks)[0]];
|
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 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 nodeMock, app, agent;
|
||||||
var blockList = Object.values(mockBlocks);
|
var blockList = Object.values(mockBlocks);
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
@ -37,7 +43,7 @@ describe('BitcoreHTTP v1 blocks routes', function() {
|
|||||||
var block;
|
var block;
|
||||||
if (typeof blockHash === 'number') {
|
if (typeof blockHash === 'number') {
|
||||||
var height = blockHash;
|
var height = blockHash;
|
||||||
block = mockBlocks[Object.keys(mockBlocks)[height]];
|
block = mockBlocks[Object.keys(mockBlocks)[height - 100000]];
|
||||||
} else {
|
} else {
|
||||||
block = mockBlocks[blockHash];
|
block = mockBlocks[blockHash];
|
||||||
}
|
}
|
||||||
@ -48,10 +54,13 @@ describe('BitcoreHTTP v1 blocks routes', function() {
|
|||||||
|
|
||||||
};
|
};
|
||||||
nodeMock.getLatestBlock = function() {
|
nodeMock.getLatestBlock = function() {
|
||||||
return Promise.resolve(mockBlocks[Object.keys(mockBlocks).splice(-1)[0]]);
|
return Promise.resolve(lastBlock);
|
||||||
};
|
};
|
||||||
nodeMock.listBlocks = function() {
|
nodeMock.listBlocks = function(from, to, offset, limit) {
|
||||||
return Promise.resolve(blockList);
|
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;
|
app = new BitcoreHTTP(nodeMock).app;
|
||||||
agent = request(app);
|
agent = request(app);
|
||||||
@ -63,6 +72,21 @@ describe('BitcoreHTTP v1 blocks routes', function() {
|
|||||||
.expect(200)
|
.expect(200)
|
||||||
.expect(JSON.stringify(blockList), cb);
|
.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() {
|
describe('/blocks/latest', function() {
|
||||||
it('returns latest block', function(cb) {
|
it('returns latest block', function(cb) {
|
||||||
@ -103,7 +127,7 @@ describe('BitcoreHTTP v1 blocks routes', function() {
|
|||||||
.expect('Block with height 876543 not found', cb);
|
.expect('Block with height 876543 not found', cb);
|
||||||
});
|
});
|
||||||
it('works with valid height', function(cb) {
|
it('works with valid height', function(cb) {
|
||||||
agent.get('/v1/blocks/0')
|
agent.get('/v1/blocks/100000')
|
||||||
.expect(200)
|
.expect(200)
|
||||||
.expect(b1.toJSON(), cb);
|
.expect(b1.toJSON(), cb);
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user