From bc18850e0533102a158adfb9ffcdc42cca454ce4 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@keylocation.sg> Date: Sat, 23 Sep 2017 08:00:17 +0200 Subject: [PATCH] fix: use dummy time if missing from npm response (#830) --- lib/api/npm.js | 7 ++++++- test/api/__snapshots__/npm.spec.js.snap | 27 +++++++++++++++++++++++++ test/api/npm.spec.js | 9 +++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/lib/api/npm.js b/lib/api/npm.js index 3a60f114d4..00824525db 100644 --- a/lib/api/npm.js +++ b/lib/api/npm.js @@ -81,7 +81,12 @@ async function getDependency(name, logger) { }; Object.keys(dep.versions).forEach(version => { // We don't use any of the version payload currently - dep.versions[version] = { time: res.body.time[version] }; + dep.versions[version] = { + // fall back to arbitrary time for old npm servers + time: res.body.time + ? res.body.time[version] + : '2017-01-01T12:00:00.000Z', + }; }); npmCache[cacheKey] = dep; logger.trace({ dependency: dep }, 'dependency'); diff --git a/test/api/__snapshots__/npm.spec.js.snap b/test/api/__snapshots__/npm.spec.js.snap index 134266500f..b86e454878 100644 --- a/test/api/__snapshots__/npm.spec.js.snap +++ b/test/api/__snapshots__/npm.spec.js.snap @@ -139,6 +139,33 @@ Array [ ] `; +exports[`api/npm should use dummy time if missing 1`] = ` +Object { + "dist-tags": Object { + "latest": "0.0.1", + }, + "homepage": "https://google.com", + "name": undefined, + "renovate-config": undefined, + "repositoryUrl": "https://google.com", + "versions": Object { + "0.0.1": Object { + "time": "2017-01-01T12:00:00.000Z", + }, + }, +} +`; + +exports[`api/npm should use dummy time if missing 2`] = ` +Array [ + "https://registry.npmjs.org/foobar", + Object { + "headers": Object {}, + "json": true, + }, +] +`; + exports[`api/npm should use homepage 1`] = ` Object { "dist-tags": Object { diff --git a/test/api/npm.spec.js b/test/api/npm.spec.js index 9e1aeccc33..ce9132a59e 100644 --- a/test/api/npm.spec.js +++ b/test/api/npm.spec.js @@ -100,4 +100,13 @@ describe('api/npm', () => { const call = got.mock.calls[0]; expect(call).toMatchSnapshot(); }); + it('should use dummy time if missing', async () => { + const noTimeResponse = { ...npmResponse }; + delete noTimeResponse.body.time; + got.mockImplementation(() => Promise.resolve(noTimeResponse)); + const res = await npm.getDependency('foobar', logger); + expect(res).toMatchSnapshot(); + const call = got.mock.calls[0]; + expect(call).toMatchSnapshot(); + }); }); -- GitLab