diff --git a/services/crates/crates-base.js b/services/crates/crates-base.js index 00a5742378426338ea16d17b5b934e4b7f8b40a4..c14521c0590ccf1b93e6d5e3a8e4f6c42eb0381d 100644 --- a/services/crates/crates-base.js +++ b/services/crates/crates-base.js @@ -9,7 +9,7 @@ const keywords = ['Rust'] const crateSchema = Joi.object({ crate: Joi.object({ downloads: nonNegativeInteger, - recent_downloads: nonNegativeInteger, + recent_downloads: nonNegativeInteger.allow(null), max_version: Joi.string().required(), }).required(), versions: Joi.array() diff --git a/services/crates/crates-downloads.service.js b/services/crates/crates-downloads.service.js index 4363716dac7c4da317503d54723673ee3961d929..b26fe393d2fa5c27db1f7046b99ab5c1c23ffbc0 100644 --- a/services/crates/crates-downloads.service.js +++ b/services/crates/crates-downloads.service.js @@ -87,7 +87,7 @@ module.exports = class CratesDownloads extends BaseCratesService { case 'dv': return json.crate ? json.versions[0].downloads : json.version.downloads case 'dr': - return json.crate.recent_downloads + return json.crate.recent_downloads || 0 default: return json.crate ? json.crate.downloads : json.version.downloads } diff --git a/services/crates/crates-downloads.tester.js b/services/crates/crates-downloads.tester.js index c68374a4033863df010e65e40088dd5b8bde9c1b..da064bf9547596d2ec614241956b2614f807b4bd 100644 --- a/services/crates/crates-downloads.tester.js +++ b/services/crates/crates-downloads.tester.js @@ -37,6 +37,22 @@ t.create('recent downloads').get('/dr/libc.json').expectBadge({ message: isMetric, }) +t.create('recent downloads (null)') + .get('/dr/libc.json') + .intercept(nock => + nock('https://crates.io') + .get('/api/v1/crates/libc') + .reply(200, { + crate: { + downloads: 42, + recent_downloads: null, + max_version: '0.2.71', + }, + versions: [{ downloads: 42, license: 'MIT OR Apache-2.0' }], + }) + ) + .expectBadge({ label: 'recent downloads', message: '0' }) + t.create('recent downloads (with version)') .get('/dr/libc/0.2.31.json') .expectBadge({