add utxos call

This commit is contained in:
Manuel Araoz 2015-03-12 15:58:58 -03:00
parent 81e1ec13d2
commit cb7f2c9343
4 changed files with 125 additions and 66 deletions

View File

@ -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;

View File

@ -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);

View File

@ -2,6 +2,7 @@
var mockAddresses = { var mockAddresses = {
'1CT9huFgxMFveRvzZ7zPPJNoaMm2Fo64VH': { '1CT9huFgxMFveRvzZ7zPPJNoaMm2Fo64VH': {
summary: {
address: '1CT9huFgxMFveRvzZ7zPPJNoaMm2Fo64VH', address: '1CT9huFgxMFveRvzZ7zPPJNoaMm2Fo64VH',
transactions: [ transactions: [
'b944ef8c77f9b5f4a4276880f17256988bba4d0125abc54391548061a688ae09' 'b944ef8c77f9b5f4a4276880f17256988bba4d0125abc54391548061a688ae09'
@ -17,7 +18,15 @@ var mockAddresses = {
sent: 0, sent: 0,
} }
}, },
utxos: [{
satoshis: 5000000000,
script: 'TODO',
txid: 'b944ef8c77f9b5f4a4276880f17256988bba4d0125abc54391548061a688ae09',
index: 0
}]
},
'1HZH6zHri1qc68s34MmE5MwG9xstbkFavo': { '1HZH6zHri1qc68s34MmE5MwG9xstbkFavo': {
summary: {
address: '1HZH6zHri1qc68s34MmE5MwG9xstbkFavo', address: '1HZH6zHri1qc68s34MmE5MwG9xstbkFavo',
transactions: [ transactions: [
'07ebb557e5782d4b9b7180c5b0b299ab1249d28f3454ccc19d4e7bd819e5ec35', '07ebb557e5782d4b9b7180c5b0b299ab1249d28f3454ccc19d4e7bd819e5ec35',
@ -34,9 +43,17 @@ var mockAddresses = {
received: 200000043000, received: 200000043000,
sent: 0, sent: 0,
} }
},
utxos: [{
satoshis: 5000000000,
script: 'TODO',
txid: 'b944ef8c77f9b5f4a4276880f17256988bba4d0125abc54391548061a688ae09',
index: 0
}]
}, },
'1CEXio2gSCozXeSuKQJCDMEpgHfaiT48A3': { '1CEXio2gSCozXeSuKQJCDMEpgHfaiT48A3': {
summary: {
address: '1CEXio2gSCozXeSuKQJCDMEpgHfaiT48A3', address: '1CEXio2gSCozXeSuKQJCDMEpgHfaiT48A3',
transactions: [ transactions: [
'07ebb557e5782d4b9b7180c5b0b299ab1249d28f3454ccc19d4e7bd819e5ec35', '07ebb557e5782d4b9b7180c5b0b299ab1249d28f3454ccc19d4e7bd819e5ec35',
@ -61,6 +78,13 @@ var mockAddresses = {
received: 1230747491, received: 1230747491,
sent: 1137397246, sent: 1137397246,
} }
},
utxos: [{
satoshis: 5000000000,
script: 'TODO',
txid: 'b944ef8c77f9b5f4a4276880f17256988bba4d0125abc54391548061a688ae09',
index: 0
}]
}, },
}; };

View File

@ -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) {
it('fails with invalid address', function(cb) { agent.get(url)
agent.get('/v1/addresses/1BpbpfLdY7oBS9gK7aDXgvMgr1DpvNH3B2')
.expect(422) .expect(422)
.expect('/v1/addresses/ parameter must be a valid bitcoin address', cb); .expect('/v1/addresses/ parameter must be a valid bitcoin address', cb);
};
describe('/addresses/:address', function() {
it('fails with invalid address', function(cb) {
failsWithInvalidAddress(agent, '/v1/addresses/1BpbpfLdY7oBS9gK7aDXgvMgr1DpvNH3B2', 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);
});
});
});
}); });