From dcc8ade166d8b9e7f86fea1b2cb9172400f501cf Mon Sep 17 00:00:00 2001 From: Manuel Araoz Date: Tue, 3 Mar 2015 14:59:01 -0300 Subject: [PATCH] add tests for api --- api/config/default.yml | 1 + api/index.js | 6 ++---- api/lib/http.js | 20 ++++++-------------- api/test/http.js | 32 ++++++++++++++++++++++++++++++++ api/test/routes.js | 40 ++++++++++++++++++++++++++++++++++++++++ package.json | 3 ++- test/mocha.opts | 4 ++++ 7 files changed, 87 insertions(+), 19 deletions(-) create mode 100644 api/test/http.js create mode 100644 api/test/routes.js create mode 100644 test/mocha.opts diff --git a/api/config/default.yml b/api/config/default.yml index 98713c7f..1ba65a51 100644 --- a/api/config/default.yml +++ b/api/config/default.yml @@ -1,5 +1,6 @@ BitcoreHTTP: port: 8080 + logging: true BitcoreNode: NetworkMonitor: network: livenet diff --git a/api/index.js b/api/index.js index 2cd99f4e..d11977c6 100755 --- a/api/index.js +++ b/api/index.js @@ -1,10 +1,8 @@ -#!/usr/bin/env node - 'use strict'; var config = require('config'); var BitcoreHTTP = require('./lib/http'); -var app = BitcoreHTTP.create(config.get('BitcoreHTTP')); -app.start(); +var http = BitcoreHTTP.create(config.get('BitcoreHTTP')); +http.start(); diff --git a/api/lib/http.js b/api/lib/http.js index afec7f41..50c66a4e 100644 --- a/api/lib/http.js +++ b/api/lib/http.js @@ -19,6 +19,7 @@ function BitcoreHTTP(node, opts) { opts = opts || {}; this.node = node; this.port = opts.port || 8000; + this.logging = opts.logging || false; this.setupExpress(); } @@ -39,25 +40,16 @@ BitcoreHTTP.prototype.setupExpress = function() { app.use(bodyParser.urlencoded({ extended: false })); - app.use(morgan('dev')); + if (this.logging) { + app.use(morgan('dev')); + } // install routes app.use('/', routes(this.node)); // catch 404 and forward to error handler - app.use(function(req, res, next) { - var err = new Error('Not Found'); - err.status = 404; - next(err); - }); - - // production error handler - app.use(function(err, req, res) { - res.status(err.status || 500); - res.send({ - message: err.message, - error: {} - }); + app.use(function(req, res) { + res.status(404).send('Not Found'); }); app.set('port', this.port); diff --git a/api/test/http.js b/api/test/http.js new file mode 100644 index 00000000..0566540b --- /dev/null +++ b/api/test/http.js @@ -0,0 +1,32 @@ +'use strict'; + +var chai = require('chai'); +var should = chai.should(); + +var EventEmitter = require('eventemitter2').EventEmitter2; + +var BitcoreHTTP = require('../lib/http'); + +describe('BitcoreHTTP', function() { + + // mocks + var nodeMock; + beforeEach(function() { + nodeMock = new EventEmitter(); + }); + describe('instantiates', function() { + it('from constructor', function() { + var http = new BitcoreHTTP(nodeMock); + should.exist(http); + }); + it('from create', function() { + var http = new BitcoreHTTP.create(); + should.exist(http); + }); + }); + it('starts', function() { + var http = new BitcoreHTTP(nodeMock); + http.start.bind(http).should.not.throw(); + }); + +}); diff --git a/api/test/routes.js b/api/test/routes.js new file mode 100644 index 00000000..70d987aa --- /dev/null +++ b/api/test/routes.js @@ -0,0 +1,40 @@ +'use strict'; + +var chai = require('chai'); +var should = chai.should(); +var request = require('supertest'); + +var EventEmitter = require('eventemitter2').EventEmitter2; + +var BitcoreHTTP = require('../lib/http'); + +describe('BitcoreHTTP routes', function() { + + // mocks + var nodeMock, app, agent; + beforeEach(function() { + var opts = { + port: 1234 + }; + nodeMock = new EventEmitter(); + app = new BitcoreHTTP(nodeMock, opts).app; + agent = request(app); + }); + it('404s', function(cb) { + agent.get('/invalid/url/') + .expect(404, cb); + }); + it('main', function(cb) { + agent.get('/') + .expect(200) + .expect('bitcore-node API', cb); + }); + it('blocks', function(cb) { + agent.get('/v1/blocks/') + .expect(200) + .expect({ + 'message': 'This is a mocked response' + }, cb); + }); + +}); diff --git a/package.json b/package.json index 3c30ed6e..dce6461a 100644 --- a/package.json +++ b/package.json @@ -80,6 +80,7 @@ "chai": "*", "gulp": "^3.8.10", "should": "^2.1.1", - "sinon": "^1.10.3" + "sinon": "^1.10.3", + "supertest": "^0.15.0" } } diff --git a/test/mocha.opts b/test/mocha.opts new file mode 100644 index 00000000..4bb7852a --- /dev/null +++ b/test/mocha.opts @@ -0,0 +1,4 @@ +test/ +api/test +--recursive +-R spec