Refactor [AzureDevOpsCoverage AzureDevOpsTests] to only report on completed builds; test all [azuredevops] (#2549)

This is in response to [this conversation](https://github.com/badges/shields/issues/2237#issuecomment-446812796). The change turned out being even easier than I had anticipated because the [API supports a buildStatus filter](https://docs.microsoft.com/en-us/rest/api/azure/devops/build/builds/list?view=azure-devops-rest-5.0#buildstatus). I did quite a bit of local testing to make sure this is solid. I also ran tests and checked coverage.
This commit is contained in:
Dean Davidson
2018-12-17 20:12:52 -08:00
committed by Paul Melnikow
parent 6c9fc0de79
commit b0fbe5f76f
5 changed files with 14 additions and 13 deletions

View File

@@ -15,7 +15,7 @@ const latestBuildSchema = Joi.object({
.required(),
}).required()
module.exports = class BaseAzureDevOpsService extends BaseJsonService {
module.exports = class AzureDevOpsBase extends BaseJsonService {
async fetch({ url, options, schema, errorMessages }) {
return this._requestJson({
schema,
@@ -25,7 +25,7 @@ module.exports = class BaseAzureDevOpsService extends BaseJsonService {
})
}
async getLatestBuildId(
async getLatestCompletedBuildId(
organization,
project,
definitionId,
@@ -39,6 +39,7 @@ module.exports = class BaseAzureDevOpsService extends BaseJsonService {
qs: {
definitions: definitionId,
$top: 1,
statusFilter: 'completed',
'api-version': '5.0-preview.4',
},
headers,

View File

@@ -1,7 +1,7 @@
'use strict'
const Joi = require('joi')
const BaseAzureDevOpsService = require('./azure-devops-base')
const AzureDevOpsBase = require('./azure-devops-base')
const { keywords, getHeaders } = require('./azure-devops-helpers')
const documentation = `
@@ -47,7 +47,7 @@ const buildCodeCoverageSchema = Joi.object({
.required(),
}).required()
module.exports = class AzureDevOpsCoverage extends BaseAzureDevOpsService {
module.exports = class AzureDevOpsCoverage extends AzureDevOpsBase {
static render({ coverage }) {
return {
message: `${coverage.toFixed(0)}%`,
@@ -106,7 +106,7 @@ module.exports = class AzureDevOpsCoverage extends BaseAzureDevOpsService {
const errorMessages = {
404: 'build pipeline or coverage not found',
}
const buildId = await this.getLatestBuildId(
const buildId = await this.getLatestCompletedBuildId(
organization,
project,
definitionId,

View File

@@ -13,7 +13,7 @@ const buildId = 946
const uriPrefix = `/${org}/${project}`
const azureDevOpsApiBaseUri = `https://dev.azure.com/${org}/${project}/_apis`
const mockBadgeUriPath = `${uriPrefix}/${macDefinitionId}.json`
const mockLatestBuildApiUriPath = `/build/builds?definitions=${macDefinitionId}&%24top=1&api-version=5.0-preview.4`
const mockLatestBuildApiUriPath = `/build/builds?definitions=${macDefinitionId}&%24top=1&statusFilter=completed&api-version=5.0-preview.4`
const mockCodeCoverageApiUriPath = `/test/codecoverage?buildId=${buildId}&api-version=5.0-preview.1`
const latestBuildResponse = {
count: 1,
@@ -94,7 +94,7 @@ t.create('no build response')
.intercept(nock =>
nock(azureDevOpsApiBaseUri)
.get(
`/build/builds?definitions=${nonExistentDefinitionId}&%24top=1&api-version=5.0-preview.4`
`/build/builds?definitions=${nonExistentDefinitionId}&%24top=1&statusFilter=completed&api-version=5.0-preview.4`
)
.reply(200, {
count: 0,

View File

@@ -1,7 +1,7 @@
'use strict'
const Joi = require('joi')
const BaseAzureDevOpsService = require('./azure-devops-base')
const AzureDevOpsBase = require('./azure-devops-base')
const { getHeaders } = require('./azure-devops-helpers')
const { renderTestResultBadge } = require('../../lib/text-formatters')
@@ -56,7 +56,7 @@ const buildTestResultSummarySchema = Joi.object({
}).required(),
}).required()
module.exports = class AzureDevOpsTests extends BaseAzureDevOpsService {
module.exports = class AzureDevOpsTests extends AzureDevOpsBase {
static render({
passed,
failed,
@@ -200,7 +200,7 @@ module.exports = class AzureDevOpsTests extends BaseAzureDevOpsService {
const errorMessages = {
404: 'build pipeline or test result summary not found',
}
const buildId = await this.getLatestBuildId(
const buildId = await this.getLatestCompletedBuildId(
organization,
project,
definitionId,

View File

@@ -12,9 +12,9 @@ const azureDevOpsApiBaseUri = `https://dev.azure.com/${org}/${project}/_apis`
const mockBadgeUriPath = `${uriPrefix}/${definitionId}`
const mockBadgeUri = `${mockBadgeUriPath}.json`
const mockBranchBadgeUri = `${mockBadgeUriPath}/master.json`
const mockLatestBuildApiUriPath = `/build/builds?definitions=${definitionId}&%24top=1&api-version=5.0-preview.4`
const mockLatestBranchBuildApiUriPath = `/build/builds?definitions=${definitionId}&%24top=1&api-version=5.0-preview.4&branch=master`
const mockNonExistentBuildApiUriPath = `/build/builds?definitions=${nonExistentDefinitionId}&%24top=1&api-version=5.0-preview.4`
const mockLatestBuildApiUriPath = `/build/builds?definitions=${definitionId}&%24top=1&statusFilter=completed&api-version=5.0-preview.4`
const mockLatestBranchBuildApiUriPath = `/build/builds?definitions=${definitionId}&%24top=1&statusFilter=completed&api-version=5.0-preview.4&branch=master`
const mockNonExistentBuildApiUriPath = `/build/builds?definitions=${nonExistentDefinitionId}&%24top=1&statusFilter=completed&api-version=5.0-preview.4`
const mockTestResultSummaryApiUriPath = `/test/ResultSummaryByBuild?buildId=${buildId}`
const latestBuildResponse = {
count: 1,