Reduce boilerplate for creating new testers [npm appveyor gem uptimerobot clojars] (#1934)

This is a bit of sugar that reduces the boilerplate for creating testers in what I expect will become the standard case: a service in `foo/foo-thing.service.js` with its tests in `foo/foo-thing.tester.js`.

This makes a small stylistic change, which is to name the service by its CamelCase class name rather than an invented snake-case ID. Whereas before the name was specified in `class FooThing extends Base[Json]Service` and a second time in the tester, it now only needs to be specified once.
This commit is contained in:
Paul Melnikow
2018-08-22 18:07:51 -04:00
committed by GitHub
parent 452affba15
commit a0c43ed219
24 changed files with 629 additions and 531 deletions

View File

@@ -3,35 +3,15 @@
const Joi = require('joi')
const ServiceTester = require('../service-tester')
const {
isVPlusDottedVersionAtLeastOne,
isMetric,
} = require('../test-validators')
const isOrdinalNumber = Joi.string().regex(/^[1-9][0-9]+(ᵗʰ|ˢᵗ|ⁿᵈ|ʳᵈ)$/)
const isOrdinalNumberDaily = Joi.string().regex(
/^[1-9][0-9]+(ᵗʰ|ˢᵗ|ⁿᵈ|ʳᵈ) daily$/
)
const { isMetric } = require('../test-validators')
const t = new ServiceTester({ id: 'gem', title: 'Ruby Gems' })
const t = new ServiceTester({
id: 'gem-downloads',
title: 'Ruby Gem Downloads',
pathPrefix: '/gem',
})
module.exports = t
// version endpoint
t.create('version (valid)')
.get('/v/formatador.json')
.expectJSONTypes(
Joi.object().keys({
name: 'gem',
value: isVPlusDottedVersionAtLeastOne,
})
)
t.create('version (not found)')
.get('/v/not-a-package.json')
.expectJSON({ name: 'gem', value: 'not found' })
// downloads endpoints
// total downloads
t.create('total downloads (valid)')
.get('/dt/rails.json')
@@ -90,42 +70,3 @@ t.create('latest version downloads (valid)')
t.create('latest version downloads (not found)')
.get('/dtv/not-a-package.json')
.expectJSON({ name: 'downloads', value: 'not found' })
// users endpoint
t.create('users (valid)')
.get('/u/raphink.json')
.expectJSONTypes(
Joi.object().keys({
name: 'gems',
value: Joi.string().regex(/^[0-9]+$/),
})
)
t.create('users (not found)')
.get('/u/not-a-package.json')
.expectJSON({ name: 'gems', value: 'not found' })
// rank endpoint
t.create('total rank (valid)')
.get('/rt/rspec-puppet-facts.json')
.expectJSONTypes(
Joi.object().keys({
name: 'rank',
value: isOrdinalNumber,
})
)
t.create('daily rank (valid)')
.get('/rd/rspec-puppet-facts.json')
.expectJSONTypes(
Joi.object().keys({
name: 'rank',
value: isOrdinalNumberDaily,
})
)
t.create('rank (not found)')
.get('/rt/not-a-package.json')
.expectJSON({ name: 'rank', value: 'not found' })

View File

@@ -0,0 +1,20 @@
'use strict'
const Joi = require('joi')
const createServiceTester = require('../create-service-tester')
const t = createServiceTester()
module.exports = t
t.create('users (valid)')
.get('/raphink.json')
.expectJSONTypes(
Joi.object().keys({
name: 'gems',
value: Joi.string().regex(/^[0-9]+$/),
})
)
t.create('users (not found)')
.get('/not-a-package.json')
.expectJSON({ name: 'gems', value: 'not found' })

View File

@@ -0,0 +1,34 @@
'use strict'
const Joi = require('joi')
const createServiceTester = require('../create-service-tester')
const isOrdinalNumber = Joi.string().regex(/^[1-9][0-9]+(ᵗʰ|ˢᵗ|ⁿᵈ|ʳᵈ)$/)
const isOrdinalNumberDaily = Joi.string().regex(
/^[1-9][0-9]+(ᵗʰ|ˢᵗ|ⁿᵈ|ʳᵈ) daily$/
)
const t = createServiceTester()
module.exports = t
t.create('total rank (valid)')
.get('/rt/rspec-puppet-facts.json')
.expectJSONTypes(
Joi.object().keys({
name: 'rank',
value: isOrdinalNumber,
})
)
t.create('daily rank (valid)')
.get('/rd/rspec-puppet-facts.json')
.expectJSONTypes(
Joi.object().keys({
name: 'rank',
value: isOrdinalNumberDaily,
})
)
t.create('rank (not found)')
.get('/rt/not-a-package.json')
.expectJSON({ name: 'rank', value: 'not found' })

View File

@@ -0,0 +1,22 @@
'use strict'
const Joi = require('joi')
const createServiceTester = require('../create-service-tester')
const { isVPlusDottedVersionAtLeastOne } = require('../test-validators')
const t = createServiceTester()
module.exports = t
t.create('version (valid)')
.get('/formatador.json')
.expectJSONTypes(
Joi.object().keys({
name: 'gem',
value: isVPlusDottedVersionAtLeastOne,
})
)
t.create('version (not found)')
.get('/not-a-package.json')
.expectJSON({ name: 'gem', value: 'not found' })