Skip to content

Commit

Permalink
Unify and minimize tester boilerplate (#2472)
Browse files Browse the repository at this point in the history
I started using this one-line boilerplate a while back and it seems to tidy things up a bit.
  • Loading branch information
paulmelnikow authored Dec 8, 2018
1 parent 3f9ef53 commit 8a8311d
Show file tree
Hide file tree
Showing 103 changed files with 236 additions and 275 deletions.
10 changes: 3 additions & 7 deletions doc/service-tests.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,17 +38,13 @@ We'll start by adding some boilerplate to our file:
```js
'use strict'

const Joi = require('joi') // 1
const Joi = require('joi') // 1

const createServiceTester = require('../create-service-tester') // 2
const t = createServiceTester() // 2

module.exports = t // 3
const t = (module.exports = require('../create-service-tester')()) // 2
```

1. Import [Joi][] We'll use this to make assertions. This is the same library we use to define schema for validation in the main badge class.
2. If our `.service.js` module exports a single class, we can `require('../create-service-tester')` and use convention to create a `ServiceTester` object. Calling `createServiceTester()` inside `services/wercker/wercker.tester.js` will create a `ServiceTester` object configured for the service exported in `services/wercker/wercker.service.js`. We will add our tests to this `ServiceTester` object `t`.
3. `t` is exported from the module.
2. If our `.service.js` module exports a single class, we can `require('../create-service-tester')` and use convention to create a `ServiceTester` object. Calling this inside `services/wercker/wercker.tester.js` will create a `ServiceTester` object configured for the service exported in `services/wercker/wercker.service.js`. We will add our tests to this `ServiceTester` object `t`, which is exported from the module.

### (2) Our First Test Case

Expand Down
6 changes: 4 additions & 2 deletions services/amo/amo.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ const {
isVPlusDottedVersionAtLeastOne,
} = require('../test-validators')

const t = new ServiceTester({ id: 'amo', title: 'Mozilla Addons' })
module.exports = t
const t = (module.exports = new ServiceTester({
id: 'amo',
title: 'Mozilla Addons',
}))

t.create('Downloads')
.get('/d/IndieGala-Helper.json')
Expand Down
6 changes: 4 additions & 2 deletions services/ansible/ansible.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ const Joi = require('joi')
const ServiceTester = require('../service-tester')
const { isMetric } = require('../test-validators')

const t = new ServiceTester({ id: 'ansible', title: 'Ansible Galaxy' })
module.exports = t
const t = (module.exports = new ServiceTester({
id: 'ansible',
title: 'Ansible Galaxy',
}))

t.create('role name (valid)')
.get('/role/14542.json')
Expand Down
7 changes: 5 additions & 2 deletions services/apm/apm.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@

const Joi = require('joi')
const ServiceTester = require('../service-tester')
const t = new ServiceTester({ id: 'apm', title: 'Atom Package Manager' })
const { invalidJSON } = require('../response-fixtures')
const { isMetric, isVPlusTripleDottedVersion } = require('../test-validators')
module.exports = t

const t = (module.exports = new ServiceTester({
id: 'apm',
title: 'Atom Package Manager',
}))

t.create('Downloads')
.get('/dm/vim-mode.json')
Expand Down
5 changes: 1 addition & 4 deletions services/appveyor/appveyor-ci.tester.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
'use strict'

const Joi = require('joi')
const createServiceTester = require('../create-service-tester')

const { isBuildStatus } = require('../test-validators')

const t = createServiceTester()
module.exports = t
const t = (module.exports = require('../create-service-tester')())

t.create('CI status')
.get('/gruntjs/grunt.json')
Expand Down
4 changes: 1 addition & 3 deletions services/appveyor/appveyor-tests.tester.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
'use strict'

const Joi = require('joi')
const createServiceTester = require('../create-service-tester')

const isAppveyorTestTotals = Joi.string().regex(
/^(?:[0-9]+ (?:passed|skipped|failed)(?:, )?)+$/
Expand All @@ -19,8 +18,7 @@ const isCompactCustomAppveyorTestTotals = Joi.string().regex(
/^(?:[0-9]* ?(?:💃|🤦‍♀️|🤷) ?[0-9]*(?:, | \| )?)+$/
)

const t = createServiceTester()
module.exports = t
const t = (module.exports = require('../create-service-tester')())

t.create('Test status')
.get('/NZSmartie/coap-net-iu0to.json')
Expand Down
6 changes: 4 additions & 2 deletions services/aur/aur.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@ const {
isMetric,
} = require('../test-validators')

const t = new ServiceTester({ id: 'aur', title: 'Arch Linux AUR' })
module.exports = t
const t = (module.exports = new ServiceTester({
id: 'aur',
title: 'Arch Linux AUR',
}))

// version tests

Expand Down
4 changes: 2 additions & 2 deletions services/azure-devops/azure-devops-build.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

const Joi = require('joi')
const { isBuildStatus } = require('../test-validators')
const t = require('../create-service-tester')()
module.exports = t

// https://dev.azure.com/totodem/Shields.io is a public Azure DevOps project
// solely created for Shields.io testing.

const t = (module.exports = require('../create-service-tester')())

t.create('default branch')
.get(
'/azure-devops/build/totodem/8cf3ec0e-d0c2-4fcd-8206-ad204f254a96/2.json'
Expand Down
4 changes: 2 additions & 2 deletions services/azure-devops/azure-devops-coverage.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

const Joi = require('joi')
const { isIntegerPercentage } = require('../test-validators')
const t = require('../create-service-tester')()
module.exports = t

const org = 'swellaby'
const project = 'opensource'
Expand Down Expand Up @@ -55,6 +53,8 @@ const secondLinesCovStat = {
const expCoverageSingleReport = '83%'
const expCoverageMultipleReports = '77%'

const t = (module.exports = require('../create-service-tester')())

t.create('default branch coverage')
.get(`${uriPrefix}/${linuxDefinitionId}.json`)
.expectJSONTypes(
Expand Down
4 changes: 2 additions & 2 deletions services/azure-devops/azure-devops-release.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

const Joi = require('joi')
const { isBuildStatus } = require('../test-validators')
const t = require('../create-service-tester')()
module.exports = t

// https://dev.azure.com/totodem/Shields.io is a public Azure DevOps project
// solely created for Shields.io testing.

const t = (module.exports = require('../create-service-tester')())

t.create('release status is succeeded')
.get(
'/azure-devops/release/totodem/8cf3ec0e-d0c2-4fcd-8206-ad204f254a96/1/1.json'
Expand Down
4 changes: 2 additions & 2 deletions services/azure-devops/azure-devops-tests.tester.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
'use strict'

const Joi = require('joi')
const t = require('../create-service-tester')()
module.exports = t

const org = 'azuredevops-powershell'
const project = 'azuredevops-powershell'
Expand Down Expand Up @@ -115,6 +113,8 @@ const isCompactCustomAzureDevOpsTestTotals = isAzureDevOpsTestTotals(
true
)

const t = (module.exports = require('../create-service-tester')())

t.create('unknown build definition')
.get(`${uriPrefix}/${nonExistentDefinitionId}.json`)
.expectJSON({ name: 'tests', value: 'build pipeline not found' })
Expand Down
5 changes: 2 additions & 3 deletions services/beerpay/beerpay.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@
const Joi = require('joi')
const { withRegex } = require('../test-validators')

const t = require('../create-service-tester')()
module.exports = t

const amountOfMoney = withRegex(/^\$[0-9]+(\.[0-9]+)?/)

const t = (module.exports = require('../create-service-tester')())

t.create('funding')
.get('/hashdog/scrapfy-chrome-extension.json')
.expectJSONTypes(
Expand Down
3 changes: 1 addition & 2 deletions services/bintray/bintray.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ const {
isVPlusDottedVersionNClausesWithOptionalSuffix,
} = require('../test-validators')

const t = require('../create-service-tester')()
module.exports = t
const t = (module.exports = require('../create-service-tester')())

t.create('version')
.get('/asciidoctor/maven/asciidoctorj.json')
Expand Down
6 changes: 4 additions & 2 deletions services/bitbucket/bitbucket.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ const {
isMetricOpenIssues,
} = require('../test-validators')

const t = new ServiceTester({ id: 'bitbucket', title: 'Bitbucket badges' })
module.exports = t
const t = (module.exports = new ServiceTester({
id: 'bitbucket',
title: 'Bitbucket badges',
}))

// tests for issues endpoints

Expand Down
6 changes: 4 additions & 2 deletions services/bithound/bithound.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

const ServiceTester = require('../service-tester')

const t = new ServiceTester({ id: 'bithound', title: 'BitHound' })
module.exports = t
const t = (module.exports = new ServiceTester({
id: 'bithound',
title: 'BitHound',
}))

t.create('no longer available (code)')
.get('/code/github/rexxars/sse-channel.json')
Expand Down
6 changes: 4 additions & 2 deletions services/bitrise/bitrise.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
const Joi = require('joi')
const ServiceTester = require('../service-tester')

const t = new ServiceTester({ id: 'bitrise', title: 'Bitrise' })
module.exports = t
const t = (module.exports = new ServiceTester({
id: 'bitrise',
title: 'Bitrise',
}))

t.create('deploy status')
.get('/cde737473028420d/master.json?token=GCIdEzacE4GW32jLVrZb7A')
Expand Down
6 changes: 4 additions & 2 deletions services/bountysource/bountysource.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ const Joi = require('joi')
const ServiceTester = require('../service-tester')
const { invalidJSON } = require('../response-fixtures')

const t = new ServiceTester({ id: 'bountysource', title: 'Bountysource' })
module.exports = t
const t = (module.exports = new ServiceTester({
id: 'bountysource',
title: 'Bountysource',
}))

t.create('bounties (valid)')
.get('/team/mozilla-core/activity.json')
Expand Down
3 changes: 1 addition & 2 deletions services/bower/bower.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ const isBowerPrereleaseVersion = Joi.string().regex(
/^v\d+(\.\d+)?(\.\d+)?(-?[.\w\d])+?$/
)

const t = new ServiceTester({ id: 'bower', title: 'Bower' })
module.exports = t
const t = (module.exports = new ServiceTester({ id: 'bower', title: 'Bower' }))

t.create('licence')
.get('/l/bootstrap.json')
Expand Down
6 changes: 4 additions & 2 deletions services/bugzilla/bugzilla.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@ const bzBugStatus = Joi.equal(
'incomplete'
)

const t = new ServiceTester({ id: 'bugzilla', title: 'Bugzilla' })
module.exports = t
const t = (module.exports = new ServiceTester({
id: 'bugzilla',
title: 'Bugzilla',
}))

t.create('Bugzilla valid bug status')
.get('/996038.json')
Expand Down
7 changes: 5 additions & 2 deletions services/buildkite/buildkite.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@

const Joi = require('joi')
const ServiceTester = require('../service-tester')
const t = new ServiceTester({ id: 'buildkite', title: 'Buildkite Builds' })
const { invalidJSON } = require('../response-fixtures')
const { isBuildStatus } = require('../test-validators')
module.exports = t

const t = (module.exports = new ServiceTester({
id: 'buildkite',
title: 'Buildkite Builds',
}))

t.create('buildkite invalid pipeline')
.get('/unknown-identifier/unknown-branch.json')
Expand Down
6 changes: 2 additions & 4 deletions services/bundlephobia/bundlephobia.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,10 @@ const Joi = require('joi')
const ServiceTester = require('../service-tester')
const { isFileSize } = require('../test-validators')

const t = new ServiceTester({
const t = (module.exports = new ServiceTester({
id: 'bundlephobia',
title: 'NPM package bundle size',
})

module.exports = t
}))

const formats = {
A: '/bundlephobia/:type/:package.:format',
Expand Down
6 changes: 4 additions & 2 deletions services/cauditor/cauditor.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

const ServiceTester = require('../service-tester')

const t = new ServiceTester({ id: 'cauditor', title: 'Cauditor' })
module.exports = t
const t = (module.exports = new ServiceTester({
id: 'cauditor',
title: 'Cauditor',
}))

t.create('no longer available')
.get('/mi/matthiasmullie/scrapbook/master.json?style=_shields_test')
Expand Down
4 changes: 1 addition & 3 deletions services/cdnjs/cdnjs.tester.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
'use strict'

const Joi = require('joi')
const createServiceTester = require('../create-service-tester')
const { isVPlusTripleDottedVersion } = require('../test-validators')

const t = createServiceTester()
module.exports = t
const t = (module.exports = require('../create-service-tester')())

t.create('cdnjs (valid)')
.get('/jquery.json')
Expand Down
6 changes: 4 additions & 2 deletions services/chocolatey/chocolatey.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@ const {
} = require('../nuget-fixtures')
const { invalidJSON } = require('../response-fixtures')

const t = new ServiceTester({ id: 'chocolatey', title: 'Chocolatey' })
module.exports = t
const t = (module.exports = new ServiceTester({
id: 'chocolatey',
title: 'Chocolatey',
}))

// downloads

Expand Down
5 changes: 2 additions & 3 deletions services/chrome-web-store/chrome-web-store.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,10 @@ const {
isMetric,
} = require('../test-validators')

const t = new ServiceTester({
const t = (module.exports = new ServiceTester({
id: 'chrome-web-store',
title: 'Chrome Web Store',
})
module.exports = t
}))

t.create('Downloads (now users)')
.get('/d/alhjnofcnnpeaphgeakdhkebafjcpeae.json')
Expand Down
6 changes: 4 additions & 2 deletions services/circleci/circleci.tester.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ const Joi = require('joi')
const ServiceTester = require('../service-tester')
const { isBuildStatus } = require('../test-validators')

const t = new ServiceTester({ id: 'circleci', title: 'Circle CI' })
module.exports = t
const t = (module.exports = new ServiceTester({
id: 'circleci',
title: 'Circle CI',
}))

t.create('circle ci (valid, without branch)')
.get('/project/github/RedSparr0w/node-csgo-parser.json')
Expand Down
4 changes: 1 addition & 3 deletions services/clojars/clojars-downloads.tester.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
'use strict'

const Joi = require('joi')
const createServiceTester = require('../create-service-tester')
const { isMetric } = require('../test-validators')

const t = createServiceTester()
module.exports = t
const t = (module.exports = require('../create-service-tester')())

t.create('clojars downloads (valid)')
.get('/prismic.json')
Expand Down
4 changes: 1 addition & 3 deletions services/clojars/clojars-version.tester.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
'use strict'

const Joi = require('joi')
const createServiceTester = require('../create-service-tester')

const t = createServiceTester()
module.exports = t
const t = (module.exports = require('../create-service-tester')())

t.create('clojars (valid)')
.get('/prismic.json')
Expand Down
Loading

0 comments on commit 8a8311d

Please sign in to comment.