diff --git a/services/base-json.spec.js b/services/base-json.spec.js index bc8ba92a1081525a4b49b667875d33d2205fd7be..41bcc32306afe2c6247277526155c253443fbfbf 100644 --- a/services/base-json.spec.js +++ b/services/base-json.spec.js @@ -109,6 +109,7 @@ describe('BaseJsonService', function() { { handleInternalErrors: false } ) ).to.deep.equal({ + isError: true, color: 'lightgray', message: 'invalid response data', }) @@ -125,6 +126,7 @@ describe('BaseJsonService', function() { { handleInternalErrors: false } ) ).to.deep.equal({ + isError: true, color: 'lightgray', message: 'unparseable json response', }) diff --git a/services/base-svg-scraping.spec.js b/services/base-svg-scraping.spec.js index cfa37b2bcea82147bf956660d44252b1df0dfcd0..da484af58e6964145d0397b37121dbabb3fde757 100644 --- a/services/base-svg-scraping.spec.js +++ b/services/base-svg-scraping.spec.js @@ -157,6 +157,7 @@ describe('BaseSvgScrapingService', function() { { handleInternalErrors: false } ) ).to.deep.equal({ + isError: true, color: 'lightgray', message: 'unparseable svg response', }) diff --git a/services/base-xml.spec.js b/services/base-xml.spec.js index 5c3ad696abc5de5f33672f3755526171d3fce59d..a02ac9709cf2ab49e54ca04ac8361e46bc10f1f9 100644 --- a/services/base-xml.spec.js +++ b/services/base-xml.spec.js @@ -136,6 +136,7 @@ describe('BaseXmlService', function() { { handleInternalErrors: false } ) ).to.deep.equal({ + isError: true, color: 'lightgray', message: 'invalid response data', }) @@ -152,6 +153,7 @@ describe('BaseXmlService', function() { { handleInternalErrors: false } ) ).to.deep.equal({ + isError: true, color: 'lightgray', message: 'unparseable xml response', }) diff --git a/services/base-yaml.spec.js b/services/base-yaml.spec.js index 134236472b894373f39b98395f270d43a6663d20..b7a6be4d25941336286831c64b9df8fa2a41f625 100644 --- a/services/base-yaml.spec.js +++ b/services/base-yaml.spec.js @@ -132,6 +132,7 @@ describe('BaseYamlService', function() { { handleInternalErrors: false } ) ).to.deep.equal({ + isError: true, color: 'lightgray', message: 'invalid response data', }) @@ -148,6 +149,7 @@ describe('BaseYamlService', function() { { handleInternalErrors: false } ) ).to.deep.equal({ + isError: true, color: 'lightgray', message: 'unparseable yaml response', }) diff --git a/services/base.js b/services/base.js index 5b1329529f360d395f5aba0a40b09337e37b0ac9..86aa7f1bbc86a2dead84e37d1cabea98416316ea 100644 --- a/services/base.js +++ b/services/base.js @@ -244,6 +244,7 @@ class BaseService { if (error instanceof NotFound || error instanceof InvalidParameter) { trace.logTrace('outbound', emojic.noGoodWoman, 'Handled error', error) return { + isError: true, message: error.prettyMessage, color: 'red', } @@ -254,6 +255,7 @@ class BaseService { ) { trace.logTrace('outbound', emojic.noGoodWoman, 'Handled error', error) return { + isError: true, message: error.prettyMessage, color: 'lightgray', } @@ -271,6 +273,7 @@ class BaseService { console.log(error) } return { + isError: true, label: 'shields', message: 'internal error', color: 'lightgray', @@ -318,11 +321,12 @@ class BaseService { logoColor: overrideLogoColor, logoWidth: overrideLogoWidth, link: overrideLink, - colorA: overrideColorA, - colorB: overrideColorB, + colorA: overrideLabelColor, + colorB: overrideColor, } = overrides const { + isError, label: serviceLabel, message: serviceMessage, color: serviceColor, @@ -349,9 +353,16 @@ class BaseService { }), logoWidth: +overrideLogoWidth, links: toArray(overrideLink || serviceLink), - colorA: makeColor(overrideColorA), + colorA: makeColor(overrideLabelColor), + } + + let color + if (isError) { + // Disregard the override color. + color = coalesce(serviceColor, defaultColor, 'lightgrey') + } else { + color = coalesce(overrideColor, serviceColor, defaultColor, 'lightgrey') } - const color = overrideColorB || serviceColor || defaultColor || 'lightgrey' setBadgeColor(badgeData, color) return badgeData diff --git a/services/base.spec.js b/services/base.spec.js index f8c954211fbad455e2084e56591bc915c391292f..7de1269aff20dbd6e08ded3f984ac38658fb0eaa 100644 --- a/services/base.spec.js +++ b/services/base.spec.js @@ -260,6 +260,7 @@ describe('BaseService', function() { { namedParamA: 'bar.bar.bar' } ) ).to.deep.equal({ + isError: true, color: 'lightgray', label: 'shields', message: 'internal error', @@ -276,6 +277,7 @@ describe('BaseService', function() { expect( await ThrowingService.invoke({}, {}, { namedParamA: 'bar.bar.bar' }) ).to.deep.equal({ + isError: true, color: 'red', message: 'not found', }) @@ -290,6 +292,7 @@ describe('BaseService', function() { expect( await ThrowingService.invoke({}, {}, { namedParamA: 'bar.bar.bar' }) ).to.deep.equal({ + isError: true, color: 'lightgray', message: 'inaccessible', }) @@ -304,6 +307,7 @@ describe('BaseService', function() { expect( await ThrowingService.invoke({}, {}, { namedParamA: 'bar.bar.bar' }) ).to.deep.equal({ + isError: true, color: 'lightgray', message: 'invalid', }) @@ -318,6 +322,7 @@ describe('BaseService', function() { expect( await ThrowingService.invoke({}, {}, { namedParamA: 'bar.bar.bar' }) ).to.deep.equal({ + isError: true, color: 'lightgray', message: 'no longer available', }) @@ -332,6 +337,7 @@ describe('BaseService', function() { expect( await ThrowingService.invoke({}, {}, { namedParamA: 'bar.bar.bar' }) ).to.deep.equal({ + isError: true, color: 'red', message: 'invalid parameter', }) @@ -357,7 +363,7 @@ describe('BaseService', function() { expect(badgeData.colorA).to.equal('#42f483') }) - it('overrides the colorB', function() { + it('overrides the color', function() { const badgeData = DummyService._makeBadgeData( { colorB: '10ADED' }, { color: 'red' } @@ -365,6 +371,15 @@ describe('BaseService', function() { expect(badgeData.colorB).to.equal('#10ADED') }) + it('does not override the color in case of an error', function() { + const badgeData = DummyService._makeBadgeData( + { colorB: '10ADED' }, + { isError: true, color: 'lightgray' } + ) + expect(badgeData.colorB).to.be.undefined + expect(badgeData.colorscheme).to.equal('lightgray') + }) + it('overrides the logo', function() { const expLogo = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iMTIgMTIgNDAgNDAiPgo8cGF0aCBmaWxsPSIjMzMzMzMzIiBkPSJNMzIsMTMuNGMtMTAuNSwwLTE5LDguNS0xOSwxOWMwLDguNCw1LjUsMTUuNSwxMywxOGMxLDAuMiwxLjMtMC40LDEuMy0wLjljMC0wLjUsMC0xLjcsMC0zLjIgYy01LjMsMS4xLTYuNC0yLjYtNi40LTIuNkMyMCw0MS42LDE4LjgsNDEsMTguOCw0MWMtMS43LTEuMiwwLjEtMS4xLDAuMS0xLjFjMS45LDAuMSwyLjksMiwyLjksMmMxLjcsMi45LDQuNSwyLjEsNS41LDEuNiBjMC4yLTEuMiwwLjctMi4xLDEuMi0yLjZjLTQuMi0wLjUtOC43LTIuMS04LjctOS40YzAtMi4xLDAuNy0zLjcsMi01LjFjLTAuMi0wLjUtMC44LTIuNCwwLjItNWMwLDAsMS42LTAuNSw1LjIsMiBjMS41LTAuNCwzLjEtMC43LDQuOC0wLjdjMS42LDAsMy4zLDAuMiw0LjcsMC43YzMuNi0yLjQsNS4yLTIsNS4yLTJjMSwyLjYsMC40LDQuNiwwLjIsNWMxLjIsMS4zLDIsMywyLDUuMWMwLDcuMy00LjUsOC45LTguNyw5LjQgYzAuNywwLjYsMS4zLDEuNywxLjMsMy41YzAsMi42LDAsNC42LDAsNS4yYzAsMC41LDAuNCwxLjEsMS4zLDAuOWM3LjUtMi42LDEzLTkuNywxMy0xOC4xQzUxLDIxLjksNDIuNSwxMy40LDMyLDEzLjR6Ii8+Cjwvc3ZnPgo=' diff --git a/services/dynamic/dynamic-json.tester.js b/services/dynamic/dynamic-json.tester.js index 93fb7835f743648fbf4fd55edf6beb1350662839..1370b61527ff584718cfa81324e92f23c72f830a 100644 --- a/services/dynamic/dynamic-json.tester.js +++ b/services/dynamic/dynamic-json.tester.js @@ -129,14 +129,13 @@ t.create('JSON from url | error color overrides default') colorB: colorsB.red, }) -// FIXME This is a regression which should be fixed in BaseService. -// t.create('JSON from url | error color overrides user specified') -// .get('.json?query=$.version&colorB=10ADED&style=_shields_test') -// .expectJSON({ -// name: 'custom badge', -// value: 'invalid query parameter: url', -// colorB: colorsB.red, -// }) +t.create('JSON from url | error color overrides user specified') + .get('.json?query=$.version&colorB=10ADED&style=_shields_test') + .expectJSON({ + name: 'custom badge', + value: 'invalid query parameter: url', + colorB: colorsB.red, + }) let headers t.create('JSON from url | request should set Accept header') diff --git a/services/dynamic/dynamic-xml.tester.js b/services/dynamic/dynamic-xml.tester.js index 2690931b1a3ecd22ec7f9b2b50f86d7e7a7ebf5f..ecd567bf5515e2140675187a1a540e0a90085d80 100644 --- a/services/dynamic/dynamic-xml.tester.js +++ b/services/dynamic/dynamic-xml.tester.js @@ -131,25 +131,23 @@ t.create('XML from url | user color overrides default') colorB: '#10ADED', }) -// bug: https://github.com/badges/shields/issues/1446 -// t.create('XML from url | error color overrides default') -// .get( -// '.json?url=https://github.com/badges/shields/raw/master/notafile.xml&query=//version&style=_shields_test' -// ) -// .expectJSON({ -// name: 'custom badge', -// value: 'resource not found', -// colorB: colorsB.lightgrey, -// }) - -// bug: https://github.com/badges/shields/issues/1446 -// t.create('XML from url | error color overrides user specified') -// .get('.json?query=//version&colorB=10ADED&style=_shields_test') -// .expectJSON({ -// name: 'custom badge', -// value: 'invalid query parameter: url', -// colorB: colorsB.red, -// }) +t.create('XML from url | error color overrides default') + .get( + '.json?url=https://github.com/badges/shields/raw/master/notafile.xml&query=//version&style=_shields_test' + ) + .expectJSON({ + name: 'custom badge', + value: 'resource not found', + colorB: colorsB.red, + }) + +t.create('XML from url | error color overrides user specified') + .get('.json?query=//version&colorB=10ADED&style=_shields_test') + .expectJSON({ + name: 'custom badge', + value: 'invalid query parameter: url', + colorB: colorsB.red, + }) let headers t.create('XML from url | request should set Accept header') diff --git a/services/dynamic/dynamic-yaml.tester.js b/services/dynamic/dynamic-yaml.tester.js index 08aaa0b9ff947af34f2c005f83485d9297a02161..d88ab35cefa3d380052cb19149e6e10a4588fb4e 100644 --- a/services/dynamic/dynamic-yaml.tester.js +++ b/services/dynamic/dynamic-yaml.tester.js @@ -80,29 +80,26 @@ t.create('YAML from url | invalid url') colorB: colorsB.red, }) -// bug: https://github.com/badges/shields/issues/1446 -// t.create('YAML from url | user color overrides default') -// .get( -// '.json?url=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/Chart.yaml&query=$.name&colorB=10ADED&style=_shields_test' -// ) -// .expectJSON({ name: 'custom badge', value: 'coredns', colorB: '#10ADED' }) +t.create('YAML from url | user color overrides default') + .get( + '.json?url=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/Chart.yaml&query=$.name&colorB=10ADED&style=_shields_test' + ) + .expectJSON({ name: 'custom badge', value: 'coredns', colorB: '#10ADED' }) -// bug: https://github.com/badges/shields/issues/1446 -// t.create('YAML from url | error color overrides default') -// .get( -// '.json?url=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/notafile.yaml&query=$.version&style=_shields_test' -// ) -// .expectJSON({ -// name: 'custom badge', -// value: 'resource not found', -// colorB: colorsB.lightgrey, -// }) +t.create('YAML from url | error color overrides default') + .get( + '.json?url=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/notafile.yaml&query=$.version&style=_shields_test' + ) + .expectJSON({ + name: 'custom badge', + value: 'resource not found', + colorB: colorsB.red, + }) -// bug: https://github.com/badges/shields/issues/1446 -// t.create('YAML from url | error color overrides user specified') -// .get('.json?query=$.version&colorB=10ADED&style=_shields_test') -// .expectJSON({ -// name: 'custom badge', -// value: 'invalid query parameter: url', -// colorB: colorsB.red, -// }) +t.create('YAML from url | error color overrides user specified') + .get('.json?query=$.version&colorB=10ADED&style=_shields_test') + .expectJSON({ + name: 'custom badge', + value: 'invalid query parameter: url', + colorB: colorsB.red, + })