Skip to content

Commit

Permalink
mozillascience#26 refactroing all the badges read endpoints + IT
Browse files Browse the repository at this point in the history
  • Loading branch information
aid29 committed Jun 18, 2015
1 parent 7213aa6 commit 06075ec
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 157 deletions.
166 changes: 19 additions & 147 deletions src/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -121,20 +121,25 @@ module.exports = function (badgerService) {
response.status(400).end();
return;
}
returnBadges(badgerService.getBadgeInstances(orcid, request.params.badge), request, response);
returnBadges(badgerService.getBadges(orcid, request.params.badge), request, response);
});
// app.get('/users/:orcid/badges/:badge', function (request, response) {

/* Get badges for a paper */

// THIS DOES NOT WORK!!
// Get all badge instances for a paper.
// app.get('/papers/:doi1/:doi2/badges', function (request, response) {
// var pretty = request.query.pretty;
// // get all badge instances for the user. Is there a more efficient way to do this?
// var orcid = request.params.orcid,
// filtered;
// if (!orcid) {
// if (!request.params.doi1 || !request.params.doi2) {
// response.status(400).end();
// return;
// }
// var evidenceUrl = helpers.urlFromDOI(request.params.doi1 + '/' + request.params.doi2),
// filtered;
// // get all badge instances for the user. Is there a more efficient way to do this?
// client.getBadgeInstances({
// system: system
// }, helpers.emailFromORCID(orcid), function (err, badges) {
// }, function (err, badges) {
// if (err) {
// console.error(err);
// response.send(err);
Expand All @@ -143,7 +148,8 @@ module.exports = function (badgerService) {
// // filter for the badge
// if (badges) {
// filtered = badges.filter(function (entry) {
// return (entry.badge.slug === request.params.badge) ? helpers.modEntry(entry, orcid) : false;
// var orcid = helpers.ORCIDFromEmail(entry.email);
// return (entry.evidenceUrl === evidenceUrl) ? helpers.modEntry(entry, orcid) : false;
// });
// }
// if (filtered && filtered.length === 0) {
Expand All @@ -160,165 +166,31 @@ module.exports = function (badgerService) {
// });
// });

/* Get badges for a paper */

// THIS DOES NOT WORK!!
// Get all badge instances for a paper.
app.get('/papers/:doi1/:doi2/badges', function (request, response) {
var pretty = request.query.pretty;
if (!request.params.doi1 || !request.params.doi2) {
response.status(400).end();
return;
}
var evidenceUrl = helpers.urlFromDOI(request.params.doi1 + '/' + request.params.doi2),
filtered;
// get all badge instances for the user. Is there a more efficient way to do this?
client.getBadgeInstances({
system: system
}, function (err, badges) {
if (err) {
console.error(err);
response.send(err);
return;
}
// filter for the badge
if (badges) {
filtered = badges.filter(function (entry) {
var orcid = helpers.ORCIDFromEmail(entry.email);
return (entry.evidenceUrl === evidenceUrl) ? helpers.modEntry(entry, orcid) : false;
});
}
if (filtered && filtered.length === 0) {
response.status(404).end();
} else {
if (pretty) {
response.render(path.join(__dirname, '..', '/public/code.jade'), {
data: JSON.stringify(filtered, null, 2)
});
} else {
response.send(filtered);
}
}
});
});

// Get all badge instances of a certain badge for a paper. NOTE: inefficiently filters for doi afterwards
app.get('/papers/:doi1/:doi2/badges/:badge', function (request, response) {
var pretty = request.query.pretty;
app.get('/papers/:doi1/:doi2/badges/:badge', function (request, response) {
if (!request.params.doi1 || !request.params.doi2) {
response.status(400).end();
return;
}
var evidenceUrl = helpers.urlFromDOI(request.params.doi1 + '/' + request.params.doi2),
filtered;
// get all badge instances for the user. Is there a more efficient way to do this?
client.getBadgeInstances({
system: system,
badge: request.params.badge
}, function (err, badges) {
if (err) {
console.error(err);
response.send(err);
return;
}
// filter for the badge
if (badges) {
filtered = badges.filter(function (entry) {
var orcid = helpers.ORCIDFromEmail(entry.email);
return (entry.evidenceUrl === evidenceUrl) ? helpers.modEntry(entry, orcid) : false;
});
}
if (filtered && filtered.length === 0) {
response.status(404).end();
} else {
if (pretty) {
response.render(path.join(__dirname, '..', '/public/code.jade'), {
data: JSON.stringify(filtered, null, 2)
});
} else {
response.send(filtered);
}
}
});
returnBadges(badgerService.getBadges(null, request.params.badge, {'_1':request.params.doi1 , '_2':request.params.doi2}), request, response);
});

// Get all badge instances earned by a user for a paper.
app.get('/papers/:doi1/:doi2/:badges/:orcid/badges', function (request, response) {
var pretty = request.query.pretty;
if (!request.params.doi1 || !request.params.doi2 || !request.params.orcid) {
response.status(400).end();
return;
}
var orcid = request.params.orcid,
evidenceUrl = helpers.urlFromDOI(request.params.doi1 + '/' + request.params.doi2),
filtered;
// get all badge instances for the user. Is there a more efficient way to do this?
client.getBadgeInstances({
system: system
}, helpers.emailFromORCID(orcid), function (err, badges) {
if (err) {
console.error(err);
response.send(err);
return;
}
// filter for the badge
if (badges) {
filtered = badges.filter(function (entry) {
return (entry.evidenceUrl === evidenceUrl) ? helpers.modEntry(entry, orcid) : false;
});
}
if (filtered && filtered.length === 0) {
response.status(404).end();
} else {
if (pretty) {
response.render(path.join(__dirname, '..', '/public/code.jade'), {
data: JSON.stringify(filtered, null, 2)
});
} else {
response.send(filtered);
}
}
});
returnBadges(badgerService.getBadges(request.params.orcid, null, {'_1':request.params.doi1 , '_2':request.params.doi2}), request, response);
});

// Get all badge instances of a certain badge earned by a user for a paper.
app.get('/papers/:doi1/:doi2/users/:orcid/badges/:badge', function (request, response) {
var pretty = request.query.pretty;
if (!request.params.doi1 || !request.params.doi2 || !request.params.orcid) {
if (!request.params.doi1 || !request.params.doi2 || !request.params.orcid || !request.params.badge) {
response.status(400).end();
return;
}
var orcid = request.params.orcid,
evidenceUrl = helpers.urlFromDOI(request.params.doi1 + '/' + request.params.doi2),
filtered;
// get all badge instances for the user. Is there a more efficient way to do this?
client.getBadgeInstances({
system: system
}, helpers.emailFromORCID(orcid), function (err, badges) {
if (err) {
console.error(err);
response.send(err);
return;
}
// filter for the doi & badge
if (badges) {
filtered = badges.filter(function (entry) {
return ((entry.evidenceUrl === evidenceUrl) && (entry.badge.slug === request.params.badge)) ?
helpers.modEntry(entry, orcid) : false;
});
}
if (filtered && filtered.length === 0) {
response.status(404).end();
} else {
if (pretty) {
response.render(path.join(__dirname, '..', '/public/code.jade'), {
data: JSON.stringify(filtered, null, 2)
});
} else {
response.send(filtered);
}
}
});
returnBadges(badgerService.getBadges(request.params.orcid, request.params.badge, {'_1':request.params.doi1 , '_2':request.params.doi2}), request, response);
});

// Create a badge instance -- need to add auth around this
Expand Down
8 changes: 4 additions & 4 deletions src/badgeService.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
module.exports = function (apiClient, config) {
var system = config.BADGES_SYSTEM;
var helpers = require('./helpers');
var helpers = require('./helpers');

function _getBadges(orcid, badge, dois) {
return function (callback) {
// var evidenceUrl = dois ? helpers.urlFromDOI(dois._1 + '/' + dois._2) : null;
var evidenceUrl = dois ? helpers.urlFromDOI(dois._1 + '/' + dois._2) : null;
var clientCallback = function (err, badges) {
if (err) {
console.error(err);
Expand All @@ -15,8 +15,8 @@ module.exports = function (apiClient, config) {
if (badges) {
filtered = badges.filter(function (entry) {
var goodBadge = (!badge || entry.badge.slug === badge);
// var goodDoi = (dois === null || entry.evidenceUrl === evidenceUrl);
return goodBadge;
var goodDoi = (!dois || entry.evidenceUrl === evidenceUrl);
return goodBadge && goodDoi;
});

filtered.forEach(function (entry) {
Expand Down
58 changes: 52 additions & 6 deletions test/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ describe("Intergration test against the real Badge server", function () {
.get('/badges')
.expect('Content-Type', /json/)
.expect(function (res) {
assert.ok(res.body[0].slug, "find one badge slug");
assert.ok(res.body[0].slug, "not find badge slug in json");
})
.expect(200, done);
});
Expand All @@ -34,8 +34,8 @@ describe("Intergration test against the real Badge server", function () {
.get('/badges/formal_analysis')
.expect('Content-Type', /json/)
.expect(function (res) {
assert.equal(res.body[0].badge.name, "Formal analysis");
assert.equal(res.body[0].orcid, "0000-0003-4959-3049");
assert.ok(res.body[0].slug, "not find badge slug in json");
assert.equal(res.body[0].badge.name, "Formal analysis");
//assert.equal(res.body[0].email, null); ?? bug??
})
.expect(200, done);
Expand All @@ -44,13 +44,59 @@ describe("Intergration test against the real Badge server", function () {
it('get all badge instances earned by a user', function (done) {
request(app)
.get('/users/0000-0003-4959-3049/badges')
// .expect('Content-Type', /json/)
.expect('Content-Type', /json/)
.expect(function (res) {
assert.ok(res.body[0].slug, "not find one badge slug in json");
assert.equal(res.body[0].orcid, "0000-0003-4959-3049");
})
.expect(200, done);
});

it('get all badge instances of a certain badge earned by a user', function (done) {
request(app)
.get('/users/0000-0003-4959-3049/badges/writing_review')
.expect(function (res) {
assert.ok(res.body[0].slug, "not find one badge slug in json");
assert.equal(res.body[0].badge.name, 'Writing - review & editing');
assert.equal(res.body[0].orcid, '0000-0003-4959-3049');
})
.expect(200, done);
});

it('get all badge instances of a certain badge for a paper.', function (done) {
request(app)
.get('/papers/10.1371/journal.pbio.1002126/badges/investigation')
.expect(function (res) {
// console.log("badgesreturn:" + JSON.stringify(res.body, null, 2));
assert.ok(res.body[0].slug, "find one badge slug");
assert.equal(res.body[0].orcid, "0000-0003-4959-3049");
assert.ok(res.body[0].slug, "not find one badge slug in json");
assert.equal(res.body[0].badge.name, 'Investigation');
assert.equal(res.body[0].evidenceUrl, 'http://dx.doi.org/10.1371/journal.pbio.1002126');
})
.expect(200, done);
});

it('get all badge instances earned by a user for a paper.', function (done) {
request(app)
.get('/papers/10.1371/journal.pbio.1002126/users/0000-0003-4959-3049/badges')
.expect(function (res) {
// console.log("badgesreturn:" + JSON.stringify(res.body, null, 2));
assert.ok(res.body[0].slug, "not find one badge slug in json");
assert.equal(res.body[0].orcid, '0000-0003-4959-3049');
assert.equal(res.body[0].evidenceUrl, 'http://dx.doi.org/10.1371/journal.pbio.1002126');
})
.expect(200, done);
});

it('get all badge instances of a certain badge earned by a user for a paper.', function (done) {
request(app)
.get('/papers/10.1371/journal.pbio.1002126/users/0000-0003-4959-3049/badges/investigation')
.expect(function (res) {
// console.log("badgesreturn:" + JSON.stringify(res.body, null, 2));
assert.ok(res.body[0].slug, "not find one badge slug in json");
assert.equal(res.body[0].badge.name, 'Investigation');
assert.equal(res.body[0].orcid, '0000-0003-4959-3049');
assert.equal(res.body[0].evidenceUrl, 'http://dx.doi.org/10.1371/journal.pbio.1002126');
})
.expect(200, done);
});
});

0 comments on commit 06075ec

Please sign in to comment.