From b4579adc44329e33c7491a78f14a53a7b30ce34c Mon Sep 17 00:00:00 2001 From: "Felix C. Stegerman" <flx@obfusk.net> Date: Sat, 27 Jun 2020 22:44:48 +0200 Subject: [PATCH] [crates] recent_downloads can be null (#5237) * crates: recent_downloads can be null * crates: add test for recent_downloads = null --- services/crates/crates-base.js | 2 +- services/crates/crates-downloads.service.js | 2 +- services/crates/crates-downloads.tester.js | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/services/crates/crates-base.js b/services/crates/crates-base.js index 00a5742378..c14521c059 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 4363716dac..b26fe393d2 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 c68374a403..da064bf954 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({ -- GitLab