diff --git a/lib/badge-data.js b/lib/badge-data.js index 3fab2000e5..dc75f84eea 100644 --- a/lib/badge-data.js +++ b/lib/badge-data.js @@ -106,8 +106,9 @@ function makeBadgeData(defaultLabel, overrides) { logoPosition: +overrides.logoPosition, logoWidth: +overrides.logoWidth, links: toArray(overrides.link), - colorA: overrides.colorA, - colorB: overrides.colorB, + // Scoutcamp sometimes turns these into numbers. + colorA: `${overrides.colorA}`, + colorB: `${overrides.colorB}`, } } diff --git a/services/base.js b/services/base.js index f76f28641d..f8f115b7a4 100644 --- a/services/base.js +++ b/services/base.js @@ -334,9 +334,15 @@ class BaseService { logoColor: overrideLogoColor, logoWidth: overrideLogoWidth, link: overrideLink, - colorA: overrideLabelColor, - colorB: overrideColor, } = overrides + // Scoutcamp converts numeric query params to numbers. Convert them back. + let { colorB: overrideColor, colorA: overrideLabelColor } = overrides + if (typeof overrideColor === 'number') { + overrideColor = `${overrideColor}` + } + if (typeof overrideLabelColor === 'number') { + overrideLabelColor = `${overrideLabelColor}` + } const { isError, diff --git a/services/base.spec.js b/services/base.spec.js index 0f29b6a6da..ddb31184dd 100644 --- a/services/base.spec.js +++ b/services/base.spec.js @@ -396,6 +396,15 @@ describe('BaseService', function() { expect(badgeData.color).to.equal('10ADED') }) + it('converts a query-string numeric color to a string', function() { + const badgeData = DummyService._makeBadgeData( + // Scoutcamp converts numeric query params to numbers. + { colorB: 123 }, + { color: 'green' } + ) + expect(badgeData.color).to.equal('123') + }) + it('does not override the color in case of an error', function() { const badgeData = DummyService._makeBadgeData( { colorB: '10ADED' }, diff --git a/services/github/github-languages.tester.js b/services/github/github-languages.tester.js index 8aac87d48c..b41f2f32fd 100644 --- a/services/github/github-languages.tester.js +++ b/services/github/github-languages.tester.js @@ -19,6 +19,16 @@ t.create('top language') }) ) +t.create('top language') + .get('/top/badges/shields.json?colorB=123&format=_shields_test') + .expectJSONTypes( + Joi.object().keys({ + name: 'javascript', + value: Joi.string().regex(/^([1-9]?[0-9]\.[0-9]|100\.0)%$/), + color: '#123', + }) + ) + t.create('top language with empty repository') .get('/top/pyvesb/emptyrepo.json') .expectJSON({ name: 'language', value: 'none' }) diff --git a/services/static-badge/static-badge.tester.js b/services/static-badge/static-badge.tester.js index f61a586237..0021c28ad6 100644 --- a/services/static-badge/static-badge.tester.js +++ b/services/static-badge/static-badge.tester.js @@ -42,6 +42,10 @@ t.create('Override colorB') .get('/badge/label-message-blue.json?style=_shields_test&colorB=yellow') .expectJSON({ name: 'label', value: 'message', color: 'yellow' }) +t.create('Override colorB with a number') + .get('/badge/label-message-blue.json?style=_shields_test&colorB=123') + .expectJSON({ name: 'label', value: 'message', color: '#123' }) + t.create('Override label') .get('/badge/label-message-blue.json?style=_shields_test&label=mylabel') .expectJSON({ name: 'mylabel', value: 'message', color: 'blue' })