Skip to content

Commit

Permalink
Use promised request in triplemining module
Browse files Browse the repository at this point in the history
  • Loading branch information
selaux committed May 13, 2014
1 parent c6e74c3 commit b1e8f58
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 86 deletions.
46 changes: 11 additions & 35 deletions lib/modules/revenue/triplemining.js
@@ -1,9 +1,7 @@
'use strict';

var async = require('async'),
request = require('request'),
_ = require('lodash'),

var Bluebird = require('bluebird'),
request = require('../../utils/request'),
setWithHistoricalData = require('../../utils/setWithHistoricalData'),
Module = require('../../Module');

Expand Down Expand Up @@ -43,47 +41,25 @@ module.exports = Module.extend({
updateTripleminingData: function () {
var self = this;

async.parallel([
function (callback) {
request({
uri: 'https://api.triplemining.com/json/stats',
json: true
}, function (err, res) { callback(err, res); });
},
function (callback) {
request({
uri: 'https://api.triplemining.com/json/' + self.config.apiKey,
json: true
}, function (err, res) { callback(err, res); });
}
], function (err, responses) {
Bluebird.all([
request('https://api.triplemining.com/json/stats'),
request('https://api.triplemining.com/json/' + self.config.apiKey)
]).then(function (responses) {
/*jshint sub:true*/

var allRequestsSucceeded;

if (err) {
self.app.logger.info('%s - error fetching revenue estimate from triplemining', self.id, err);
return;
}

self.app.logger.debug(
'%s - fetched revenue estimate from triplemining',
self.id,
JSON.stringify(_.pluck(responses, 'statusCode')),
JSON.stringify(_.pluck(responses, 'body'))
JSON.stringify(responses)
);
allRequestsSucceeded = _.all(responses, function (res) {
return res.statusCode === 200;
});
if (!allRequestsSucceeded) {
return;
}

self.tripleminingData = {
hashrate: responses[0].body.hashrate * 1e3,
estimatedPayout: responses[1].body['estimated_payout']
hashrate: responses[0].hashrate * 1e3,
estimatedPayout: responses[1]['estimated_payout']
};
self.calculateRevenue();
}).catch(function (err) {
self.app.logger.info('%s - error fetching revenue estimate from triplemining', self.id, err.toString());
});
},

Expand Down
84 changes: 33 additions & 51 deletions test/specs/lib/modules/revenue/tripleminingSpec.js
Expand Up @@ -7,9 +7,9 @@ var EventEmitter = require('events').EventEmitter,
sinonChai = require('sinon-chai'),
expect = chai.expect,
SandboxedModule = require('sandboxed-module'),
Bluebird = require('bluebird'),
_ = require('lodash'),

responses = {},
technicalData = {
probability: 1
},
Expand All @@ -22,17 +22,14 @@ var EventEmitter = require('events').EventEmitter,
},
userResponse = {
'estimated_payout': 4.0000
},
Triplemining = SandboxedModule.require('../../../../../lib/modules/revenue/triplemining', {
requires: {
request: require('../../../../utils/requestStub')(responses)
}
});
};

chai.use(sinonChai);

describe('modules/revenue/triplemining', function () {
var app,
var Triplemining,
requestStub,
app,
config = {
apiKey: 'someApiKey',
worker: 'testWorker',
Expand All @@ -41,14 +38,14 @@ describe('modules/revenue/triplemining', function () {
};

beforeEach(function () {
responses['https://api.triplemining.com/json/stats'] = {
statusCode: 200,
body: poolResponse
};
responses['https://api.triplemining.com/json/someApiKey'] = {
statusCode: 200,
body: userResponse
};
requestStub = sinon.stub();
requestStub.withArgs('https://api.triplemining.com/json/stats').returns(Bluebird.resolve(poolResponse));
requestStub.withArgs('https://api.triplemining.com/json/someApiKey').returns(Bluebird.resolve(userResponse));
Triplemining = SandboxedModule.require('../../../../../lib/modules/revenue/triplemining', {
requires: {
'../../utils/request': requestStub
}
});
app = new EventEmitter();
app.logger = { debug: sinon.stub(), info: sinon.stub() };
});
Expand All @@ -60,19 +57,20 @@ describe('modules/revenue/triplemining', function () {
triplemining.marketData = marketData;

triplemining.on('change', function () {
expect(_.omit(triplemining.toJSON(), 'historicalData')).to.deep.equal({
value: 2073600000 * 1e6,
currency: 'NMC',
interval: 'Day'
setImmediate(function () {
expect(_.omit(triplemining.toJSON(), 'historicalData')).to.deep.equal({
value: 2073600000 * 1e6,
currency: 'NMC',
interval: 'Day'
});
expect(app.logger.debug).to.have.been.calledOnce;
expect(app.logger.debug).to.have.been.calledWith(
'%s - fetched revenue estimate from triplemining',
triplemining.id,
JSON.stringify([ poolResponse, userResponse ])
);
done();
});
expect(app.logger.debug).to.have.been.calledOnce;
expect(app.logger.debug).to.have.been.calledWith(
'%s - fetched revenue estimate from triplemining',
triplemining.id,
JSON.stringify([ 200, 200 ]),
JSON.stringify([ poolResponse, userResponse ])
);
done();
});
});

Expand Down Expand Up @@ -133,38 +131,22 @@ describe('modules/revenue/triplemining', function () {
'https://api.triplemining.com/json/someApiKey'
].forEach(function (url) {
it('should not throw an error if the request to ' + url + 'fails with an error', function (done) {
var triplemining;

responses[url] = null;

triplemining = new Triplemining(app);
triplemining.technicalData = technicalData;
triplemining.marketData = marketData;

setTimeout(function () {
expect(triplemining.toJSON()).to.be.empty;
done();
}, 50);
});

it('should not throw an error if the request to ' + url + 'returns a non 200 http status code and no data', function (done) {
var triplemining;
var error = new Error('Test Error'),
triplemining;

responses[url] = {
statusCode: 500,
body: 'Internal Server Error'
};
requestStub.withArgs(url).returns(Bluebird.reject(error));

triplemining = new Triplemining(app);
triplemining = new Triplemining(app, { apiKey: 'someApiKey' });
triplemining.technicalData = technicalData;
triplemining.marketData = marketData;

setTimeout(function () {
expect(triplemining.toJSON()).to.be.empty;
expect(app.logger.info).to.have.been.calledOnce;
expect(app.logger.info).to.have.been.calledWith('%s - error fetching revenue estimate from triplemining', triplemining.id, error.toString());
done();
}, 50);
}, 10);
});

});

it('should have the title set to Earnings if no title is specified in config', function () {
Expand Down

0 comments on commit b1e8f58

Please sign in to comment.