test error handling in fetching process

This commit is contained in:
Ivan Socolsky 2016-01-11 16:36:51 -03:00
parent aa415268fc
commit 8d6d545139
2 changed files with 39 additions and 4 deletions

View File

@ -68,11 +68,13 @@ FiatRateService.prototype._fetch = function(cb) {
async.each(self.providers, function(provider, next) { async.each(self.providers, function(provider, next) {
self._retrieve(provider, function(err, res) { self._retrieve(provider, function(err, res) {
if (err) { if (err) {
log.warn(err); log.warn('Error retrieving data for ' + provider.name, err);
return next(); return next();
} }
self.storage.storeFiatRate(provider.name, res, function(err) { self.storage.storeFiatRate(provider.name, res, function(err) {
if (err) log.warn(err); if (err) {
log.warn('Error storing data for ' + provider.name, err);
}
return next(); return next();
}); });
}); });
@ -88,14 +90,13 @@ FiatRateService.prototype._retrieve = function(provider, cb) {
json: true, json: true,
}, function(err, res, body) { }, function(err, res, body) {
if (err || !body) { if (err || !body) {
log.warn('Error fetching data for ' + provider.name, err);
return cb(err); return cb(err);
} }
log.debug('Data for ' + provider.name + ' fetched successfully'); log.debug('Data for ' + provider.name + ' fetched successfully');
if (!provider.parseFn) { if (!provider.parseFn) {
return cb('No parse function for provider ' + provider.name); return cb(new Error('No parse function for provider ' + provider.name));
} }
var rates = provider.parseFn(body); var rates = provider.parseFn(body);

View File

@ -209,5 +209,39 @@ describe('Fiat rate service', function() {
}); });
}); });
}); });
it('should not stop when failing to fetch provider', function(done) {
var clock = sinon.useFakeTimers(100, 'Date');
var bitstamp = {
last: 120.00,
};
request.get.withArgs({
url: 'https://bitpay.com/api/rates/',
json: true
}).yields('dummy error', null, null);
request.get.withArgs({
url: 'https://www.bitstamp.net/api/ticker/',
json: true
}).yields(null, null, bitstamp);
service._fetch(function(err) {
should.not.exist(err);
service.getRate('USD', {}, function(err, res) {
should.not.exist(err);
res.ts.should.equal(100);
should.not.exist(res.rate)
should.not.exist(res.fetchedOn)
service.getRate('USD', {
provider: 'Bitstamp'
}, function(err, res) {
should.not.exist(err);
res.fetchedOn.should.equal(100);
res.rate.should.equal(120.00);
clock.restore();
done();
});
});
});
});
}); });
}); });