[librariesio] Missing try/catch block and tests (#1644)

This commit is contained in:
Pyves
2018-04-14 08:35:47 +01:00
committed by GitHub
parent e1755df212
commit ac13fdb8d4
3 changed files with 87 additions and 38 deletions

View File

@@ -7062,59 +7062,64 @@ cache(function(data, match, sendBadge, request) {
// Libraries.io integration.
camp.route(/^\/librariesio\/(github|release)\/([\w\-_]+\/[\w\-_]+)\/?([\w\-_.]+)?\.(svg|png|gif|jpg|json)$/,
cache(function(data, match, sendBadge, request) {
const resource = match[1];
const project = match[2];
const version = match[3];
const format = match[4];
var resource = match[1];
var project = match[2];
var version = match[3];
var format = match[4];
var uri;
let uri;
switch (resource) {
case 'github':
case 'github': {
uri = 'https://libraries.io/api/github/' + project + '/dependencies';
break;
case 'release':
var v = version || 'latest';
}
case 'release': {
const v = version || 'latest';
uri = 'https://libraries.io/api/' + project + '/' + v + '/dependencies';
break;
}
}
var options = {method: 'GET', json: true, uri: uri};
var badgeData = getBadgeData('dependencies', data);
const options = {method: 'GET', json: true, uri: uri};
const badgeData = getBadgeData('dependencies', data);
request(options, function(err, res, json) {
if (err || res.statusCode !== 200) {
badgeData.text[1] = 'not available';
return sendBadge(format, badgeData);
if (checkErrorResponse(badgeData, err, res, 'not available')) {
sendBadge(format, badgeData);
return;
}
var deprecated = json.dependencies.filter(function(dep) {
return dep.deprecated;
});
try {
const deprecated = json.dependencies.filter(function(dep) {
return dep.deprecated;
});
var outofdate = json.dependencies.filter(function(dep) {
return dep.outdated;
});
const outofdate = json.dependencies.filter(function(dep) {
return dep.outdated;
});
// Deprecated dependencies are really bad
if (deprecated.length > 0) {
badgeData.colorscheme = 'red';
badgeData.text[1] = deprecated.length + ' deprecated';
// Deprecated dependencies are really bad
if (deprecated.length > 0) {
badgeData.colorscheme = 'red';
badgeData.text[1] = deprecated.length + ' deprecated';
return sendBadge(format, badgeData);
}
// Out of date dependencies are pretty bad
if (outofdate.length > 0) {
badgeData.colorscheme = 'orange';
badgeData.text[1] = outofdate.length + ' out of date';
return sendBadge(format, badgeData);
}
// Up to date dependencies are good!
badgeData.colorscheme = 'brightgreen';
badgeData.text[1] = 'up to date';
return sendBadge(format, badgeData);
} catch (e) {
badgeData.text[1] = 'invalid';
sendBadge(format, badgeData);
}
// Out of date dependencies are pretty bad
if (outofdate.length > 0) {
badgeData.colorscheme = 'orange';
badgeData.text[1] = outofdate.length + ' out of date';
return sendBadge(format, badgeData);
}
// Up to date dependencies are good!
badgeData.colorscheme = 'brightgreen';
badgeData.text[1] = 'up to date';
return sendBadge(format, badgeData);
});
}));

View File

@@ -0,0 +1,41 @@
'use strict';
const Joi = require('joi');
const ServiceTester = require('../service-tester');
const {
isDependencyState
} = require('../test-validators');
const t = new ServiceTester({ id: 'librariesio', title: 'Libraries.io' });
module.exports = t;
t.create('dependencies for releases')
.get('/release/hex/phoenix/1.0.3.json')
.expectJSONTypes(Joi.object().keys({
name: 'dependencies',
value: isDependencyState,
}));
t.create('dependencies for github')
.get('/github/pyvesb/notepad4e.json')
.expectJSONTypes(Joi.object().keys({
name: 'dependencies',
value: isDependencyState,
}));
t.create('release not found')
.get('/release/hex/invalid/4.0.4.json')
.expectJSON({
name: 'dependencies',
value: 'not available',
});
t.create('no response data')
.get('/github/phoenixframework/phoenix.json')
.intercept(nock => nock('https://libraries.io')
.get('/api/github/phoenixframework/phoenix/dependencies')
.reply(200))
.expectJSON({
name: 'dependencies',
value: 'invalid',
});

View File

@@ -67,6 +67,8 @@ const isFormattedDate = Joi.alternatives().try(
Joi.string().regex(/^last (sun|mon|tues|wednes|thurs|fri|satur)day$/),
Joi.string().regex(/^(january|february|march|april|may|june|july|august|september|october|november|december)( \d{4})?$/));
const isDependencyState = withRegex(/^(\d+ out of date|\d+ deprecated|up to date)$/);
module.exports = {
isSemver,
isVPlusTripleDottedVersion,
@@ -83,5 +85,6 @@ module.exports = {
isIntegerPercentage,
isDecimalPercentage,
isFileSize,
isFormattedDate
isFormattedDate,
isDependencyState
};