[librariesio] Missing try/catch block and tests (#1644)
This commit is contained in:
79
server.js
79
server.js
@@ -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);
|
||||
});
|
||||
}));
|
||||
|
||||
|
||||
41
services/librariesio/librariesio.tester.js
Normal file
41
services/librariesio/librariesio.tester.js
Normal 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',
|
||||
});
|
||||
@@ -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
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user