-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Reduce boilerplate for creating new testers [npm appveyor gem uptimer…
…obot 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.
- Loading branch information
1 parent
452affb
commit a0c43ed
Showing
24 changed files
with
629 additions
and
531 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
'use strict' | ||
|
||
const Joi = require('joi') | ||
const createServiceTester = require('../create-service-tester') | ||
|
||
const { isBuildStatus } = require('../test-validators') | ||
|
||
const t = createServiceTester() | ||
module.exports = t | ||
|
||
// Test AppVeyor build status badge | ||
t.create('CI build status') | ||
.get('/gruntjs/grunt.json') | ||
.expectJSONTypes(Joi.object().keys({ name: 'build', value: isBuildStatus })) | ||
|
||
// Test AppVeyor branch build status badge | ||
t.create('CI build status on master branch') | ||
.get('/gruntjs/grunt/master.json') | ||
.expectJSONTypes(Joi.object().keys({ name: 'build', value: isBuildStatus })) | ||
|
||
// Test AppVeyor build status badge on a non-existing project | ||
t.create('CI 404') | ||
.get('/somerandomproject/thatdoesntexits.json') | ||
.expectJSON({ name: 'build', value: 'project not found or access denied' }) | ||
|
||
t.create('CI (connection error)') | ||
.get('/this-one/is-not-real-either.json') | ||
.networkOff() | ||
.expectJSON({ name: 'build', value: 'inaccessible' }) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
'use strict' | ||
|
||
const Joi = require('joi') | ||
const createServiceTester = require('../create-service-tester') | ||
|
||
const isAppveyorTestTotals = Joi.string().regex( | ||
/^(?:[0-9]+ (?:passed|skipped|failed)(?:, )?)+$/ | ||
) | ||
|
||
const t = createServiceTester() | ||
module.exports = t | ||
|
||
// Test AppVeyor tests status badge | ||
t.create('tests status') | ||
.get('/NZSmartie/coap-net-iu0to.json') | ||
.expectJSONTypes( | ||
Joi.object().keys({ name: 'tests', value: isAppveyorTestTotals }) | ||
) | ||
|
||
// Test AppVeyor branch tests status badge | ||
t.create('tests status on master branch') | ||
.get('/NZSmartie/coap-net-iu0to/master.json') | ||
.expectJSONTypes( | ||
Joi.object().keys({ name: 'tests', value: isAppveyorTestTotals }) | ||
) | ||
|
||
// Test AppVeyor tests status badge for a non-existing project | ||
t.create('tests 404') | ||
.get('/somerandomproject/thatdoesntexits.json') | ||
.expectJSON({ name: 'tests', value: 'project not found or access denied' }) |
This file was deleted.
Oops, something went wrong.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
'use strict' | ||
|
||
const caller = require('caller') | ||
const ServiceTester = require('./service-tester') | ||
const BaseService = require('./base') | ||
|
||
// Automatically create a ServiceTester. When run from e.g. | ||
// `gem-rank.tester.js`, this will create a tester that attaches to the | ||
// service found in `gem-rank.service.js`. | ||
// | ||
// This can't be used for `.service.js` files which export more than one | ||
// service. | ||
function createServiceTester() { | ||
const servicePath = caller().replace('.tester.js', '.service.js') | ||
let ServiceClass | ||
try { | ||
ServiceClass = require(servicePath) | ||
} catch (e) { | ||
throw Error(`Couldn't load service from ${servicePath}`) | ||
} | ||
if (!(ServiceClass.prototype instanceof BaseService)) { | ||
throw Error( | ||
`${servicePath} does not export a single service. Invoke new ServiceTester() directly.` | ||
) | ||
} | ||
return ServiceTester.forServiceClass(ServiceClass) | ||
} | ||
|
||
module.exports = createServiceTester |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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' }) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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' }) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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' }) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.