From f6b09e9ca3d09a833474f55e22f7ed01eeb3fe8a Mon Sep 17 00:00:00 2001 From: Paula Barszcz <paula.anna.barszcz@gmail.com> Date: Sun, 11 Sep 2022 21:53:54 +0200 Subject: [PATCH] fix Docker build status invalid response data bug (#8392) closes #6235 --- .../docker/docker-cloud-automated.service.js | 6 ++++++ .../docker/docker-cloud-automated.tester.js | 20 +++++++++++++++++-- services/docker/docker-cloud-build.service.js | 8 +++++++- services/docker/docker-cloud-build.tester.js | 20 +++++++++++++++++-- services/docker/docker-cloud-common-fetch.js | 2 +- services/docker/docker-version.tester.js | 2 +- 6 files changed, 51 insertions(+), 7 deletions(-) diff --git a/services/docker/docker-cloud-automated.service.js b/services/docker/docker-cloud-automated.service.js index a4692a6435..55da8e9fe7 100644 --- a/services/docker/docker-cloud-automated.service.js +++ b/services/docker/docker-cloud-automated.service.js @@ -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, }) diff --git a/services/docker/docker-cloud-automated.tester.js b/services/docker/docker-cloud-automated.tester.js index 936451900d..25e3614876 100644 --- a/services/docker/docker-cloud-automated.tester.js +++ b/services/docker/docker-cloud-automated.tester.js @@ -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 => diff --git a/services/docker/docker-cloud-build.service.js b/services/docker/docker-cloud-build.service.js index 8fd3aa8b45..22ec6f5d4f 100644 --- a/services/docker/docker-cloud-build.service.js +++ b/services/docker/docker-cloud-build.service.js @@ -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 }) } } diff --git a/services/docker/docker-cloud-build.tester.js b/services/docker/docker-cloud-build.tester.js index 9335af2501..1f874d5879 100644 --- a/services/docker/docker-cloud-build.tester.js +++ b/services/docker/docker-cloud-build.tester.js @@ -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 => diff --git a/services/docker/docker-cloud-common-fetch.js b/services/docker/docker-cloud-common-fetch.js index f0047cb576..26204daee5 100644 --- a/services/docker/docker-cloud-common-fetch.js +++ b/services/docker/docker-cloud-common-fetch.js @@ -6,7 +6,7 @@ const cloudBuildSchema = Joi.object({ Joi.object({ state: Joi.string(), build_settings: Joi.array(), - }).required() + }) ) .required(), }).required() diff --git a/services/docker/docker-version.tester.js b/services/docker/docker-version.tester.js index fe13f28594..c737cb8abe 100644 --- a/services/docker/docker-version.tester.js +++ b/services/docker/docker-version.tester.js @@ -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', }) -- GitLab