From 66c678e0dd901d7c02f15193d7bd22035efbdc90 Mon Sep 17 00:00:00 2001 From: Pyves Date: Fri, 13 Jul 2018 09:21:02 +0100 Subject: [PATCH] [appveyor bitbucket buildkite circleci codeship continuousphp docker readthedocs scrutinizer shippable travis] Extracted isBuildStatus test validator (#1767) --- services/appveyor/appveyor.tester.js | 6 +++--- services/bitbucket/bitbucket.tester.js | 5 +++-- services/buildkite/buildkite.tester.js | 5 +++-- services/circleci/circleci.tester.js | 2 +- services/codeship/codeship.tester.js | 3 +-- services/continuousphp/continuousphp.tester.js | 5 +++-- services/docker/docker.tester.js | 2 +- services/readthedocs/readthedocs.tester.js | 7 ++++--- services/scrutinizer/scrutinizer.tester.js | 6 +++--- services/shippable/shippable.tester.js | 3 +-- services/test-validators.js | 7 ++++++- services/travis/travis.tester.js | 13 ++++++++----- 12 files changed, 37 insertions(+), 27 deletions(-) diff --git a/services/appveyor/appveyor.tester.js b/services/appveyor/appveyor.tester.js index d3812d1659..5e2299e14d 100644 --- a/services/appveyor/appveyor.tester.js +++ b/services/appveyor/appveyor.tester.js @@ -3,7 +3,7 @@ const Joi = require('joi'); const ServiceTester = require('../service-tester'); -const isAppveyorBuildState = Joi.equal('failing', 'passing', 'running', 'queued'); +const { isBuildStatus } = require('../test-validators'); const isAppveyorTestTotals = Joi.string().regex(/^(?:[0-9]+ (?:passed|skipped|failed)(?:, )?)+$/); @@ -13,12 +13,12 @@ module.exports = t; // Test AppVeyor build status badge t.create('CI build status') .get('/ci/gruntjs/grunt.json') - .expectJSONTypes(Joi.object().keys({ name: 'build', value: isAppveyorBuildState })); + .expectJSONTypes(Joi.object().keys({ name: 'build', value: isBuildStatus })); // Test AppVeyor branch build status badge t.create('CI build status on master branch') .get('/ci/gruntjs/grunt/master.json') - .expectJSONTypes(Joi.object().keys({ name: 'build', value: isAppveyorBuildState })); + .expectJSONTypes(Joi.object().keys({ name: 'build', value: isBuildStatus })); // Test AppVeyor build status badge on a non-existing project t.create('CI 404') diff --git a/services/bitbucket/bitbucket.tester.js b/services/bitbucket/bitbucket.tester.js index 4d2d4b81c6..90553f20aa 100644 --- a/services/bitbucket/bitbucket.tester.js +++ b/services/bitbucket/bitbucket.tester.js @@ -3,6 +3,7 @@ const Joi = require('joi'); const ServiceTester = require('../service-tester'); const { + isBuildStatus, isMetric, isMetricOpenIssues } = require('../test-validators'); @@ -121,7 +122,7 @@ t.create('master build result (valid)') .get('/pipelines/atlassian/adf-builder-javascript.json') .expectJSONTypes(Joi.object().keys({ name: 'build', - value: Joi.equal('failing', 'passing', 'error', 'stopped', 'expired') + value: isBuildStatus })); t.create('master build result (not found)') @@ -132,7 +133,7 @@ t.create('branch build result (valid)') .get('/pipelines/atlassian/adf-builder-javascript/shields-test-dont-remove.json') .expectJSONTypes(Joi.object().keys({ name: 'build', - value: Joi.equal('failing', 'passing', 'error', 'stopped', 'expired') + value: isBuildStatus })); t.create('branch build result (not found)') diff --git a/services/buildkite/buildkite.tester.js b/services/buildkite/buildkite.tester.js index de1da3e3ce..8ff31cdd39 100644 --- a/services/buildkite/buildkite.tester.js +++ b/services/buildkite/buildkite.tester.js @@ -4,6 +4,7 @@ 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; t.create('buildkite invalid pipeline') @@ -14,14 +15,14 @@ t.create('buildkite valid pipeline') .get('/3826789cf8890b426057e6fe1c4e683bdf04fa24d498885489/master.json') .expectJSONTypes(Joi.object().keys({ name: 'build', - value: Joi.equal('failing', 'passing', 'unknown') + value: Joi.alternatives().try(isBuildStatus, Joi.equal('unknown')) })); t.create('buildkite valid pipeline skipping branch') .get('/3826789cf8890b426057e6fe1c4e683bdf04fa24d498885489.json') .expectJSONTypes(Joi.object().keys({ name: 'build', - value: Joi.equal('failing', 'passing', 'unknown') + value: Joi.alternatives().try(isBuildStatus, Joi.equal('unknown')) })); t.create('buildkite unknown branch') diff --git a/services/circleci/circleci.tester.js b/services/circleci/circleci.tester.js index 595db2d663..1e55435f04 100644 --- a/services/circleci/circleci.tester.js +++ b/services/circleci/circleci.tester.js @@ -3,7 +3,7 @@ const Joi = require('joi'); const ServiceTester = require('../service-tester'); const { invalidJSON } = require('../response-fixtures'); -const isBuildStatus = Joi.string().regex(/^(passing|failed|no tests|scheduled|not run)$/); +const { isBuildStatus } = require('../test-validators'); const t = new ServiceTester({ id: 'circleci', title: 'Circle CI' }); module.exports = t; diff --git a/services/codeship/codeship.tester.js b/services/codeship/codeship.tester.js index 790b6a8276..fae9d71432 100644 --- a/services/codeship/codeship.tester.js +++ b/services/codeship/codeship.tester.js @@ -2,8 +2,7 @@ const Joi = require('joi'); const ServiceTester = require('../service-tester'); - -const isBuildStatus = Joi.string().regex(/^(passing|pending|failing|not built)$/); +const { isBuildStatus } = require('../test-validators'); const t = new ServiceTester({ id: 'codeship', title: 'codeship' }); module.exports = t; diff --git a/services/continuousphp/continuousphp.tester.js b/services/continuousphp/continuousphp.tester.js index e4f34fe13b..d3cd85b974 100644 --- a/services/continuousphp/continuousphp.tester.js +++ b/services/continuousphp/continuousphp.tester.js @@ -2,6 +2,7 @@ const Joi = require('joi'); const ServiceTester = require('../service-tester'); +const { isBuildStatus } = require('../test-validators'); const t = new ServiceTester({ id: 'continuousphp', title: 'continuousphp' }); module.exports = t; @@ -10,14 +11,14 @@ t.create('build status on default branch') .get('/git-hub/doctrine/dbal.json') .expectJSONTypes(Joi.object().keys({ name: 'build', - value: Joi.equal('failing', 'passing', 'unknown', 'unstable') + value: Joi.alternatives().try(isBuildStatus, Joi.equal('unknown')), })); t.create('build status on named branch') .get('/git-hub/doctrine/dbal/develop.json') .expectJSONTypes(Joi.object().keys({ name: 'build', - value: Joi.equal('failing', 'passing', 'unknown') + value: Joi.alternatives().try(isBuildStatus, Joi.equal('unknown')), })); t.create('unknown repo') diff --git a/services/docker/docker.tester.js b/services/docker/docker.tester.js index 9b0a682edd..2f8c75e557 100644 --- a/services/docker/docker.tester.js +++ b/services/docker/docker.tester.js @@ -7,8 +7,8 @@ const mapValues = require('lodash.mapvalues'); const { isMetric } = require('../test-validators'); const { invalidJSON } = require('../response-fixtures'); +const { isBuildStatus } = require('../test-validators'); const isAutomatedBuildStatus = Joi.string().valid('automated', 'manual'); -const isBuildStatus = Joi.string().regex(/^(passing|failing|building)$/); const colorsB = mapValues(colorscheme, 'colorB'); const t = new ServiceTester({ id: 'docker', title: 'Docker Hub' }); diff --git a/services/readthedocs/readthedocs.tester.js b/services/readthedocs/readthedocs.tester.js index 915fa69bd8..e024a2679a 100644 --- a/services/readthedocs/readthedocs.tester.js +++ b/services/readthedocs/readthedocs.tester.js @@ -2,6 +2,7 @@ const Joi = require('joi'); const ServiceTester = require('../service-tester'); +const { isBuildStatus } = require('../test-validators'); const t = new ServiceTester({ id: 'readthedocs', title: 'Read the Docs' }) module.exports = t; @@ -10,21 +11,21 @@ t.create('build status') .get('/pip.json') .expectJSONTypes(Joi.object().keys({ name: 'docs', - value: Joi.equal('failing', 'passing', 'unknown') + value: Joi.alternatives().try(isBuildStatus, Joi.equal('unknown')), })); t.create('build status for named version') .get('/pip/stable.json') .expectJSONTypes(Joi.object().keys({ name: 'docs', - value: Joi.equal('failing', 'passing', 'unknown') + value: Joi.alternatives().try(isBuildStatus, Joi.equal('unknown')), })); t.create('build status for named semantic version') .get('/scrapy/1.0.json') .expectJSONTypes(Joi.object().keys({ name: 'docs', - value: Joi.equal('failing', 'passing', 'unknown') + value: Joi.alternatives().try(isBuildStatus, Joi.equal('unknown')), })); t.create('unknown project') diff --git a/services/scrutinizer/scrutinizer.tester.js b/services/scrutinizer/scrutinizer.tester.js index c1ea54d4ed..c8199574eb 100644 --- a/services/scrutinizer/scrutinizer.tester.js +++ b/services/scrutinizer/scrutinizer.tester.js @@ -3,9 +3,9 @@ const Joi = require('joi'); const ServiceTester = require('../service-tester'); const { + isBuildStatus, isIntegerPercentage } = require('../test-validators'); -const isBuildStatus = Joi.string().regex(/^(passing|failed|error|pending|unknown)$/); const t = new ServiceTester({ id: 'scrutinizer', title: 'Scrutinizer' }); module.exports = t; @@ -42,14 +42,14 @@ t.create('build') .get('/build/g/filp/whoops.json') .expectJSONTypes(Joi.object().keys({ name: 'build', - value: isBuildStatus, + value: Joi.alternatives().try(isBuildStatus, Joi.equal('unknown')), })); t.create('build (branch)') .get('/build/g/phpmyadmin/phpmyadmin/master.json') .expectJSONTypes(Joi.object().keys({ name: 'build', - value: isBuildStatus, + value: Joi.alternatives().try(isBuildStatus, Joi.equal('unknown')), })); t.create('project not found') diff --git a/services/shippable/shippable.tester.js b/services/shippable/shippable.tester.js index 1af20165bd..0ccf7ee157 100644 --- a/services/shippable/shippable.tester.js +++ b/services/shippable/shippable.tester.js @@ -3,8 +3,7 @@ const Joi = require('joi'); const ServiceTester = require('../service-tester'); const { invalidJSON } = require('../response-fixtures'); - -const isBuildStatus = Joi.string().regex(/^(waiting|queued|processing|success|skipped|unstable|timeout|cancelled|failed|stopped)$/); +const { isBuildStatus } = require('../test-validators'); const t = new ServiceTester({ id: 'shippable', title: 'Shippable CI' }); module.exports = t; diff --git a/services/test-validators.js b/services/test-validators.js index c990a2fc07..9211f24e37 100644 --- a/services/test-validators.js +++ b/services/test-validators.js @@ -69,6 +69,10 @@ const isFormattedDate = Joi.alternatives().try( const isDependencyState = withRegex(/^(\d+ out of date|\d+ deprecated|up to date)$/); +const isBuildStatus = Joi.equal('building', 'cancelled', 'error', 'expired', 'failed', 'failing', 'no tests', + 'not built', 'not run', 'passing', 'pending', 'processing', 'queued', 'running', + 'scheduled', 'skipped', 'stopped', 'success', 'timeout', 'unstable', 'waiting'); + module.exports = { isSemver, isVPlusTripleDottedVersion, @@ -86,5 +90,6 @@ module.exports = { isDecimalPercentage, isFileSize, isFormattedDate, - isDependencyState + isDependencyState, + isBuildStatus, }; diff --git a/services/travis/travis.tester.js b/services/travis/travis.tester.js index 39aa1ac4ac..d7fb9b1fa2 100644 --- a/services/travis/travis.tester.js +++ b/services/travis/travis.tester.js @@ -2,7 +2,10 @@ const Joi = require('joi'); const ServiceTester = require('../service-tester'); -const {isPhpVersionReduction} = require('../test-validators'); +const { + isBuildStatus, + isPhpVersionReduction +} = require('../test-validators'); const t = new ServiceTester({ id: 'travis', title: 'Travis CI/PHP version from .travis.yml' }); module.exports = t; @@ -13,14 +16,14 @@ t.create('build status on default branch') .get('/rust-lang/rust.json') .expectJSONTypes(Joi.object().keys({ name: 'build', - value: Joi.equal('failing', 'passing', 'unknown') + value: Joi.alternatives().try(isBuildStatus, Joi.equal('unknown')), })); t.create('build status on named branch') .get('/rust-lang/rust/stable.json') .expectJSONTypes(Joi.object().keys({ name: 'build', - value: Joi.equal('failing', 'passing', 'unknown') + value: Joi.alternatives().try(isBuildStatus, Joi.equal('unknown')), })); t.create('unknown repo') @@ -45,14 +48,14 @@ t.create('build status on default branch') .get('/com/ivandelabeldad/rackian-gateway.json') .expectJSONTypes(Joi.object().keys({ name: 'build', - value: Joi.equal('failing', 'passing', 'unknown') + value: Joi.alternatives().try(isBuildStatus, Joi.equal('unknown')), })); t.create('build status on named branch') .get('/com/ivandelabeldad/rackian-gateway.json') .expectJSONTypes(Joi.object().keys({ name: 'build', - value: Joi.equal('failing', 'passing', 'unknown') + value: Joi.alternatives().try(isBuildStatus, Joi.equal('unknown')), })); t.create('unknown repo')