'use strict'; const Joi = require('joi'); const ServiceTester = require('../service-tester'); const { isVPlusDottedVersionAtLeastOne } = require('../test-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: 'dependencies', 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 (not found)') .get('-deps/v/not-a-package.json') .expectJSON({name: 'dependencies', 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: 'dependencies', 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'});