From 7c3231ac3c9d6316ca9c5e3fda136b74adcc1f78 Mon Sep 17 00:00:00 2001 From: Manuel Araoz Date: Fri, 6 Mar 2015 19:06:19 -0300 Subject: [PATCH] promisify Node.getStatus() --- api/controllers/node.js | 5 ++++- api/controllers/transactions.js | 17 ++++++++++------- api/index.js | 9 ++++++--- api/test/v1/node.js | 5 +++++ api/test/v1/transactions.js | 12 +++++++++--- index.js | 7 +++++-- 6 files changed, 39 insertions(+), 16 deletions(-) diff --git a/api/controllers/node.js b/api/controllers/node.js index cfecd62e..cc0835c2 100644 --- a/api/controllers/node.js +++ b/api/controllers/node.js @@ -7,7 +7,10 @@ NodeStatus.setNode = function(aNode) { }; NodeStatus.getStatus = function(req, res) { - res.send(node.status); + node.getStatus() + .then(function(status) { + res.send(status); + }); }; module.exports = NodeStatus; diff --git a/api/controllers/transactions.js b/api/controllers/transactions.js index ec280637..2cfdf35c 100644 --- a/api/controllers/transactions.js +++ b/api/controllers/transactions.js @@ -1,10 +1,14 @@ 'use strict'; +var Promise = require('bluebird'); + var bitcore = require('bitcore'); var _ = bitcore.deps._; var $ = bitcore.util.preconditions; var Transaction = bitcore.Transaction; +var BitcoreNode = require('../../'); + var Transactions = {}; var node; @@ -23,13 +27,12 @@ Transactions.setNode = function(aNode) { Transactions.txHashParam = function(req, res, next, txHash) { node.getTransaction(txHash) .then(function(tx) { - if (_.isUndefined(tx)) { - res.status(404).send('Transaction with id ' + txHash + ' not found'); - return; - } req.tx = tx; }) - .then(next); + .then(next) + .catch(BitcoreNode.errors.Transactions.NotFound, function() { + res.status(404).send('Transaction with id ' + txHash + ' not found'); + }); }; @@ -66,8 +69,8 @@ Transactions.send = function(req, res) { .then(function() { res.send('Transaction broadcasted successfully'); }) - .catch(function(err) { - res.status(422).send(err); + .catch(BitcoreNode.errors.Transactions.CantBroadcast, function(err) { + res.status(422).send(err.message); }); }; diff --git a/api/index.js b/api/index.js index d11977c6..d0a21153 100755 --- a/api/index.js +++ b/api/index.js @@ -1,8 +1,11 @@ 'use strict'; -var config = require('config'); var BitcoreHTTP = require('./lib/http'); -var http = BitcoreHTTP.create(config.get('BitcoreHTTP')); -http.start(); +if (require.main === module) { + var config = require('config'); + var http = BitcoreHTTP.create(config.get('BitcoreHTTP')); + http.start(); +} +module.exports = BitcoreHTTP; diff --git a/api/test/v1/node.js b/api/test/v1/node.js index 494a6f11..16a5a375 100644 --- a/api/test/v1/node.js +++ b/api/test/v1/node.js @@ -5,6 +5,8 @@ var should = chai.should(); var request = require('supertest'); var EventEmitter = require('eventemitter2').EventEmitter2; +var Promise = require('bluebird'); +Promise.longStackTraces(); var BitcoreHTTP = require('../../lib/http'); @@ -19,6 +21,9 @@ describe('BitcoreHTTP v1 node routes', function() { peer_count: 8, version: 'test' }; + nodeMock.getStatus = function() { + return Promise.resolve(nodeMock.status); + }; app = new BitcoreHTTP(nodeMock).app; agent = request(app); }); diff --git a/api/test/v1/transactions.js b/api/test/v1/transactions.js index a186e4d2..f027153e 100644 --- a/api/test/v1/transactions.js +++ b/api/test/v1/transactions.js @@ -5,12 +5,14 @@ var should = chai.should(); var request = require('supertest'); var bitcore = require('bitcore'); +var _ = bitcore.deps._; var Transaction = bitcore.Transaction; var EventEmitter = require('eventemitter2').EventEmitter2; var Promise = require('bluebird'); Promise.longStackTraces(); var BitcoreHTTP = require('../../lib/http'); +var BitcoreNode = require('../../../'); var mockTransactions = require('../data/transactions'); describe('BitcoreHTTP v1 transactions routes', function() { @@ -22,11 +24,15 @@ describe('BitcoreHTTP v1 transactions routes', function() { beforeEach(function() { nodeMock = new EventEmitter(); nodeMock.getTransaction = function(txHash) { - return Promise.resolve(mockTransactions[txHash]); + var tx = mockTransactions[txHash]; + if (_.isUndefined(tx)) { + return Promise.reject(new BitcoreNode.errors.Transactions.NotFound(txHash)); + } + return Promise.resolve(tx); }; nodeMock.broadcast = function(tx) { if (mockTransactions[tx.id]) { - return Promise.reject('some error'); + return Promise.reject(new BitcoreNode.errors.Transactions.CantBroadcast(tx.id)); } return Promise.resolve(); }; @@ -99,7 +105,7 @@ describe('BitcoreHTTP v1 transactions routes', function() { raw: t1.uncheckedSerialize() }) .expect(422) - .expect('some error', cb); + .expect('Unable to broadcast transaction 8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87', cb); }); }); diff --git a/index.js b/index.js index 3ad4398a..51e4e9f8 100644 --- a/index.js +++ b/index.js @@ -1,10 +1,10 @@ 'use strict'; -var config = require('config'); -var BitcoreNode = require('./lib/node.js'); +var BitcoreNode = require('./lib/node'); if (require.main === module) { + var config = require('config'); var node = BitcoreNode.create(config.get('BitcoreNode')); node.start(); node.on('error', function(err) { @@ -16,4 +16,7 @@ if (require.main === module) { }); } + +BitcoreNode.errors = require('./lib/errors'); + module.exports = BitcoreNode;