fix Docker build status invalid response data bug (#8392)

closes #6235
This commit is contained in:
Paula Barszcz
2022-09-11 21:53:54 +02:00
committed by GitHub
parent d8c825a1ad
commit f6b09e9ca3
6 changed files with 51 additions and 7 deletions

View File

@@ -28,6 +28,12 @@ export default class DockerCloudAutomatedBuild extends BaseJsonService {
async handle({ user, repo }) {
const data = await fetchBuild(this, { user, repo })
if (data.objects.length === 0) {
return this.constructor.render({
buildSettings: [],
})
}
return this.constructor.render({
buildSettings: data.objects[0].build_settings,
})

View File

@@ -5,13 +5,29 @@ export const t = await createServiceTester()
const isAutomatedBuildStatus = Joi.string().valid('automated', 'manual')
t.create('docker cloud automated build (valid, user)')
.get('/jrottenberg/ffmpeg.json')
t.create('docker cloud automated build (valid user)')
.get('/pavics/magpie.json')
.expectBadge({
label: 'docker build',
message: isAutomatedBuildStatus,
})
t.create('docker cloud automated build status (invalid, nonexisting user)')
.get('/pavicsssss/magpie.json')
.expectBadge({
label: 'docker build',
message: `manual`,
})
t.create(
`docker cloud build status (valid user, but the 'objects' array from the response is empty)`
)
.get('/pavics/weaver.json')
.expectBadge({
label: 'docker build',
message: `manual`,
})
t.create('docker cloud automated build (not found)')
.get('/badges/not-a-real-repo.json')
.intercept(nock =>

View File

@@ -1,4 +1,4 @@
import { BaseJsonService } from '../index.js'
import { BaseJsonService, NotFound } from '../index.js'
import { dockerBlue, buildDockerUrl } from './docker-helpers.js'
import { fetchBuild } from './docker-cloud-common-fetch.js'
@@ -31,6 +31,12 @@ export default class DockerCloudBuild extends BaseJsonService {
async handle({ user, repo }) {
const data = await fetchBuild(this, { user, repo })
if (data.objects.length === 0) {
throw new NotFound({
prettyMessage: `automated builds not set up`,
})
}
return this.constructor.render({ state: data.objects[0].state })
}
}

View File

@@ -3,13 +3,29 @@ import { createServiceTester } from '../tester.js'
import { dockerBlue } from './docker-helpers.js'
export const t = await createServiceTester()
t.create('docker cloud build status (valid, user)')
.get('/jrottenberg/ffmpeg.json')
t.create('docker cloud build status (valid user)')
.get('/pavics/magpie.json')
.expectBadge({
label: 'docker build',
message: isBuildStatus,
})
t.create('docker cloud build status (invalid, nonexisting user)')
.get('/pavicsssss/magpie.json')
.expectBadge({
label: 'docker build',
message: `automated builds not set up`,
})
t.create(
`docker cloud build status (valid user, but the 'objects' array from the response is empty)`
)
.get('/pavics/weaver.json')
.expectBadge({
label: 'docker build',
message: `automated builds not set up`,
})
t.create('docker cloud build status (not found)')
.get('/badges/not-a-real-repo.json')
.intercept(nock =>

View File

@@ -6,7 +6,7 @@ const cloudBuildSchema = Joi.object({
Joi.object({
state: Joi.string(),
build_settings: Joi.array(),
}).required()
})
)
.required(),
}).required()

View File

@@ -39,5 +39,5 @@ t.create('docker version (invalid, unknown repository)')
.get('/_/not-a-real-repo.json')
.expectBadge({
label: 'version',
message: 'repository not found',
message: 'repository or tag not found',
})