add utxos call
This commit is contained in:
parent
81e1ec13d2
commit
cb7f2c9343
@ -37,6 +37,10 @@ Addresses.addressParam = function(req, res, next, address) {
|
|||||||
* controllers
|
* controllers
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets an address information
|
||||||
|
*/
|
||||||
Addresses.get = function(req, res) {
|
Addresses.get = function(req, res) {
|
||||||
$.checkState(req.address instanceof Address);
|
$.checkState(req.address instanceof Address);
|
||||||
node.getAddressInfo(req.address)
|
node.getAddressInfo(req.address)
|
||||||
@ -45,4 +49,15 @@ Addresses.get = function(req, res) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets an address utxos
|
||||||
|
*/
|
||||||
|
Addresses.utxos = function(req, res) {
|
||||||
|
$.checkState(req.address instanceof Address);
|
||||||
|
node.getUTXOs(req.address)
|
||||||
|
.then(function(utxos) {
|
||||||
|
res.send(utxos);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = Addresses;
|
module.exports = Addresses;
|
||||||
|
|||||||
@ -50,7 +50,7 @@ function initRouter(node) {
|
|||||||
// Address routes
|
// Address routes
|
||||||
router.get('/addresses/:address', Addresses.get);
|
router.get('/addresses/:address', Addresses.get);
|
||||||
router.get('/addresses/:address/transactions', Transactions.list);
|
router.get('/addresses/:address/transactions', Transactions.list);
|
||||||
router.get('/addresses/:address/utxos', mockResponse);
|
router.get('/addresses/:address/utxos', Addresses.utxos);
|
||||||
// TODO: check if this is really restful
|
// TODO: check if this is really restful
|
||||||
router.get('/addresses/:addresses/utxos', mockResponse);
|
router.get('/addresses/:addresses/utxos', mockResponse);
|
||||||
|
|
||||||
|
|||||||
@ -2,65 +2,89 @@
|
|||||||
|
|
||||||
var mockAddresses = {
|
var mockAddresses = {
|
||||||
'1CT9huFgxMFveRvzZ7zPPJNoaMm2Fo64VH': {
|
'1CT9huFgxMFveRvzZ7zPPJNoaMm2Fo64VH': {
|
||||||
address: '1CT9huFgxMFveRvzZ7zPPJNoaMm2Fo64VH',
|
summary: {
|
||||||
transactions: [
|
address: '1CT9huFgxMFveRvzZ7zPPJNoaMm2Fo64VH',
|
||||||
'b944ef8c77f9b5f4a4276880f17256988bba4d0125abc54391548061a688ae09'
|
transactions: [
|
||||||
],
|
'b944ef8c77f9b5f4a4276880f17256988bba4d0125abc54391548061a688ae09'
|
||||||
unconfirmed: {
|
],
|
||||||
balance: 5000000000,
|
unconfirmed: {
|
||||||
received: 5000000000,
|
balance: 5000000000,
|
||||||
sent: 0,
|
received: 5000000000,
|
||||||
|
sent: 0,
|
||||||
|
},
|
||||||
|
confirmed: {
|
||||||
|
balance: 5000000000,
|
||||||
|
received: 5000000000,
|
||||||
|
sent: 0,
|
||||||
|
}
|
||||||
},
|
},
|
||||||
confirmed: {
|
utxos: [{
|
||||||
balance: 5000000000,
|
satoshis: 5000000000,
|
||||||
received: 5000000000,
|
script: 'TODO',
|
||||||
sent: 0,
|
txid: 'b944ef8c77f9b5f4a4276880f17256988bba4d0125abc54391548061a688ae09',
|
||||||
}
|
index: 0
|
||||||
|
}]
|
||||||
},
|
},
|
||||||
'1HZH6zHri1qc68s34MmE5MwG9xstbkFavo': {
|
'1HZH6zHri1qc68s34MmE5MwG9xstbkFavo': {
|
||||||
address: '1HZH6zHri1qc68s34MmE5MwG9xstbkFavo',
|
summary: {
|
||||||
transactions: [
|
address: '1HZH6zHri1qc68s34MmE5MwG9xstbkFavo',
|
||||||
'07ebb557e5782d4b9b7180c5b0b299ab1249d28f3454ccc19d4e7bd819e5ec35',
|
transactions: [
|
||||||
'7b309cef1b87471baee38a533c850ce25350f10e88a64e04da1ee08a69dbbba1',
|
'07ebb557e5782d4b9b7180c5b0b299ab1249d28f3454ccc19d4e7bd819e5ec35',
|
||||||
'0c88e745b5c1dffccc39a96f3e25e9486bcafde82b92441f463859df15685959',
|
'7b309cef1b87471baee38a533c850ce25350f10e88a64e04da1ee08a69dbbba1',
|
||||||
],
|
'0c88e745b5c1dffccc39a96f3e25e9486bcafde82b92441f463859df15685959',
|
||||||
unconfirmed: {
|
],
|
||||||
balance: 200000043000,
|
unconfirmed: {
|
||||||
received: 200000043000,
|
balance: 200000043000,
|
||||||
sent: 0,
|
received: 200000043000,
|
||||||
|
sent: 0,
|
||||||
|
},
|
||||||
|
confirmed: {
|
||||||
|
balance: 200000043000,
|
||||||
|
received: 200000043000,
|
||||||
|
sent: 0,
|
||||||
|
}
|
||||||
},
|
},
|
||||||
confirmed: {
|
utxos: [{
|
||||||
balance: 200000043000,
|
satoshis: 5000000000,
|
||||||
received: 200000043000,
|
script: 'TODO',
|
||||||
sent: 0,
|
txid: 'b944ef8c77f9b5f4a4276880f17256988bba4d0125abc54391548061a688ae09',
|
||||||
}
|
index: 0
|
||||||
|
}]
|
||||||
|
|
||||||
},
|
},
|
||||||
'1CEXio2gSCozXeSuKQJCDMEpgHfaiT48A3': {
|
'1CEXio2gSCozXeSuKQJCDMEpgHfaiT48A3': {
|
||||||
address: '1CEXio2gSCozXeSuKQJCDMEpgHfaiT48A3',
|
summary: {
|
||||||
transactions: [
|
address: '1CEXio2gSCozXeSuKQJCDMEpgHfaiT48A3',
|
||||||
'07ebb557e5782d4b9b7180c5b0b299ab1249d28f3454ccc19d4e7bd819e5ec35',
|
transactions: [
|
||||||
'b6025e6835966b31f40a9f0bb4a1717df0976ec23934934d2b2580a884c09b68',
|
'07ebb557e5782d4b9b7180c5b0b299ab1249d28f3454ccc19d4e7bd819e5ec35',
|
||||||
'6ae158f49c25435c472f1533bce7d090f9edeb75b20fc30297ee78c962f4295a',
|
'b6025e6835966b31f40a9f0bb4a1717df0976ec23934934d2b2580a884c09b68',
|
||||||
'35dd6607d21b3b0739fc0696d0633eaaa26f5ab10e2cbb0fa12353c2ccff6f83',
|
'6ae158f49c25435c472f1533bce7d090f9edeb75b20fc30297ee78c962f4295a',
|
||||||
'f14c1e10e8b0657068df4d53d8d93d1eb6b1f699041f7d505d5c482479c59634',
|
'35dd6607d21b3b0739fc0696d0633eaaa26f5ab10e2cbb0fa12353c2ccff6f83',
|
||||||
'9aa72c5b116a12f80b2d38b1f7bb43356d3a4f02637e7ac5abfeebb14862a3f8',
|
'f14c1e10e8b0657068df4d53d8d93d1eb6b1f699041f7d505d5c482479c59634',
|
||||||
'9a0a957583f5ea390b2b5573ace7d67a876aeb66c59ada5c0d79a6b7affb34f6',
|
'9aa72c5b116a12f80b2d38b1f7bb43356d3a4f02637e7ac5abfeebb14862a3f8',
|
||||||
'585d59d3223eef73ccdc3c19b4e85cb0cc66ea818f173cf6d54723785c7210a1',
|
'9a0a957583f5ea390b2b5573ace7d67a876aeb66c59ada5c0d79a6b7affb34f6',
|
||||||
'2952d4f79d2388c3cb931e92699ded43fe3b92f2a58f03ee0c68a0a5b0d73e46',
|
'585d59d3223eef73ccdc3c19b4e85cb0cc66ea818f173cf6d54723785c7210a1',
|
||||||
'f4e18bfbd9edc5ac0cfdd5b0869d77ef5cd38908afe106c02d189ac835569c87',
|
'2952d4f79d2388c3cb931e92699ded43fe3b92f2a58f03ee0c68a0a5b0d73e46',
|
||||||
'4fb1495d114e6853acbe95c38f0acad1b8f790f8979148015e8fbfc3d0c394e9',
|
'f4e18bfbd9edc5ac0cfdd5b0869d77ef5cd38908afe106c02d189ac835569c87',
|
||||||
],
|
'4fb1495d114e6853acbe95c38f0acad1b8f790f8979148015e8fbfc3d0c394e9',
|
||||||
unconfirmed: {
|
],
|
||||||
balance: 93350245,
|
unconfirmed: {
|
||||||
received: 1230747491,
|
balance: 93350245,
|
||||||
sent: 1137397246,
|
received: 1230747491,
|
||||||
|
sent: 1137397246,
|
||||||
|
},
|
||||||
|
confirmed: {
|
||||||
|
balance: 93350245,
|
||||||
|
received: 1230747491,
|
||||||
|
sent: 1137397246,
|
||||||
|
}
|
||||||
},
|
},
|
||||||
confirmed: {
|
utxos: [{
|
||||||
balance: 93350245,
|
satoshis: 5000000000,
|
||||||
received: 1230747491,
|
script: 'TODO',
|
||||||
sent: 1137397246,
|
txid: 'b944ef8c77f9b5f4a4276880f17256988bba4d0125abc54391548061a688ae09',
|
||||||
}
|
index: 0
|
||||||
|
}]
|
||||||
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@ -11,7 +11,6 @@ var bitcore = require('bitcore');
|
|||||||
var _ = bitcore.deps._;
|
var _ = bitcore.deps._;
|
||||||
|
|
||||||
var BitcoreHTTP = require('../../lib/http');
|
var BitcoreHTTP = require('../../lib/http');
|
||||||
var BitcoreNode = require('../../../');
|
|
||||||
|
|
||||||
var mockAddresses = require('../data/addresses');
|
var mockAddresses = require('../data/addresses');
|
||||||
var mockTransactions = require('../data/transactions');
|
var mockTransactions = require('../data/transactions');
|
||||||
@ -20,28 +19,39 @@ describe('BitcoreHTTP v1 addresses routes', function() {
|
|||||||
|
|
||||||
// mocks
|
// mocks
|
||||||
var transactionList = Object.values(mockTransactions);
|
var transactionList = Object.values(mockTransactions);
|
||||||
var nodeMock, app, agent, txs_for_addr;
|
var nodeMock, app, agent;
|
||||||
|
var txs_for_addr = function(addr) {
|
||||||
|
var amount = mockAddresses[addr].summary.transactions.length;
|
||||||
|
return transactionList.slice(0, amount);
|
||||||
|
};
|
||||||
|
var utxos_for_addr = function(addr) {
|
||||||
|
return mockAddresses[addr].utxos;
|
||||||
|
};
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
nodeMock = new EventEmitter();
|
nodeMock = new EventEmitter();
|
||||||
nodeMock.getAddressInfo = function(address) {
|
nodeMock.getAddressInfo = function(address) {
|
||||||
return Promise.resolve(mockAddresses[address.toString()]);
|
return Promise.resolve(mockAddresses[address.toString()]);
|
||||||
};
|
};
|
||||||
txs_for_addr = function(addr) {
|
|
||||||
var amount = mockAddresses[addr].transactions.length;
|
|
||||||
return transactionList.slice(0, amount);
|
|
||||||
};
|
|
||||||
nodeMock.listTransactions = function(opts) {
|
nodeMock.listTransactions = function(opts) {
|
||||||
return Promise.resolve(txs_for_addr(opts.address));
|
return Promise.resolve(txs_for_addr(opts.address));
|
||||||
};
|
};
|
||||||
|
nodeMock.getUTXOs = function(address) {
|
||||||
|
return Promise.resolve(utxos_for_addr(address));
|
||||||
|
};
|
||||||
app = new BitcoreHTTP(nodeMock).app;
|
app = new BitcoreHTTP(nodeMock).app;
|
||||||
agent = request(app);
|
agent = request(app);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('/addresses/:addresss', function() {
|
var failsWithInvalidAddress = function(agent, url, cb) {
|
||||||
|
agent.get(url)
|
||||||
|
.expect(422)
|
||||||
|
.expect('/v1/addresses/ parameter must be a valid bitcoin address', cb);
|
||||||
|
};
|
||||||
|
|
||||||
|
describe('/addresses/:address', function() {
|
||||||
it('fails with invalid address', function(cb) {
|
it('fails with invalid address', function(cb) {
|
||||||
agent.get('/v1/addresses/1BpbpfLdY7oBS9gK7aDXgvMgr1DpvNH3B2')
|
failsWithInvalidAddress(agent, '/v1/addresses/1BpbpfLdY7oBS9gK7aDXgvMgr1DpvNH3B2', cb);
|
||||||
.expect(422)
|
|
||||||
.expect('/v1/addresses/ parameter must be a valid bitcoin address', cb);
|
|
||||||
});
|
});
|
||||||
Object.keys(mockAddresses).forEach(function(addr) {
|
Object.keys(mockAddresses).forEach(function(addr) {
|
||||||
var info = mockAddresses[addr];
|
var info = mockAddresses[addr];
|
||||||
@ -52,11 +62,9 @@ describe('BitcoreHTTP v1 addresses routes', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('/addresses/:addresss/transactions', function() {
|
describe('/addresses/:address/transactions', function() {
|
||||||
it('fails with invalid address', function(cb) {
|
it('fails with invalid address', function(cb) {
|
||||||
agent.get('/v1/addresses/1BpbpfLdY7oBS9gK7aDXgvMgr1DpvNH3B2/transactions')
|
failsWithInvalidAddress(agent, '/v1/addresses/1BpbpfLdY7oBS9gK7aDXgvMgr1DpvNH3B2/transactions', cb);
|
||||||
.expect(422)
|
|
||||||
.expect('/v1/addresses/ parameter must be a valid bitcoin address', cb);
|
|
||||||
});
|
});
|
||||||
Object.keys(mockAddresses).forEach(function(addr) {
|
Object.keys(mockAddresses).forEach(function(addr) {
|
||||||
it('works with valid address ' + addr, function(cb) {
|
it('works with valid address ' + addr, function(cb) {
|
||||||
@ -66,4 +74,16 @@ describe('BitcoreHTTP v1 addresses routes', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
describe('/addresses/:address/utxos', function() {
|
||||||
|
it('fails with invalid address', function(cb) {
|
||||||
|
failsWithInvalidAddress(agent, '/v1/addresses/1BpbpfLdY7oBS9gK7aDXgvMgr1DpvNH3B2/utxos', cb);
|
||||||
|
});
|
||||||
|
Object.keys(mockAddresses).forEach(function(addr) {
|
||||||
|
it('works with valid address ' + addr, function(cb) {
|
||||||
|
agent.get('/v1/addresses/' + addr + '/utxos')
|
||||||
|
.expect(200)
|
||||||
|
.expect(JSON.stringify(utxos_for_addr(addr)), cb);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user