Skip to content

Commit

Permalink
add tests for hackage, handle 'not found'
Browse files Browse the repository at this point in the history
  • Loading branch information
chris48s committed Jan 3, 2018
1 parent 9cb9d59 commit 4c36f73
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 2 deletions.
4 changes: 2 additions & 2 deletions server.js
Original file line number Diff line number Diff line change
Expand Up @@ -3399,11 +3399,11 @@ cache(function(data, match, sendBadge, request) {
var apiUrl = 'https://hackage.haskell.org/package/' + repo + '/' + repo + '.cabal';
var badgeData = getBadgeData('hackage', data);
request(apiUrl, function(err, res, buffer) {
if (err != null) {
badgeData.text[1] = 'inaccessible';
if (checkErrorResponse(badgeData, err, res)) {
sendBadge(format, badgeData);
return;
}

try {
var lines = buffer.split("\n");
var versionLines = lines.filter(function(e) {
Expand Down
46 changes: 46 additions & 0 deletions service-tests/hackage.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
'use strict';

const Joi = require('joi');
const ServiceTester = require('./runner/service-tester');

const { isVPlusDottedVersionAtLeastOne } = require('./helpers/validators');

const t = new ServiceTester({ id: 'hackage', title: 'Hackage' });
module.exports = t;


t.create('hackage version (valid)')
.get('/v/lens.json')
.expectJSONTypes(Joi.object().keys({
name: 'hackage',
value: isVPlusDottedVersionAtLeastOne,
}));

t.create('hackage deps (valid)')
.get('-deps/v/lens.json')
.expectJSONTypes(Joi.object().keys({
name: 'hackage-deps',
value: Joi.string().regex(/^(up to date|outdated)$/),
}));

t.create('hackage version (not found)')
.get('/v/not-a-package.json')
.expectJSON({name: 'hackage', value: 'not found'});

t.create('hackage version (connection error)')
.get('/v/lens.json')
.networkOff()
.expectJSON({name: 'hackage', value: 'inaccessible'});

t.create('hackage deps (connection error)')
.get('-deps/v/lens.json')
.networkOff()
.expectJSON({name: 'hackage-deps', value: 'inaccessible'});

t.create('hackage version (unexpected response)')
.get('/v/lens.json')
.intercept(nock => nock('https://hackage.haskell.org')
.get('/package/lens/lens.cabal')
.reply(200, "")
)
.expectJSON({name: 'hackage', value: 'invalid'});

0 comments on commit 4c36f73

Please sign in to comment.